Overview

VBReFormer is the most advanced publically available software in native Visual Basic 5 & 6 decompilation technology.


Design recovery

VBReFormer is a solution for recovering the design of each form and control, with all properties, values, all reference to external controls (ActiveX™ libraries), and all pictures. Then with VBReFormer you can obtain the necessary information to re-write the graphical design of your application...

Design recovery means recovery of information about the user interface structure of the executable you want to analyze.

Design edition

VBReFormer succeed where others resources editors fails: editing the static design properties of Visual Basic 6 applications easily and without limitation of size, working directly on your binary (very useful for translating your application into another language for example).

There is no limitation in size of design change because VBReFormer includes a "post-build compilation" technology which integrally re-build the binary code that holds the form design information.

Code recovery

VBReFormer is able to disassemble all native methods of your application (if the application was compiled with the native code option), and recover all subroutines, runtime and API calls.

VBReFormer try a native decompilation from assembly to Visual Basic code, without any warranty of success because it's still an experimental decompilation process.

Note: VBReFormer is not able to disassemble PCode application until now.


Why should you choose VBReFormer ?

  • • It's the only tool allowing to modify a VB property string without size limitation

    A classic resources editor for Visual Basic 5 & 6 application will limit the size of the string change because of the preservation of the pointers in the code.

    VBReFormer Professional, with it's own integrated form generator allows to bypass this problem in any way.


  • • It's the only tool allowing to change VB application's images by others without size limitation

    For the same reasons a classic resources editor for Visual Basic 5 & 6 application will limit the size of the string change because of the preservation of the pointers in the code, a classic VB editor will limit the size of the image.

    VBReFormer Professional, with it's own integrated form generator allows to bypass this problem in any way.


  • • It's the only having an integrated form generator for VB application which allows to change any property without restrictions of any kind

    VBReFormer Professional integrate a form generator for VB application which allows to edit and re-generate the forms of your compiled VB application without any restriction.

    That is the way to extend string size, image size, and to add the unused property of a VB control.


  • • It's the only having a complete form editor which allows to dynamically add unused properties

    The unchanged or unused properties in a Visual Basic application simply won't be integrated into the compiled application, then a classic Visual Basic resource editor will not allows to change these property because they are not integrated to the binary.

    VBReFormer Professional, with it's own integrated form generator allows to bypass this problem in any way.


  • • It's the most advanced tool in Visual Basic Native decompilation (contrary to P-Code application which concern only 5% of compiled VB Applications)

    VBReFormer can decompile about 90% of classical VB6 functions (see MSVBVM60 vs VBReFormer) successful and with all parameters, and 80% of objects interactions.

    A classical function is a function like "MsgBox()", "Chr()" which allows to manipulate String, Integer, Long, and others flats type.
    An object interaction is an interaction like "Object1.Caption = Object2.Text".

    Now, VBReFormer allows to decompile ParamArrays functions like "Choose(), Array(), Switch(), etc." with all parameters !

    VBReFormer is still not able to decompile code structure at the moment.

    The decompilation engine of VBReFormer Professional is regularly updated for new functions to decompile. You can see the change in the MSVBVM60 vs VBReFormer document.


Feature & Price

Designed for Microsoft Windows XP, 2000, Me, 98, NT
Feature of VBReFormerFreeProfessional
Operating System: Microsoft Windows Vista, XP, 2000, Me, 98, NT
Supported format for Visual Basic analyze: « exe », « scr », « ocx » and « dll »
Shows executable headers informations (EXE Header, PE Header, Optional Header, and Section Header)
Shows import table
Recovers project file « vbp »
Recovers GUI files (« frm »; « ctl »; « pag » ; « dsr »)
Identifies externals components : ActiveX™ technology
Recovers resources GUI files (« frx » ; « ctx » ; « pgx »)
Allows to edit properties of objects and save them to the executable (with no size limitation for string properties)
Allows to add an unused property for an object and save it directly to the executable
Allows to change the resources user interface pictures (« Picture » property for example)
Identifies procedures from Forms, Modules, Classes, Usercontrols, PropertyPages, and UserDocuments *
Disassembles procedures (machine language into assembly language) *
Partially Native Code decompiling *
Recovers the Runtime Calls *
Recovers the API declarations *
Recovers of some Visual Basic code (attempt to decompile; « MsgBox » for example) *
Syntax coloration of recovered code (assembly and Visual Basic code)
Search engine (assembly and Visual Basic code)
Documentation & User Guide
Free support for any problem with setup, and using VBReFormer
Free update of VBReFormer
Price
0€
49€

