یکی از روش های موثر برنامه نویسی برای نگهداری اطلاعات در رایانه ها استفاده از برنامه نویسی به زبان ها مختلف حتی java ,c , بخصوص VB ویژوال بیسیک در محیط برنامه نویسی Microsoft Accessاست استفاده از این محیط برنامه نویسی با به کارگیری از محیط های مکملی مانند SWF ها و DLL ها می تواند به درستی همان چیزی را ارائه کند که یک کاربر آنرا احتیاج دارد محیط Access محیطی است که برای کاربران می تواند علاوه بر تولید ساختارهای اطلاعاتی تحت عنوان جدول ها Table و نگهداری اطلاعات در آنها به فرم ها و گزارش ها نیز مجهز گردد، هر آنچه که کاربران بانک های اطلاعاتی از یک نرم افزار نگهداری اطلاعات انتظار دارند در بانک اطلاعاتی Access میسر است.برنامه نویسان می توانند با تولید ساختارهای اطلاعاتی Table ها به کاربران این امکان را بدهند تا اطلاعات مورد نیاز خود را نگهداری کنند و در ادامه از طریق طراحی فرم ها و کوئری ها و گزارش ها که تحت عنوانForm و Query و Report مشخص می شوند اطلاعات مورد نیاز کاربران را تجزیه تحلیل کرده و در اختیار آنان قرار دهند.در گام های بعدی در استفاده از Access حتی ارائه گزارش ها به صورت نمودارها نیز میسر است و حتی در فرم ها می توان از منوهای دکمه دار و کمبوها و لیست ها و ... و در صورت نیاز از منوهایی که با برنامه Flash ساخته شده اند استفاده کرد.این ها همه توانمندی هایی است که یک کاربر ساده می تواند از آنها استفاده کند وقتی که بانک اطلاعاتی استفاده عمومی تر پیدا می کند مثلا کسی یک بانک اطلاعاتی با اکسس تولید می کند و این برنامه خوب عمل می کند دیگران به آن نیاز پیدا می کنند و برنامه نویس و یا به عبارتی متخصص استفاده از برنامه ی Access تصمیم می گیرد به ابزارهایی روی آورد که در عدم حضور او نیز برنامه کار کند و به عبارتی بتواند برنامه تولید شده را به کاربران دیگر نیز واگذار کند به برنامه نویسی در Access روی می آورد که آن استفاده جدی از بخش هایی درAccess است که به ماکرو ها و برنامه نویسی در محیط VBA یا ویژوال بیسیک معروف است.برنامه نویسی در Access مشخصا در این دو بخش انجام می پذیر یعنیMacro و VBAاستفاده از VBA یا به عبارتی استفاده از VB در Access با فشردن دو کلید Alt+F11 میسر می شود (این دو کلید ترکیبی در سایر برنامه هایOffice نیز کاربرد دارد و در هر برنامه با توجه به امکانات موجود در آن برنامه باید برنامه هایی را نوشت که در Access این برنامه های می تواند بررسی و تغییر و اصلاح اطلاعات و نهایتا گزارش سازی هایی باشد که همگی از بانک اطلاعاتی Access بهره می گیرند)محیط VBA محیطی است که هر کدی را به زبان های مختلف و به خصوص VB می توان نوشت تا برای بهره گیری از تمامی امکانات سیستم موثر باشد در این میان می توان حتی به بهره گیری از رجیستری سیستم و یا اجرای برنامه های Exe خارجی اشاره کرد.در ادامه در برنامه نویسی در VBA می توان به مباحثی پرداخت که به سطح امنیتی برنامه نویسی مربوط اند و آن بهره گیری از DLLهاست یعنی برخی از ماژول ها را می توان در VisualBasic نوشت و آنها را به صورت فایل های DLL کامپایل کرد و با فرا خوانی فایل DLL مورد نظر در محیط برنامه نوسی VBA از ماژول های موجود در آنها استفاده کرد.اما برنامه نویسی در محیط VBA نیاز به حفاظت دارد یعنی برنامه نویس باید اطمینان پیدا کند که برنامه های نوشته شده او توسط دیگران به خصوص سودجویانی که معمولا هکر هستند و نرم افزارها را کرک می کنند مورد سوء استفاده قرار نخواهد گرفتMicrosoft Access می تواند برنامه های نوشته شده در فایل Access را از دیدها دور نگه دارد کافی است در محیط VBA از طریق منوی Tools و گزینه Properties و زبانهProtection کدها را قفل کرده و روی آنها رمز بگذاریداما حفاظت در Access به اینجا ختم نمی شود شما می تواند فایل Accdb اکسس را به Accde تبدیل کنید تا در این حالت حتی کدها با رمز هم شناسایی نشوندآیا نرم افزارهایی وجود دارند که بتوانند کدهای موجود در برنامه Accde را شناسایی کنند؟ بله!انگار کار حفاظت از کدها و تلاش برای شناسایی آنها تمامی ندارد. برخی از برنامه ها در بازار وجود دارند که سعی می کنند رمز ورود به فایل های Access را شناسایی و باز کنند از میان می توان به برنامه های مختلفی اشاره کرد منجمله Passware و یا MDEUnlockerاما نرم افزاری وجود دارد به نام MDECodeProtector که دست همه را از پشت بسته است به راهنمای این نرم افزار در سایت http://www.everythingaccess.com مراجعه کنید و یا با بخش Support آن مکاتبه کنید، درخواهید یافت که این نرم افزار از طریقمهندسی معکوستمامی معابری را که برای هک کردن فایلهای Accde وجود دارند را شناسایی کرده و آنها را می بندداین نرم افزار از طریق حذف متغیرها و ثابت ها و جانشانی زیرکانه ای که دارد بلایی بر سر فایل های Access می آورد که حتی نرم افزار دیگری که تولید این شرکت است وMDEUnlocker نام دارد هم نمی تواند کدهای فایل را شناسایی کند من یک فایل Accdb را به نحوی که هر گونه حفاظتی که Access می تواند برای آن بوجود آورد تولید کردم؛ روی آن رمز گذاشتم، روی بخش VBA آن رمز گذاشتم، آنرا به Accde تبدیل کردم و نهایتا آنرا برای بخش Support شرکت مذبور ارسال کردم، و از آنها خواستم به من بگویند داخل آن چه نوشته شده است بلافاصله محتوای آنرا برایم فرستادند و فهمیدم که کدهای حفاظت شده من، توسط نرم افزارهای این شرکت به راحتی قابل رویت هستند (این در حالی است که در سایر نرم افزارها این کدها محافظت شده و غیر قابل نمایش گزارش می شدند)مصمم شدم نرم افزار حفاظت از کدهای ACCESS این شرکت موسوم بهCode Protector را خریداری کنم و آنرا خریدم پس از قرار دادن فایل Accde داخل نرم افزار Code Protector v2 for Microsoft® Access و حفاظت از کدهای آن بار دیگر برای شرکت فایل محافظت شده را فرستادم اینبار نیز شرکت کدهای داخل آنرا برایم فرستاد اما کدها چیزی برای نمایش دادن نداشت همه اش عباراتی بود نا معلوم که برای برنامه نویسی و هک و به عبارتی فهمیدن محتوای آن قابل استفاده نبود.شاید این سئوال برای شما پیش آمده که چرا برای نگاه کردن داخل فایل و فهمیدن محتوای آن فایل را برای شرکت تولید کننده نرم افزار ارسال می کردم؟این شرکت نرم افزار دیگری تولید کرده که به نام MDEUnlocker معروف است، این نرم افزار می تواند کدهای داخل فایل ACCDE را به نمایش بگذارد اما توجه کنید که نمی تواند از طریقمهندسی معکوساز آنها حفاظت کند، من گزارش هایی را از نگارش 1.3 نرم افزار MDEUnlocker دیده ام که بدون کد رجیستری می توان از آن استفاده کرد و این نرم افزار را نیز بدست آورده ام اما توجه داشته باشد نگارش 1.3 این نرم افزار قدیمی است و فقط بر روی فایل های MDE کارایی دارد و فایل های ACCDE را شناسایی نمیکند(MDE تولید Access2003 و فایل های ACCDE تولید ACCESS2007 , 2010 است)هم اکنون نگارش موجود در سایت شرکت تولید کننده این نرم افزار نگارش 3.20 است که حریف فایل های محافظت نشده ACCDE می شود. اما بر روی فایل های ACCDE یی که با نرم افزار Code Protector v2 for Microsoft® Access محافظت شده اند کارایی جدی ندارد. آیا شما نرم افزاری را می شناسید که به قدرت تولیدات این شرکت بتواند بر روی فایل های خروجی اکسس تاثیر بگذارد؟
مثال های زیر با دقت توجه کنید(این مثال دقیقا از وب سایت مورد بحث در اینجا کپی شده است):
مهندسی معکوس
Code Protector Example source code after reverse engineering
Let's take a simple VBA function (taken from Northwind sample database) and look at the results of normal reverse engineering versus reverse engineering after protecting the file with our Code Protector.
- Original source code
- Normal reverse engineered source code
- Reverse engineered code after protecting the MDE with Code Protector
The original source code:
Function OpenStartup() As Boolean
Dim blnHideStartupForm As Boolean
On Error GoTo OpenStartup_Err
If IsItAReplica() Then
DoCmd.Close
Else
If (CurrentDb().Properties("StartupForm") = "Startup" Or _
CurrentDb().Properties("StartupForm") = "Form.Startup") Then
blnHideStartupForm = False
Else
blnHideStartupForm = True
End If
Forms!Startup!HideStartupForm = blnHideStartupForm
End If
OpenStartup_Exit:
Exit Function
OpenStartup_Err:
Const conPropertyNotFound = 3270
If Err = conPropertyNotFound Then
Forms!Startup!HideStartupForm = True
Resume OpenStartup_Exit
End If
End Function
Normal reverse engineered source code after being compiled to MDE format:
Function OpenStartup() As Boolean
Dim blnHideStartupForm As Boolean
Const conPropertyNotFound = 3270
On Error GoTo ErrorHandler
If IsItAReplica() Then
DoCmd.Close
Else
If CurrentDb().Properties("StartupForm") = "Startup" Or _
CurrentDb().Properties("StartupForm") = "Form.Startup" Then
blnHideStartupForm = False
Else
blnHideStartupForm = True
End If
Forms("Startup").Controls("HideStartupForm") = blnHideStartupForm
End If
ExitRoutine:
Exit Function
ErrorHandler:
If Err = conPropertyNotFound Then
Forms("Startup").Controls("HideStartupForm") = True
Resume ExitRoutine
End If
End Function
As you can see, by using standard reverse engineering on a compiled MDE version of Northwind, we can retrieve VBA source code that is very similar to the original.
However, after using the MDE Protector on the compiled MDE file, there are some major benefits that make the reverse engineering much less accurate.
-
Constants are removed
-
Variable names and datatypes are lost (see below - variable blnHideStartupForm:Boolean becomes Variable8:Variant)
-
After using the MDE Protector a decompiler cannot determine whether the variables that were defined by the compiler (implicit/temporary variables) are in fact real variables or not so it has to assume they are all real, explicit variables ***
*** Compilers (including the VBA compiler) make use of both explicit variables (declared by the developer) and implicit variables (declared by the compiler) in order to make everything work as it should. By examining the "compiler junk", a decompiler can determine exactly which variables are implicit and which ones are explicit - using this information, the decompiler can then optimize the resultant source code by removing all implicit variables - this is key to making the resultant source code very accurate to the original.
Reverse engineered code after protecting the MDE with the Code Protector:
Function OpenStartup() As Boolean
Dim Variable1
Dim Variable2 As Object
Dim Variable3
Dim Variable4
Dim Variable5 As Object
Dim Variable6
Dim Variable7
Dim Variable8
Dim Variable9 As Object
Dim Variable10 As Object
On Error GoTo ErrorHandler
Variable1 = IsItAReplica()
If Variable1 = True Then
DoCmd.Close
Else
Set Variable2 = CurrentDb()
Variable3 = Variable2.Properties("StartupForm")
Variable4 = (Variable3 = "Startup")
Set Variable2 = Nothing
Set Variable5 = CurrentDb()
Variable6 = Variable5.Properties("StartupForm")
Variable7 = (Variable6 = "Form.Startup")
Set Variable5 = Nothing
If Variable4 = True Or _
Variable7 = True Then
Variable8 = False
Else
Variable8 = True
End If
Set Variable9 = Forms("Startup")
Set Variable10 = Variable9.Controls("HideStartupForm")
Variable10 = Variable8
Set Variable10 = Nothing
Set Variable9 = Nothing
End If
ExitRoutine:
Exit Function
ErrorHandler:
If Err = 3270 Then
Set Variable9 = Forms("Startup")
Set Variable10 = Variable9.Controls("HideStartupForm")
Variable10 = True
Set Variable10 = Nothing
Set Variable9 = Nothing
Resume ExitRoutine
End If
End Function
As you can see, the result is much less understandable code. A developer could then tidy this code up and optimize it but the point is that it makes the process much harder (particularly in projects of considerable size), and therefore reverse engineering/decompiling your project will become much less effective.
کدهایی که در بالا دیده می شوند از فایل accde استخراج شده اند.
2007
2010
2013