VB RezQ - Source Recovery for Visual Basic vbrezq.com
   Home   |   Overview   |   Download   |   Buy Now   |   Support
VB RezQ

VB RezQ Native Code Disassembly


For VB5 and VB6 programs that have been compiled to native code, VB RezQ can provide a disassembly of the x86 code for each subroutine.

The disassembly is displayed as commented lines within the subroutine declaration. The user can select the level of display from none, through four stages from a brief analysis to a full listing.

VB RezQ analyses the address references in the native code and adds comments to the disassembly to indicate:-
   logic flow jumps to other locations in the same subroutine
   calls to other subroutines
   calls to routines in the VB Runtime DLL
   calls to API routines in other DLLs
   and references to text strings.

Examples of the resulting disassembly are shown here for the GetKeyValue() function in frmAbout.frm of the Actxdoc.dll project used to demonstrate VB RezQ.

First here is the original source code for the function (stripped of comments for clarity).
Public Function GetKeyValue(KeyRoot As Long, KeyName As String, _
                            SubKeyRef As String, _
                            ByRef KeyVal As String) As Boolean
  Dim i As Long   
  Dim rc As Long    
  Dim hKey As Long   
  Dim hDepth As Long  
  Dim KeyValType As Long 
  Dim tmpVal As String  
  Dim KeyValSize As Long 

  rc = RegOpenKeyEx(KeyRoot, KeyName, 0, KEY_ALL_ACCESS, hKey) 
  If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError 
  
  tmpVal = String$(1024, 0)
  KeyValSize = 1024 
  rc = RegQueryValueEx(hKey, SubKeyRef, 0, _
                       KeyValType, tmpVal, KeyValSize)
  If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError
  
  If (Asc(Mid(tmpVal, KeyValSize, 1)) = 0) Then
      tmpVal = Left(tmpVal, KeyValSize - 1)
  Else  
      tmpVal = Left(tmpVal, KeyValSize)
  End If

  Select Case KeyValType 
  Case REG_SZ  
      KeyVal = tmpVal  
  Case REG_DWORD   
      For i = Len(tmpVal) To 1 Step -1  
          KeyVal = KeyVal + Hex(Asc(Mid(tmpVal, i, 1))) 
      Next
      KeyVal = Format$("&h" + KeyVal) 
  End Select
  
  GetKeyValue = True  
  rc = RegCloseKey(hKey) 
  Exit Function 
  
GetKeyError:  
  KeyVal = ""
  GetKeyValue = False 
  rc = RegCloseKey(hKey)
End Function 
When the briefest, comments only, option is selected, VB RezQ displays just the analysis comments as follows:-
'Sub GetKeyValue()
'N  * ref: __vbaExceptHandler
'N  * ref: __vbaStrToAnsi
'N  * API ref: RegOpenKeyExA
'N  * ref: __vbaSetSystemError
'N  * ref: __vbaStrToUnicode
'N  * ref: __vbaFreeStr
'N  * ref: String$(
'N  * ref: __vbaStrMove
'N  * ref: __vbaFreeVar
'N  * API ref: RegQueryValueExA
'N  * ref: __vbaSetSystemError
'N  * ref: __vbaStrToUnicode
'N  * ref: __vbaStrToUnicode
'N  * ref: __vbaFreeStrList
'N  * ref: __vbaStrCopy
'N  * ref: Mid(
'N  * ref: __vbaStrVarVal
'N  * ref: Asc(
'N  * ref: __vbaFreeStr
'N  * ref: __vbaFreeVarList
'N  * ref: Left(
'N  * ref: Left(
'N  * ref: __vbaStrVarMove
'N  * ref: __vbaFreeVar
'N  * ref: __vbaLenBstr
'N  * ref: Mid(
'N  * ref: __vbaStrVarVal
'N  * ref: Asc(
'N  * ref: Hex(
'N  * ref: __vbaVarAdd
'N  * ref: __vbaStrVarMove
'N  * ref: __vbaFreeStr
'N  * ref: __vbaFreeVarList
'N  * ref: "&h"
'N  * ref: __vbaStrCat
'N  * ref: Format$(
'N  * ref: __vbaFreeVarList
'N  * ref: __vbaStrCopy
'N  * API ref: RegCloseKey
'N  * ref: __vbaSetSystemError
'N  * ref: __vbaFreeStrList
'N  * ref: __vbaFreeVarList
'N  * ref: __vbaFreeStr
'N  * ref: __vbaErrorOverflow
'End Sub 
Here we can see references to external DLL API calls (e.g. RegOpenKeyExA); to calls to the VB runtime DLL for Basic keyword functions (e.g. String$()); to calls to the VB runtime DLL for internal VB support functions (e.g.__vbaStrCopy); and to memory locations holding text strings (e.g. "&h").

