Riwayat versi
Dari versi 7 pertama hingga yang terbaru. Setiap entri menjelaskan apa yang Anda lihat di layar: kode yang direkonstruksi, nama yang dipulihkan, apa yang dapat Anda buka kembali di Visual Basic 6 dari hasil ekspor.
7.0.7
2026-10-02Disajikan saat iniMissing libraries: see them, and supply them
When a program uses components the engine does not know, VBReFormer says so as soon as the file opens and lets you supply the files. The reconstructed code also improves on parameters, arrays, files and late binding.
Singkatnya
- Baru A banner under the menu announces, as soon as the file opens, how many libraries and interfaces are missing, with their list (GUID and name). Before, those calls came out as vtable offsets, with no explanation.
- Baru The “Supply files…” button accepts one or more .ocx, .dll, .tlb, .olb or .exe files, with the local engine as with the remote one; the binary is reopened at once with the new names. Only the type description is read: the component is never run.
- Ditingkatkan The controls shipped with Visual Basic 6 are recognised out of the box: MSFlexGrid, MSDBGrid, Hierarchical FlexGrid, DataGrid, MSChart, SSTab, RichTextBox, MaskEdBox, MSComm, Common Controls 2, ADO Data Control, Forms 2.0, as well as the old Sheridan 3D, Outline, Crystal Reports 4.6 and Windows 2000 Imaging controls.
- Diperbaiki Calls that could be resolved came out as vtable offsets: on a customer's program, more than 140,000 calls get their name back.
- Diperbaiki The VB and VBA libraries themselves were reported missing on a server without Visual Basic 6 installed.
- Baru The Put # statement is reconstructed; it was missing entirely. Print on an object is no longer confused with Print # to a file.
- Ditingkatkan Parameters: a ByRef parameter is no longer inferred from the mere fact that the procedure writes it; its type comes from the function that reads it or the library that declares it. ByRef … As Currency, object parameters and As String parameters better recognised.
- Ditingkatkan Late binding: correct argument count, indexed properties kept on write, member names read from the type library, accented names correctly decoded.
- Diperbaiki MsgBox no longer loses its arguments, InStr on a Variant is reconstructed, CreateObject no longer carries an invented argument, “= False” is no longer lost where “= True” came out right.
- Ditingkatkan Fewer “?” markers (unproven values) in the output, without ever replacing a “?” with a plausible but wrong value.
- Baru The binary's resources (icons, images, strings) are listed and served; a link to the documentation in the Help menu; the object browser translated into French and Spanish.
- Keamanan Binaries and installers signed and timestamped; application obfuscated. The package contains no part of the decompiler: decompilation is still served by our servers.
Missing libraries: see them, and supply them
A VB6 program often relies on third-party components. When the engine does not know them, their calls came out as vtable offsets, with no explanation. This version names them, counts them, and lets you supply the files.
A banner as soon as the file opens
Under the menu, the number of missing libraries and interfaces, with their list (GUID and name). The detailed list is also in the object browser.
“Supply files…”
The button accepts one or more .ocx, .dll, .tlb, .olb or .exe files, with the local engine as with the remote one; the binary is reopened at once with the new names. Only the type description is read: the component is never run.
The Visual Basic 6 controls, recognised out of the box
- MSFlexGrid, MSDBGrid, Hierarchical FlexGrid, DataGrid, MSChart, SSTab, RichTextBox, MaskEdBox, MSComm, Common Controls 2, ADO Data Control, Forms 2.0.
- The old Sheridan 3D, Outline, Crystal Reports 4.6 and Windows 2000 Imaging (scanning) controls.
- The VB and VBA libraries themselves are no longer reported missing on a server without Visual Basic 6 installed.
- Calls that could be resolved came out as vtable offsets: on a customer's program, more than 140,000 calls get their name back.
More accurate reconstructed code
These improvements are made server-side: they also benefit previous versions connected to the remote engine.
Parameters
A ByRef parameter is no longer inferred from the mere fact that the procedure writes it, since VB6 allows writing a ByVal parameter; its type comes from the function that reads it or the library that declares it. ByRef … As Currency, object parameters and As String parameters better recognised.
Arrays
Indexed accesses keep their array in more cases: constant offset, index passed through a temporary variable, fixed-size arrays in a local user-defined type.
Files
The Put # statement is reconstructed; it was missing entirely. Print on an object is no longer confused with Print # to a file.
Late binding
Correct argument count, indexed properties kept on write, member names read from the type library, accented names correctly decoded (they came out as ideograms).
Functions, return values, control flow
- MsgBox no longer loses its arguments; InStr on a Variant is reconstructed; CreateObject no longer carries an invented argument; “= False” is no longer lost where “= True” came out right.
- Complete structure returns; spurious returns and duplicated lines removed; Variants better tracked from one call to the next.
- Labels targeted by a jump always exist; correct stack level at branches; procedures without an ebp frame read better.
- Fewer “?” markers (unproven values) in the output, without ever replacing a “?” with a plausible but wrong value.
Interface and documentation
- A link to the documentation in the Help menu.
- The object browser is translated into French and Spanish.
- The notes added to an exported project are written in the interface language.
- The binary's resources (icons, images, strings) are listed and served.
- Optional sharing of library descriptions with the server: the question is only asked if the server keeps a shared catalogue; a refusal is never asked again, and the choice can be withdrawn in the preferences. The shared catalogue is not active yet: nothing is sent in this version.
Security and delivery
- The package contains no part of the decompiler: decompilation is still served by our servers.
- Binaries and installers signed and timestamped; application obfuscated.
Updating
Install the new package over the previous one: it is an upgrade, not a second installation. Your settings are kept. Three languages are available: French, English, Spanish.
7.0.6
2026-09-19What the reconstructed code now shows you
Two families of fixes: code that was missing on screen, and, more troubling, displayed values that were not the right ones.
Missing code is back
In some procedures, whole pieces did not show. Nothing flagged it: the code simply looked shorter than the original.
The branches of a Select Case came out empty
When the compiler turned a Select Case into a jump table, all seven branches appeared empty and the final value was lost. They now show their content, string literals included.
If ComponentType() > 6 Then ElseIf ComponentType() = 0 Then Else End If GetFilename = (? & ?)
If ComponentType() = 0 Then
s = (FormName & ".frm")
ElseIf ComponentType() = 1 Then
s = (FormName & ".ctl")
' … all seven branchesMethod calls disappeared without a trace
When an object was stored in a module-level variable, the call that followed was sometimes silently dropped: eleven statements recovered on our reference binaries, including window display calls.
If Method = 0 Then
OHash.Insert key(i), rec(i)
ElseIf Method = 1 Then
' (nothing)
Else
' (nothing)
End IfIf Method = 0 Then
OHash.Insert key(i), rec(i)
ElseIf Method = 1 Then
AHash.Insert key(i), rec(i)
Else
Collect.Insert key(i), rec(i)
End IfWrong values corrected
These are the most important fixes in this version. The displayed code read well and recompiled, but it did not do the same thing as the original.
The value of a single branch was shown for all of them
When several branches of a test assigned different values to the same variable, the product sometimes showed the value of a single branch, as if valid for every path. Nothing flagged it.
If aExport Then ElseIf nom Like "*.ocx" Then Else End If s = "Type=Exe" & "Startup=" & …
If aExport = 0 Then
s = ("Type=Exe" & vbCrLf)
ElseIf nom Like "*.ocx" Then
s = ("Type=OleDll" & vbCrLf)
Else
s = ("Type=Control" & vbCrLf)
End IfReleasing an object variable showed an invented value
A plain Set X = Nothing could come out as an expression that made sense in no program. Twenty-three termination procedures checked: none left.
Set node = (Me And 1) Set hash = eax Set p0 = arg_8
Set node = Nothing Set hash = Nothing Set p0 = Nothing
Some calls named the wrong method
Within a class, a call could carry the name of another method, a defect invisible when reading since the displayed name does exist. The called member is now identified by its real position rather than its declaration order.
chrono.Elapsed table.Find size, … r = table.Delete(key)
chrono.Reset table.Init size, … r = table.Find(key)
A method with no return value was shown as if it had one
Collection.Add and Err.Raise return nothing. Their internal result was taken for a value and assigned to a variable: twelve false assignments fewer.
Names instead of numbers
When the product cannot identify a member, it shows its position in the method table. This version recovers many more.
tvItems.dispid_9 node.vtbl_64() node.vtbl_B4() list.vtbl_28(…) var.vtbl_38 -1
tvItems.Nodes node.Key node.Text list.Add(…) var.Expanded = -1
- Third-party controls: TreeView, ListView and the like. Their properties and methods carry their names, including for the objects they return.
- Standard Windows interfaces: named instead of shown as an identifier.
- Private
WithEventsvariables: their type is recovered, which makes their event handlers readable. - On a
UserControl: the controls placed on it are written as in the source, without a spurious prefix.
Fewer undetermined values
The ? marker flags a value the product could not establish with certainty. We would rather show it than invent one, but the fewer there are, the better. On our reference binaries, their number dropped by about a third since the previous version. Causes addressed: field addresses lost in the middle of a loop, computed array elements, register-passed arguments, values shared between several branches of a test.
Exported projects
- Module variables are declared. Without their declaration line, Visual Basic 6 read an array access as a call to a non-existent function and rejected the whole file.
- Fixed-size local arrays too, with their real bounds read from the binary.
- Variadic procedures are recognised as such.
- Relayed parameters keep their array nature across several call levels.
- An interface with a masked name is no longer written as is: VB6 rejects any identifier starting with an underscore.
Updating
Install the new package over the previous one: it is an upgrade, not a second installation. Your settings are kept. Three languages are available: French, English, Spanish.
7.0.5
2026-09-14Projects that would not reopen in the IDE
A version focused on exported projects that Visual Basic 6 refused to reopen, and a behaviour fix that could not be seen when reading.
Singkatnya
- Diperbaiki Five Show vbModal were rendered non-modal. The file read well and recompiled; it simply did not open windows the way the original did. The most serious defect fixed in this series.
- Diperbaiki A large project exported zero files: a single character with no equivalent in the encoding was enough to fail the whole export.
- Ditingkatkan GoSub is recognised as a language construct, which finally lets old projects that use it reload in the IDE.
- Ditingkatkan Event signatures carry the real types of their parameters, read from the control's library, instead of Long by default.
- Ditingkatkan Variadic procedures (ParamArray) are recognised.
- Diperbaiki Five functions were shown as procedures without a return value, while their callers used their result.
- Ditingkatkan The application identifies the workstation using the licence by a one-way fingerprint, never the serial number, computer name or IP address; if the licence is already active on another workstation, it offers to transfer it.
frmMessage.Show ' non-modalfrmMessage.Show vbModal
7.0.4
2026-09-13User-defined types, API buffers, faster opening
Tracking of user-defined types and API buffers, and much faster file opening.
Singkatnya
- Ditingkatkan Opening a binary is markedly faster: the format reader pecked at the file in small pieces, nearly 78,000 reads of 213 bytes for a single file.
- Diperbaiki The fields of a user-defined type passed by reference are followed, instead of keeping only its beginning.
- Diperbaiki The buffer of an API call was re-read as a new allocation, producing repetitions and, in one case, an endless loop in the displayed code.
- Diperbaiki An If could open inside a loop and close after it, a structure the IDE rejects.
- Diperbaiki Currency values and eight-byte arguments are read with the right width.
- Diperbaiki A single read failure dropped the whole inventory of the project's libraries.
- Ditingkatkan When an export is refused, the application offers to buy the licence instead of showing an error code.
7.0.3
2026-09-09Signed installers, and what the application claims
A corrective release, centred on what the application claims and on the format map. Installers are now signed.
Singkatnya
- Keamanan Installers are signed in Yneos's name and timestamped. Windows shows the verified publisher instead of “Unknown publisher”, and any later modification of the file invalidates the signature.
- Diperbaiki The format map is accessible; it already provided what another view kept waiting for.
- Diperbaiki The About window listed six components that are not in the installed package. It now mentions only what is actually shipped.
7.0.2
2026-09-08Terms of use and handling of the submitted file
What happens to the files you submit, and what the terms of use say about it.
Singkatnya
- Keamanan The binary you submit is erased with a guarantee, even if processing is interrupted. The terms of use promised it; the process could stop before.
- Diperbaiki The terms of use were corrected: one clause about the file was inaccurate, and the essential point was missing.
- Diperbaiki The graph refused to display with an error code instead of explaining what was missing.
7.0.1
2026-09-06First fix after going live
The installed package of 7.0.0 did not work. This version replaces it, and corrects what the free tier announced.
Singkatnya
- Diperbaiki The installed package was unusable: the application did not start. A real start-up test is now part of building every version.
- Diperbaiki The free preview announced 20% of the code and delivered between 25 and 83% depending on the file. The announced proportion is now the one applied.
- Diperbaiki The window title said “Pro” while the free tier was served. It now shows the real tier, and refuses to name one it cannot establish.
7.0.0
2026-09-05new generationGeneration 7: a rebuilt desktop application, a new engine
VBReFormer changes generation. The decompilation engine is entirely new, written from scratch rather than derived from the version 6 engine, and the desktop application was rebuilt around it.
Singkatnya
- Baru The engine can run locally or remotely, chosen at launch.
- Diperbaiki Library references are written in the exported project for every named type; without them, the IDE rejects the file.
- Diperbaiki API declarations (Declare) are written through the native path, which was missing.
- Diperbaiki A procedure's signature and its body could contradict each other in the same file, and Visual Basic 6 rejected whichever of the two was right.
- Diperbaiki Form resource files are written the way the IDE expects.
What changes between the previous version and 7
An article compares the two generations on the same binaries: what each one reconstructs, and what it does not.