یکی از روش های موثر برنامه نویسی برای نگهداری اطلاعات در رایانه ها استفاده از  برنامه نویسی به زبان ها مختلف حتی 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.

  1. Original source code
  2. Normal reverse engineered source code
  3. 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

 اکنون یک پیشنهاد آیا شما می خواهید کدی را که من خریده ام داشته باشید؟!