The logic flow within GetKeyValue() is not visible in the brief view, but can be traced in the more detailed listings which show every x86 operation. The following is the fullest level listing for this function:-
'Sub GetKeyValue()
'N 110059D0 55                   push ebp
'N 110059D1 8BEC                 mov ebp, esp
'N 110059D3 83EC0C               sub esp, 0Ch
'N 110059D6 6876120011           push L11001276
'N                               * ref: __vbaExceptHandler
'N 110059DB 64A100000000         mov eax, dword ptr fs:[L00000000]
'N 110059E1 50                   push eax
'N 110059E2 64892500000000       mov dword ptr fs:[L00000000], esp
'N 110059E9 81ECD4000000         sub esp, 0D4h
'N 110059EF 53                   push ebx
'N 110059F0 56                   push esi
'N 110059F1 57                   push edi
'N 110059F2 8965F4               mov dword ptr [ebp-0Ch], esp
'N 110059F5 C745F858120011       mov dword ptr [ebp-8], L11001258
'N 110059FC 33FF                 xor edi, edi
'N 110059FE 897DFC               mov dword ptr [ebp-4], edi
'N 11005A01 8B4508               mov eax, dword ptr [ebp+8]
'N 11005A04 50                   push eax
'N 11005A05 8B08                 mov ecx, dword ptr [eax]
'N 11005A07 FF5104               call dword ptr [ecx+4]
'N 11005A0A 8B5D10               mov ebx, dword ptr [ebp+10h]
'N 11005A0D 8B35F8100011         mov esi, dword ptr [L110010F8]
'N                               * ref: __vbaStrToAnsi
'N 11005A13 8D55E8               lea edx, dword ptr [ebp-18h]
'N 11005A16 8D4DC8               lea ecx, dword ptr [ebp-38h]
'N 11005A19 8B03                 mov eax, dword ptr [ebx]
'N 11005A1B 52                   push edx
'N 11005A1C 683F000200           push 2003Fh
'N 11005A21 57                   push edi
'N 11005A22 50                   push eax
'N 11005A23 51                   push ecx
'N 11005A24 897DE8               mov dword ptr [ebp-18h], edi
'N 11005A27 897DDC               mov dword ptr [ebp-24h], edi
'N 11005A2A 897DD4               mov dword ptr [ebp-2Ch], edi
'N 11005A2D 897DD0               mov dword ptr [ebp-30h], edi
'N 11005A30 897DCC               mov dword ptr [ebp-34h], edi
'N 11005A33 897DC8               mov dword ptr [ebp-38h], edi
'N 11005A36 897DC4               mov dword ptr [ebp-3Ch], edi
'N 11005A39 897DB4               mov dword ptr [ebp-4Ch], edi
'N 11005A3C 897DA4               mov dword ptr [ebp-5Ch], edi
'N 11005A3F 897D94               mov dword ptr [ebp-6Ch], edi
'N 11005A42 897D84               mov dword ptr [ebp-7Ch], edi
'N 11005A45 89BD74FFFFFF         mov dword ptr [ebp-8Ch], edi
'N 11005A4B 89BD64FFFFFF         mov dword ptr [ebp-9Ch], edi
'N 11005A51 89BD34FFFFFF         mov dword ptr [ebp-0CCh], edi
'N 11005A57 FFD6                 call esi
'N 11005A59 8B550C               mov edx, dword ptr [ebp+0Ch]
'N 11005A5C 50                   push eax
'N 11005A5D 8B02                 mov eax, dword ptr [edx]
'N 11005A5F 50                   push eax
'N 11005A60 E8FFFFD457           call L11002EBC
'N                               * API ref: RegOpenKeyExA
'N 11005A65 898530FFFFFF         mov dword ptr [ebp-0D0h], eax
'N 11005A6B FF1534100011         call dword ptr [L11001034]
'N                               * ref: __vbaSetSystemError
'N 11005A71 8B4DC8               mov ecx, dword ptr [ebp-38h]
'N 11005A74 51                   push ecx
'N 11005A75 53                   push ebx
'N 11005A76 FF1598100011         call dword ptr [L11001098]
'N                               * ref: __vbaStrToUnicode
'N 11005A7C 8D4DC8               lea ecx, dword ptr [ebp-38h]
'N 11005A7F FF1524110011         call dword ptr [L11001124]
'N                               * ref: __vbaFreeStr
'N 11005A85 39BD30FFFFFF         cmp dword ptr [ebp-0D0h], edi
'N 11005A8B 0F850000009B         jnz L11005B2C
'N 11005A91 8D55B4               lea edx, dword ptr [ebp-4Ch]
'N 11005A94 897DBC               mov dword ptr [ebp-44h], edi
'N 11005A97 52                   push edx
'N 11005A98 6800040000           push 400h
'N 11005A9D C745B402000000       mov dword ptr [ebp-4Ch], 2
'N 11005AA4 FF159C100011         call dword ptr [L1100109C]
'N                               * ref: String$(
'N 11005AAA 8B1D10110011         mov ebx, dword ptr [L11001110]
'N                               * ref: __vbaStrMove
'N 11005AB0 8BD0                 mov edx, eax
'N 11005AB2 8D4DD0               lea ecx, dword ptr [ebp-30h]
'N 11005AB5 FFD3                 call ebx
'N 11005AB7 8D4DB4               lea ecx, dword ptr [ebp-4Ch]
'N 11005ABA FF150C100011         call dword ptr [L1100100C]
'N                               * ref: __vbaFreeVar
'N 11005AC0 8B4DD0               mov ecx, dword ptr [ebp-30h]
'N 11005AC3 8D45CC               lea eax, dword ptr [ebp-34h]
'N 11005AC6 50                   push eax
'N 11005AC7 8D55C4               lea edx, dword ptr [ebp-3Ch]
'N 11005ACA 51                   push ecx
'N 11005ACB 52                   push edx
'N 11005ACC C745CC00040000       mov dword ptr [ebp-34h], 400h
'N 11005AD3 FFD6                 call esi
'N 11005AD5 8B4D14               mov ecx, dword ptr [ebp+14h]
'N 11005AD8 50                   push eax
'N 11005AD9 8D45DC               lea eax, dword ptr [ebp-24h]
'N 11005ADC 8B11                 mov edx, dword ptr [ecx]
'N 11005ADE 50                   push eax
'N 11005ADF 57                   push edi
'N 11005AE0 8D45C8               lea eax, dword ptr [ebp-38h]
'N 11005AE3 52                   push edx
'N 11005AE4 50                   push eax
'N 11005AE5 FFD6                 call esi
'N 11005AE7 8B4DE8               mov ecx, dword ptr [ebp-18h]
'N 11005AEA 50                   push eax
'N 11005AEB 51                   push ecx
'N 11005AEC E8FFFFD417           call L11002F08
'N                               * API ref: RegQueryValueExA
'N 11005AF1 8BF0                 mov esi, eax
'N 11005AF3 FF1534100011         call dword ptr [L11001034]
'N                               * ref: __vbaSetSystemError
'N 11005AF9 8B55C8               mov edx, dword ptr [ebp-38h]
'N 11005AFC 8B4514               mov eax, dword ptr [ebp+14h]
'N 11005AFF 52                   push edx
'N 11005B00 50                   push eax
'N 11005B01 FF1598100011         call dword ptr [L11001098]
'N                               * ref: __vbaStrToUnicode
'N 11005B07 8B4DC4               mov ecx, dword ptr [ebp-3Ch]
'N 11005B0A 8D55D0               lea edx, dword ptr [ebp-30h]
'N 11005B0D 51                   push ecx
'N 11005B0E 52                   push edx
'N 11005B0F FF1598100011         call dword ptr [L11001098]
'N                               * ref: __vbaStrToUnicode
'N 11005B15 8D45C4               lea eax, dword ptr [ebp-3Ch]
'N 11005B18 8D4DC8               lea ecx, dword ptr [ebp-38h]
'N 11005B1B 50                   push eax
'N 11005B1C 51                   push ecx
'N 11005B1D 6A02                 push 2
'N 11005B1F FF15D0100011         call dword ptr [L110010D0]
'N                               * ref: __vbaFreeStrList
'N 11005B25 83C40C               add esp, 0Ch
'N 11005B28 3BF7                 cmp esi, edi
'N 11005B2A 741A                 jz L11005B46
'N 
'N L11005B2C:
'N 11005B2C 8B4D18               mov ecx, dword ptr [ebp+18h]
'N 11005B2F BA482D0011           mov edx, L11002D48
'N 11005B34 FF15CC100011         call dword ptr [L110010CC]
'N                               * ref: __vbaStrCopy
'N 11005B3A 8B55E8               mov edx, dword ptr [ebp-18h]
'N 11005B3D 897DD4               mov dword ptr [ebp-2Ch], edi
'N 11005B40 52                   push edx
'N 11005B41 E900000262           jmp L11005DA8
'N 
'N L11005B46:
'N 11005B46 8B55CC               mov edx, dword ptr [ebp-34h]
'N 11005B49 8D45D0               lea eax, dword ptr [ebp-30h]
'N 11005B4C 8D4DB4               lea ecx, dword ptr [ebp-4Ch]
'N 11005B4F 89856CFFFFFF         mov dword ptr [ebp-94h], eax
'N 11005B55 51                   push ecx
'N 11005B56 8D8564FFFFFF         lea eax, dword ptr [ebp-9Ch]
'N 11005B5C 52                   push edx
'N 11005B5D 8D4DA4               lea ecx, dword ptr [ebp-5Ch]
'N 11005B60 50                   push eax
'N 11005B61 51                   push ecx
'N 11005B62 C745BC01000000       mov dword ptr [ebp-44h], 1
'N 11005B69 C745B402000000       mov dword ptr [ebp-4Ch], 2
'N 11005B70 C78564FFFFFF08400000 mov dword ptr [ebp-9Ch], 4008h
'N 11005B7A FF1564100011         call dword ptr [L11001064]
'N                               * ref: Mid(
'N 11005B80 8D55A4               lea edx, dword ptr [ebp-5Ch]
'N 11005B83 8D45C8               lea eax, dword ptr [ebp-38h]
'N 11005B86 52                   push edx
'N 11005B87 50                   push eax
'N 11005B88 FF15AC100011         call dword ptr [L110010AC]
'N                               * ref: __vbaStrVarVal
'N 11005B8E 50                   push eax
'N 11005B8F FF1524100011         call dword ptr [L11001024]
'N                               * ref: Asc(
'N 11005B95 668BF0               mov si, ax
'N 11005B98 8D4DC8               lea ecx, dword ptr [ebp-38h]
'N 11005B9B 66F7DE               neg si
'N 11005B9E 1BF6                 sbb esi, esi
'N 11005BA0 46                   inc esi
'N 11005BA1 F7DE                 neg esi
'N 11005BA3 FF1524110011         call dword ptr [L11001124]
'N                               * ref: __vbaFreeStr
'N 11005BA9 8D4DA4               lea ecx, dword ptr [ebp-5Ch]
'N 11005BAC 8D55B4               lea edx, dword ptr [ebp-4Ch]
'N 11005BAF 51                   push ecx
'N 11005BB0 52                   push edx
'N 11005BB1 6A02                 push 2
'N 11005BB3 FF1518100011         call dword ptr [L11001018]
'N                               * ref: __vbaFreeVarList
'N 11005BB9 83C40C               add esp, 0Ch
'N 11005BBC 663BF7               cmp si, di
'N 11005BBF 7437                 jz L11005BF8
'N 11005BC1 8B4DCC               mov ecx, dword ptr [ebp-34h]
'N 11005BC4 8D45D0               lea eax, dword ptr [ebp-30h]
'N 11005BC7 83E901               sub ecx, 1
'N 11005BCA 89856CFFFFFF         mov dword ptr [ebp-94h], eax
'N 11005BD0 0F800000024A         jo L11005E20
'N 11005BD6 8D9564FFFFFF         lea edx, dword ptr [ebp-9Ch]
'N 11005BDC 51                   push ecx
'N 11005BDD 8D45B4               lea eax, dword ptr [ebp-4Ch]
'N 11005BE0 52                   push edx
'N 11005BE1 50                   push eax
'N 11005BE2 C78564FFFFFF08400000 mov dword ptr [ebp-9Ch], 4008h
'N 11005BEC FF1500110011         call dword ptr [L11001100]
'N                               * ref: Left(
'N 11005BF2 8D4DB4               lea ecx, dword ptr [ebp-4Ch]
'N 11005BF5 51                   push ecx
'N 11005BF6 EB2C                 jmp L11005C24
'N 
'N L11005BF8:
'N 11005BF8 8B45CC               mov eax, dword ptr [ebp-34h]
'N 11005BFB 8D55D0               lea edx, dword ptr [ebp-30h]
'N 11005BFE 89956CFFFFFF         mov dword ptr [ebp-94h], edx
'N 11005C04 8D8D64FFFFFF         lea ecx, dword ptr [ebp-9Ch]
'N 11005C0A 50                   push eax
'N 11005C0B 8D55B4               lea edx, dword ptr [ebp-4Ch]
'N 11005C0E 51                   push ecx
'N 11005C0F 52                   push edx
'N 11005C10 C78564FFFFFF08400000 mov dword ptr [ebp-9Ch], 4008h
'N 11005C1A FF1500110011         call dword ptr [L11001100]
'N                               * ref: Left(
'N 11005C20 8D45B4               lea eax, dword ptr [ebp-4Ch]
'N 11005C23 50                   push eax
'N 
'N L11005C24:
'N 11005C24 FF1510100011         call dword ptr [L11001010]
'N                               * ref: __vbaStrVarMove
'N 11005C2A 8BD0                 mov edx, eax
'N 11005C2C 8D4DD0               lea ecx, dword ptr [ebp-30h]
'N 11005C2F FFD3                 call ebx
'N 11005C31 8D4DB4               lea ecx, dword ptr [ebp-4Ch]
'N 11005C34 FF150C100011         call dword ptr [L1100100C]
'N                               * ref: __vbaFreeVar
'N 11005C3A 8B45DC               mov eax, dword ptr [ebp-24h]
'N 11005C3D 48                   dec eax
'N 11005C3E 0F840000014D         jz L11005D91
'N 11005C44 83E803               sub eax, 3
'N 11005C47 0F8500000150         jnz L11005D9D
'N 11005C4D 8B4DD0               mov ecx, dword ptr [ebp-30h]
'N 11005C50 51                   push ecx
'N 11005C51 FF1514100011         call dword ptr [L11001014]
'N                               * ref: __vbaLenBstr
'N 11005C57 8B7D18               mov edi, dword ptr [ebp+18h]
'N 11005C5A 8BF0                 mov esi, eax
'N 
'N L11005C5C:
'N 11005C5C B801000000           mov eax, 1
'N 11005C61 3BF0                 cmp esi, eax
'N 11005C63 0F8C000000D5         jl L11005D3E
'N 11005C69 8B17                 mov edx, dword ptr [edi]
'N 11005C6B 8945BC               mov dword ptr [ebp-44h], eax
'N 11005C6E 8D45D0               lea eax, dword ptr [ebp-30h]
'N 11005C71 8D4DB4               lea ecx, dword ptr [ebp-4Ch]
'N 11005C74 89953CFFFFFF         mov dword ptr [ebp-0C4h], edx
'N 11005C7A 89856CFFFFFF         mov dword ptr [ebp-94h], eax
'N 11005C80 51                   push ecx
'N 11005C81 8D9564FFFFFF         lea edx, dword ptr [ebp-9Ch]
'N 11005C87 56                   push esi
'N 11005C88 8D45A4               lea eax, dword ptr [ebp-5Ch]
'N 11005C8B 52                   push edx
'N 11005C8C 50                   push eax
'N 11005C8D C78534FFFFFF08000000 mov dword ptr [ebp-0CCh], 8
'N 11005C97 C745B402000000       mov dword ptr [ebp-4Ch], 2
'N 11005C9E C78564FFFFFF08400000 mov dword ptr [ebp-9Ch], 4008h
'N 11005CA8 FF1564100011         call dword ptr [L11001064]
'N                               * ref: Mid(
'N 11005CAE 8D4DA4               lea ecx, dword ptr [ebp-5Ch]
'N 11005CB1 8D55C8               lea edx, dword ptr [ebp-38h]
'N 11005CB4 51                   push ecx
'N 11005CB5 52                   push edx
'N 11005CB6 FF15AC100011         call dword ptr [L110010AC]
'N                               * ref: __vbaStrVarVal
'N 11005CBC 50                   push eax
'N 11005CBD FF1524100011         call dword ptr [L11001024]
'N                               * ref: Asc(
'N 11005CC3 6689459C             mov word ptr [ebp-64h], ax
'N 11005CC7 8D4594               lea eax, dword ptr [ebp-6Ch]
'N 11005CCA 8D4D84               lea ecx, dword ptr [ebp-7Ch]
'N 11005CCD 50                   push eax
'N 11005CCE 51                   push ecx
'N 11005CCF C7459402000000       mov dword ptr [ebp-6Ch], 2
'N 11005CD6 FF15C8100011         call dword ptr [L110010C8]
'N                               * ref: Hex(
'N 11005CDC 8D9534FFFFFF         lea edx, dword ptr [ebp-0CCh]
'N 11005CE2 8D4584               lea eax, dword ptr [ebp-7Ch]
'N 11005CE5 52                   push edx
'N 11005CE6 8D8D74FFFFFF         lea ecx, dword ptr [ebp-8Ch]
'N 11005CEC 50                   push eax
'N 11005CED 51                   push ecx
'N 11005CEE FF15F0100011         call dword ptr [L110010F0]
'N                               * ref: __vbaVarAdd
'N 11005CF4 50                   push eax
'N 11005CF5 FF1510100011         call dword ptr [L11001010]
'N                               * ref: __vbaStrVarMove
'N 11005CFB 8BD0                 mov edx, eax
'N 11005CFD 8BCF                 mov ecx, edi
'N 11005CFF FFD3                 call ebx
'N 11005D01 8D4DC8               lea ecx, dword ptr [ebp-38h]
'N 11005D04 FF1524110011         call dword ptr [L11001124]
'N                               * ref: __vbaFreeStr
'N 11005D0A 8D9574FFFFFF         lea edx, dword ptr [ebp-8Ch]
'N 11005D10 8D4584               lea eax, dword ptr [ebp-7Ch]
'N 11005D13 52                   push edx
'N 11005D14 8D4D94               lea ecx, dword ptr [ebp-6Ch]
'N 11005D17 50                   push eax
'N 11005D18 8D55A4               lea edx, dword ptr [ebp-5Ch]
'N 11005D1B 51                   push ecx
'N 11005D1C 8D45B4               lea eax, dword ptr [ebp-4Ch]
'N 11005D1F 52                   push edx
'N 11005D20 50                   push eax
'N 11005D21 6A05                 push 5
'N 11005D23 FF1518100011         call dword ptr [L11001018]
'N                               * ref: __vbaFreeVarList
'N 11005D29 83C8FF               or eax, -1
'N 11005D2C 83C418               add esp, 18h
'N 11005D2F 03C6                 add eax, esi
'N 11005D31 0F80000000E9         jo L11005E20
'N 11005D37 8BF0                 mov esi, eax
'N 11005D39 E9FFFFFF1E           jmp L11005C5C
'N 
'N L11005D3E:
'N 11005D3E 8B0F                 mov ecx, dword ptr [edi]
'N 11005D40 68D4330011           push L110033D4
'N                               * ref: "&h"
'N 11005D45 51                   push ecx
'N 11005D46 C745AC04000280       mov dword ptr [ebp-54h], 80020004h
'N 11005D4D C745A40A000000       mov dword ptr [ebp-5Ch], 0Ah
'N 11005D54 FF1530100011         call dword ptr [L11001030]
'N                               * ref: __vbaStrCat
'N 11005D5A 8945BC               mov dword ptr [ebp-44h], eax
'N 11005D5D 6A01                 push 1
'N 11005D5F 8D55A4               lea edx, dword ptr [ebp-5Ch]
'N 11005D62 6A01                 push 1
'N 11005D64 8D45B4               lea eax, dword ptr [ebp-4Ch]
'N 11005D67 52                   push edx
'N 11005D68 50                   push eax
'N 11005D69 C745B408000000       mov dword ptr [ebp-4Ch], 8
'N 11005D70 FF1514110011         call dword ptr [L11001114]
'N                               * ref: Format$(
'N 11005D76 8BD0                 mov edx, eax
'N 11005D78 8BCF                 mov ecx, edi
'N 11005D7A FFD3                 call ebx
'N 11005D7C 8D4DA4               lea ecx, dword ptr [ebp-5Ch]
'N 11005D7F 8D55B4               lea edx, dword ptr [ebp-4Ch]
'N 11005D82 51                   push ecx
'N 11005D83 52                   push edx
'N 11005D84 6A02                 push 2
'N 11005D86 FF1518100011         call dword ptr [L11001018]
'N                               * ref: __vbaFreeVarList
'N 11005D8C 83C40C               add esp, 0Ch
'N 11005D8F EB0C                 jmp L11005D9D
'N 
'N L11005D91:
'N 11005D91 8B55D0               mov edx, dword ptr [ebp-30h]
'N 11005D94 8B4D18               mov ecx, dword ptr [ebp+18h]
'N 11005D97 FF15CC100011         call dword ptr [L110010CC]
'N                               * ref: __vbaStrCopy
'N 
'N L11005D9D:
'N 11005D9D 8B45E8               mov eax, dword ptr [ebp-18h]
'N 11005DA0 C745D4FFFFFFFF       mov dword ptr [ebp-2Ch], 0FFFFFFFFh
'N 11005DA7 50                   push eax
'N 
'N L11005DA8:
'N 11005DA8 E8FFFFD19F           call L11002F4C
'N                               * API ref: RegCloseKey
'N 11005DAD FF1534100011         call dword ptr [L11001034]
'N                               * ref: __vbaSetSystemError
'N 11005DB3 68F75D0011           push L11005DF7
'N 11005DB8 EB33                 jmp L11005DED
'N 11005DBA 8D4DC4               lea ecx, dword ptr [ebp-3Ch]
'N 11005DBD 8D55C8               lea edx, dword ptr [ebp-38h]
'N 11005DC0 51                   push ecx
'N 11005DC1 52                   push edx
'N 11005DC2 6A02                 push 2
'N 11005DC4 FF15D0100011         call dword ptr [L110010D0]
'N                               * ref: __vbaFreeStrList
'N 11005DCA 8D8574FFFFFF         lea eax, dword ptr [ebp-8Ch]
'N 11005DD0 8D4D84               lea ecx, dword ptr [ebp-7Ch]
'N 11005DD3 50                   push eax
'N 11005DD4 8D5594               lea edx, dword ptr [ebp-6Ch]
'N 11005DD7 51                   push ecx
'N 11005DD8 8D45A4               lea eax, dword ptr [ebp-5Ch]
'N 11005DDB 52                   push edx
'N 11005DDC 8D4DB4               lea ecx, dword ptr [ebp-4Ch]
'N 11005DDF 50                   push eax
'N 11005DE0 51                   push ecx
'N 11005DE1 6A05                 push 5
'N 11005DE3 FF1518100011         call dword ptr [L11001018]
'N                               * ref: __vbaFreeVarList
'N 11005DE9 83C424               add esp, 24h
'N 11005DEC C3                   ret
'N 
'N L11005DED:
'N 11005DED 8D4DD0               lea ecx, dword ptr [ebp-30h]
'N 11005DF0 FF1524110011         call dword ptr [L11001124]
'N                               * ref: __vbaFreeStr
'N 11005DF6 C3                   ret
'N 
'N L11005DF7:
'N 11005DF7 8B4508               mov eax, dword ptr [ebp+8]
'N 11005DFA 50                   push eax
'N 11005DFB 8B10                 mov edx, dword ptr [eax]
'N 11005DFD FF5208               call dword ptr [edx+8]
'N 11005E00 8B451C               mov eax, dword ptr [ebp+1Ch]
'N 11005E03 668B4DD4             mov cx, word ptr [ebp-2Ch]
'N 11005E07 668908               mov word ptr [eax], cx
'N 11005E0A 8B45FC               mov eax, dword ptr [ebp-4]
'N 11005E0D 8B4DEC               mov ecx, dword ptr [ebp-14h]
'N 11005E10 5F                   pop edi
'N 11005E11 5E                   pop esi
'N 11005E12 64890D00000000       mov dword ptr fs:[L00000000], ecx
'N 11005E19 5B                   pop ebx
'N 11005E1A 8BE5                 mov esp, ebp
'N 11005E1C 5D                   pop ebp
'N 11005E1D C21800               ret 18h
'N 
'N L11005E20:
'N 11005E20 FF15B8100011         call dword ptr [L110010B8]
'N                               * ref: __vbaErrorOverflow
'End Sub
This full listing shows the memory address, the op-code bytes and the assembler text for each machine code instruction. It also shows the analysis comments (on the line following the related address) and labels for the destination of logic flow jumps (on the line before the destination instruction).

The next lower intermediate level of display omits the op-code bytes as shown here :-
'Sub GetKeyValue()
'N 110059D0 push ebp
'N 110059D1 mov ebp, esp
'N 110059D3 sub esp, 0Ch
'N 110059D6 push L11001276
'N          * ref: __vbaExceptHandler
'N 110059DB mov eax, dword ptr fs:[L00000000]
'N 110059E1 push eax
'N 110059E2 mov dword ptr fs:[L00000000], esp
...
And the final intermediate level of display also omits the memory addresses as shown here :-
'Sub GetKeyValue()
'N push ebp
'N mov ebp, esp
'N sub esp, 0Ch
'N push L11001276
'N  * ref: __vbaExceptHandler
'N mov eax, dword ptr fs:[L00000000]
'N push eax
'N mov dword ptr fs:[L00000000], esp
...
The analysis comments will provide some help to understanding the code in the routine and act as an 'aide memoire' to manually rewriting it. It can be seen that native code is far removed from VB source code and we consider it would be a formidable task to create an automated process to reverse engineer the x86 code back into VB code.





Buy Now

Download Demo

Product Overview

More Information

Recovery Example

FAQ





Copyright © 2001-2013 ThunderPeek Software - All Rights Reserved