*Only executable compiled with « native » mode.

Buy now! Buy now !


Sample of code:

  • VERSION 5.00 
  • Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "C:\WINDOWS\system32\MSWINSCK.OCX" 
  •  
  • Begin VB.Form Form1 
  •     Caption = "Form1" 
  •     ScaleMode = 1 
  •     AutoRedraw = 0              'False 
  •     FontTransparent = -1              'True 
  •     LinkTopic = "Form1" 
  •     ClientLeft   = 60 
  •     ClientTop    = 450 
  •     ClientWidth  = 14760 
  •     ClientHeight = 10530 
  •     StartupPosition = 3 
  •     Begin VB.CommandButton cmdNavigate 
  •         Caption = "Command1" 
  •         Left   = 13500 
  •         Top    = 5940 
  •         Width  = 795 
  •         Height = 375 
  •         TabIndex = 3 
  •     End 
  •     Begin VB.TextBox txtHTML 
  •         Left   = 120 
  •         Top    = 540 
  •         Width  = 14415 
  •         Height = 5175 
  •         Text = "Text2" 
  •         TabIndex = 2 
  •     End 
  •     Begin MSWinsockLib.Winsock wsSocket 
  •     End 
  •     Begin VB.TextBox txtAddress 
  •         Left   = 2160 
  •         Top    = 120 
  •         Width  = 12375 
  •         Height = 315 
  •         Text = "Text1" 
  •         TabIndex = 0 
  •     End 
  •     Begin VB.Label Label1 
  •         Caption = "Address:" 
  •         Left   = 120 
  •         Top    = 180 
  •         Width  = 1935 
  •         Height = 255 
  •         TabIndex = 1 
  •     End 
  • End 
  • '   //////////////////////////////////////////////////////// 
  • '  //   VBReFormer 2006 � Sylvain Bruyere 
  • ' //  Assembly: Projet1.Form1 (Form) 
  • '//////////////////////////////////////////////////////// 
  •  
  • 'Event for cmdNavigate 
  • Private Sub cmdNavigate_Event0 
  • '00402011    55                      push ebp 
  • '00402012    8bec                    mov ebp, esp 
  • '00402014    83ec0c                  sub esp, 0c 
  •  
  • ' *** Reference to "__vbaExceptHandler" 
  • '00402017    68b6104000              push 004010b6 
  • '0040201c    64a100000000            mov eax, dword ptr fs:[00000000] 
  •     'Reference to '__except_list' 
  •  
  • '00402022    50                      push eax 
  • '00402023    64892500000000          mov dword ptr fs:[00000000], esp 
  •     'Reference to '__except_list' 
  •  
  • '0040202a    81eca0000000            sub esp, 000000a0 
  • '00402030    53                      push ebx 
  • '00402031    56                      push esi 
  • '00402032    57                      push edi 
  • '00402033    8965f4                  mov dword ptr [ebp-0c], esp 
  • '00402036    c745f8a0104000          mov dword ptr [ebp-08], 004010a0 
  • '0040203d    8b7508                  mov esi, dword ptr [ebp+08] 
  • '00402040    8bc6                    mov eax, esi 
  • '00402042    83e001                  and eax, 01 
  • '00402045    8945fc                  mov dword ptr [ebp-04], eax 
  • '00402048    83e6fe                  and esi, fffffffe 
  • '0040204b    56                      push esi 
  • '0040204c    897508                  mov dword ptr [ebp+08], esi 
  • '0040204f    8b0e                    mov ecx, dword ptr [esi] 
  • '00402051    ff5104                  call dword ptr [ecx+04] 
  • '00402054    8b16                    mov edx, dword ptr [esi] 
  • '00402056    33ff                    xor edi, edi 
  • '00402058    56                      push esi 
  • '00402059    897de8                  mov dword ptr [ebp-18], edi 
  • '0040205c    897de4                  mov dword ptr [ebp-1c], edi 
  • '0040205f    897de0                  mov dword ptr [ebp-20], edi 
  • '00402062    897ddc                  mov dword ptr [ebp-24], edi 
  • '00402065    897dd8                  mov dword ptr [ebp-28], edi 
  • '00402068    897dc8                  mov dword ptr [ebp-38], edi 
  • '0040206b    897db8                  mov dword ptr [ebp-48], edi 
  • '0040206e    897da8                  mov dword ptr [ebp-58], edi 
  • '00402071    ff92fc020000            call dword ptr [edx+000002fc] 
  • '00402077    50                      push eax 
  • '00402078    8d45e0                  lea eax, dword ptr [ebp-20] 
  • '0040207b    50                      push eax 
  •  
  • ' *** Reference to "__vbaObjSet" 
  • '0040207c    ff1524104000            call dword ptr [00401024] 
  • Set var_pv2 = Me.txtAddress() 
  •  
  • '00402082    8bd8                    mov ebx, eax 
  • '00402084    8d55e8                  lea edx, dword ptr [ebp-18] 
  • '00402087    52                      push edx 
  • '00402088    53                      push ebx 
  • '00402089    8b0b                    mov ecx, dword ptr [ebx] 
  • '0040208b    ff91a0000000            call dword ptr [ecx+000000a0] 
  • var_pv3 = var_pv2 
  •  
  • '00402091    3bc7                    cmp eax, edi 
  • '00402093    dbe2                    fnclex 
  • '00402095    7d12                    jge 4020a8 
  • '00402097    68a0000000              push 000000a0 
  • '0040209c    686c1a4000              push 00401a6c 
  • '004020a1    53                      push ebx 
  • '004020a2    50                      push eax 
  •  
  • ' *** Reference to "__vbaHresultCheckObj" 
  • '004020a3    ff151c104000            call dword ptr [0040101c] 
  • '004020a9    8b06                    mov eax, dword ptr [esi] 
  • '004020ab    56                      push esi 
  • '004020ac    ff90fc020000            call dword ptr [eax+000002fc] 
  • '004020b2    8d4ddc                  lea ecx, dword ptr [ebp-24] 
  • '004020b5    50                      push eax 
  • '004020b6    51                      push ecx 
  •  
  • ' *** Reference to "__vbaObjSet" 
  • '004020b7    ff1524104000            call dword ptr [00401024] 
  • Set var_pv4 = Me.txtAddress() 
  •  
  • '004020bd    8bd8                    mov ebx, eax 
  • '004020bf    8d45e4                  lea eax, dword ptr [ebp-1c] 
  • '004020c2    50                      push eax 
  • '004020c3    53                      push ebx 
  • '004020c4    8b13                    mov edx, dword ptr [ebx] 
  • '004020c6    ff92a0000000            call dword ptr [edx+000000a0] 
  • var_pv5 = var_pv4 
  •  
  • '004020cc    3bc7                    cmp eax, edi 
  • '004020ce    dbe2                    fnclex 
  • '004020d0    7d12                    jge 4020e3 
  • '004020d2    68a0000000              push 000000a0 
  • '004020d7    686c1a4000              push 00401a6c 
  • '004020dc    53                      push ebx 
  • '004020dd    50                      push eax 
  •  
  • ' *** Reference to "__vbaHresultCheckObj" 
  • '004020de    ff151c104000            call dword ptr [0040101c] 
  • '004020e4    8b4de4                  mov ecx, dword ptr [ebp-1c] 
  • '004020e7    6a08                    push 08 
  • '004020e9    51                      push ecx 
  • '004020ea    68801a4000              push 00401a80 
  • '004020ef    57                      push edi 
  •  
  • ' *** Reference to "__vbaInStr" 
  • '004020f0    ff1568104000            call dword ptr [00401068] 
  • '004020f6    83e808                  sub eax, 08 
  • var_num1 = InStr(8, var_pv5, "/", 0) - 8 
  •  
  • '004020f9    8d55b8                  lea edx, dword ptr [ebp-48] 
  • '004020fc    0f8026010000            jo 402227 
  • '00402102    8945c0                  mov dword ptr [ebp-40], eax 
  • '00402105    8b45e8                  mov eax, dword ptr [ebp-18] 
  • '00402108    8945d0                  mov dword ptr [ebp-30], eax 
  • '0040210b    52                      push edx 
  • '0040210c    8d45c8                  lea eax, dword ptr [ebp-38] 
  • '0040210f    6a08                    push 08 
  • '00402111    8d4da8                  lea ecx, dword ptr [ebp-58] 
  • '00402114    50                      push eax 
  • '00402115    51                      push ecx 
  • '00402116    c745b803000000          mov dword ptr [ebp-48], 00000003 
  • '0040211d    897de8                  mov dword ptr [ebp-18], edi 
  • '00402120    c745c808000000          mov dword ptr [ebp-38], 00000008 
  •  
  • ' *** Reference to "rtcMidCharVar" 
  • '00402127    ff1534104000            call dword ptr [00401034] 
  • '0040212d    8b5da8                  mov ebx, dword ptr [ebp-58] 
  • '00402130    83ec10                  sub esp, 10 
  • '00402133    8bd4                    mov edx, esp 
  • '00402135    83ec10                  sub esp, 10 
  • '00402138    b902000000              mov ecx, 00000002 
  • '0040213d    b850000000              mov eax, 00000050 
  • '00402142    891a                    mov dword ptr [edx], ebx 
  • '00402144    8b5dac                  mov ebx, dword ptr [ebp-54] 
  • '00402147    895a04                  mov dword ptr [edx+04], ebx 
  • '0040214a    8b5db0                  mov ebx, dword ptr [ebp-50] 
  • '0040214d    895a08                  mov dword ptr [edx+08], ebx 
  • '00402150    8b5db4                  mov ebx, dword ptr [ebp-4c] 
  • '00402153    895a0c                  mov dword ptr [edx+0c], ebx 
  • '00402156    8bd4                    mov edx, esp 
  • '00402158    6a02                    push 02 
  • '0040215a    6a40                    push 40 
  • '0040215c    890a                    mov dword ptr [edx], ecx 
  • '0040215e    8b8d7cffffff            mov ecx, dword ptr [ebp+ffffff7c] 
  • '00402164    56                      push esi 
  • '00402165    894a04                  mov dword ptr [edx+04], ecx 
  • '00402168    8b0e                    mov ecx, dword ptr [esi] 
  • '0040216a    894208                  mov dword ptr [edx+08], eax 
  • '0040216d    8b4584                  mov eax, dword ptr [ebp-7c] 
  • '00402170    89420c                  mov dword ptr [edx+0c], eax 
  • '00402173    ff9104030000            call dword ptr [ecx+00000304] 
  • '00402179    8d55d8                  lea edx, dword ptr [ebp-28] 
  • '0040217c    50                      push eax 
  • '0040217d    52                      push edx 
  •  
  • ' *** Reference to "__vbaObjSet" 
  • '0040217e    ff1524104000            call dword ptr [00401024] 
  • Set var_pv6 = Me.wsSocket() 
  •  
  • '00402184    50                      push eax 
  •  
  • ' *** Reference to "__vbaLateIdCall" 
  • '00402185    ff1508104000            call dword ptr [00401008] 
  • Call var_pv6.Connect(Mid(var_pv3, 8, var_num1), 80) 
  •  
  • '0040218b    83c42c                  add esp, 2c 
  • '0040218e    8d4de4                  lea ecx, dword ptr [ebp-1c] 
  •  
  • ' *** Reference to "__vbaFreeStr" 
  • '00402191    ff1594104000            call dword ptr [00401094] 
  • '00402197    8d45d8                  lea eax, dword ptr [ebp-28] 
  • '0040219a    8d4ddc                  lea ecx, dword ptr [ebp-24] 
  • '0040219d    50                      push eax 
  • '0040219e    8d55e0                  lea edx, dword ptr [ebp-20] 
  • '004021a1    51                      push ecx 
  • '004021a2    52                      push edx 
  • '004021a3    6a03                    push 03 
  •  
  • ' *** Reference to "__vbaFreeObjList" 
  • '004021a5    ff1514104000            call dword ptr [00401014] 
  • '004021ab    8d45a8                  lea eax, dword ptr [ebp-58] 
  • '004021ae    8d4db8                  lea ecx, dword ptr [ebp-48] 
  • '004021b1    50                      push eax 
  • '004021b2    8d55c8                  lea edx, dword ptr [ebp-38] 
  • '004021b5    51                      push ecx 
  • '004021b6    52                      push edx 
  • '004021b7    6a03                    push 03 
  •  
  • ' *** Reference to "__vbaFreeVarList" 
  • '004021b9    ff150c104000            call dword ptr [0040100c] 
  • '004021bf    83c420                  add esp, 20 
  • var_num6 = -192+44 + 32 
  •  
  • '004021c2    897dfc                  mov dword ptr [ebp-04], edi 
  • '004021c5    6808224000              push 00402208 
  • '004021ca    eb3c                    jmp 402207 
  • '004021cc    8d45e4                  lea eax, dword ptr [ebp-1c] 
  • '004021cf    8d4de8                  lea ecx, dword ptr [ebp-18] 
  • '004021d2    50                      push eax 
  • '004021d3    51                      push ecx 
  • '004021d4    6a02                    push 02 
  •  
  • ' *** Reference to "__vbaFreeStrList" 
  • '004021d6    ff1574104000            call dword ptr [00401074] 
  • '004021dc    8d55d8                  lea edx, dword ptr [ebp-28] 
  • '004021df    8d45dc                  lea eax, dword ptr [ebp-24] 
  • '004021e2    52                      push edx 
  • '004021e3    8d4de0                  lea ecx, dword ptr [ebp-20] 
  • '004021e6    50                      push eax 
  • '004021e7    51                      push ecx 
  • '004021e8    6a03                    push 03 
  •  
  • ' *** Reference to "__vbaFreeObjList" 
  • '004021ea    ff1514104000            call dword ptr [00401014] 
  • '004021f0    8d55a8                  lea edx, dword ptr [ebp-58] 
  • '004021f3    8d45b8                  lea eax, dword ptr [ebp-48] 
  • '004021f6    52                      push edx 
  • '004021f7    8d4dc8                  lea ecx, dword ptr [ebp-38] 
  • '004021fa    50                      push eax 
  • '004021fb    51                      push ecx 
  • '004021fc    6a03                    push 03 
  •  
  • ' *** Reference to "__vbaFreeVarList" 
  • '004021fe    ff150c104000            call dword ptr [0040100c] 
  • '00402204    83c42c                  add esp, 2c 
  • var_num6 = var_num6 + 44 
  •  
  • '00402207    c3                      ret 
  • '00402208    c3                      ret 
  • '00402209    8b4508                  mov eax, dword ptr [ebp+08] 
  • '0040220c    50                      push eax 
  • '0040220d    8b10                    mov edx, dword ptr [eax] 
  • '0040220f    ff5208                  call dword ptr [edx+08] 
  • '00402212    8b45fc                  mov eax, dword ptr [ebp-04] 
  • '00402215    8b4dec                  mov ecx, dword ptr [ebp-14] 
  • '00402218    5f                      pop edi 
  • '00402219    5e                      pop esi 
  • '0040221a    64890d00000000          mov dword ptr fs:[00000000], ecx 
  •     'Reference to '__except_list' 
  •  
  • '00402221    5b                      pop ebx 
  • '00402222    8be5                    mov esp, ebp 
  • '00402224    5d                      pop ebp 
  • '00402225    c20400                  ret 0004 
  • End Sub 
  •  
  •  
  •  
  •  
  •  

Screenshots (September 2007)