Decompiler-VB.Net
BR
Entrar
VBReFormer Gen2 Motor reescrito do zero, P-code completo e o estúdio on-line em beta público. Ler o anúncio →
Notas de versão

Histórico de versões

Da primeira versão 7 à mais recente. As entradas descrevem o que você vê na tela: o código reconstruído, os nomes recuperados, o que a exportação permite reabrir no Visual Basic 6.

7.0.6

2026-09-19Distribuída atualmente

What 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.

Antes
If ComponentType() > 6 Then
ElseIf ComponentType() = 0 Then
Else
End If

GetFilename = (? & ?)
7.0.6
If ComponentType() = 0 Then
    s = (FormName & ".frm")
ElseIf ComponentType() = 1 Then
    s = (FormName & ".ctl")
' … all seven branches

Method 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.

Antes
If Method = 0 Then
    OHash.Insert key(i), rec(i)
ElseIf Method = 1 Then
    ' (nothing)
Else
    ' (nothing)
End If
7.0.6
If 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 If

Wrong 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.

Antes
If aExport Then
ElseIf nom Like "*.ocx" Then
Else
End If

s = "Type=Exe" & "Startup=" & …
7.0.6
If aExport = 0 Then
    s = ("Type=Exe" & vbCrLf)
ElseIf nom Like "*.ocx" Then
    s = ("Type=OleDll" & vbCrLf)
Else
    s = ("Type=Control" & vbCrLf)
End If

Releasing 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.

Antes
Set node = (Me And 1)
Set hash = eax
Set p0   = arg_8
7.0.6
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.

Antes
chrono.Elapsed
table.Find size, …
r = table.Delete(key)
7.0.6
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.

Antes
tvItems.dispid_9
node.vtbl_64()
node.vtbl_B4()
list.vtbl_28(…)
var.vtbl_38 -1
7.0.6
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 WithEvents variables: 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-14

Projects 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.

Em resumo

  • Corrigido 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.
  • Corrigido A large project exported zero files: a single character with no equivalent in the encoding was enough to fail the whole export.
  • Melhorado GoSub is recognised as a language construct, which finally lets old projects that use it reload in the IDE.
  • Melhorado Event signatures carry the real types of their parameters, read from the control's library, instead of Long by default.
  • Melhorado Variadic procedures (ParamArray) are recognised.
  • Corrigido Five functions were shown as procedures without a return value, while their callers used their result.
  • Melhorado 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.
Antes
frmMessage.Show        ' non-modal
7.0.5
frmMessage.Show vbModal

7.0.4

2026-09-13

User-defined types, API buffers, faster opening

Tracking of user-defined types and API buffers, and much faster file opening.

Em resumo

  • Melhorado 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.
  • Corrigido The fields of a user-defined type passed by reference are followed, instead of keeping only its beginning.
  • Corrigido 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.
  • Corrigido An If could open inside a loop and close after it, a structure the IDE rejects.
  • Corrigido Currency values and eight-byte arguments are read with the right width.
  • Corrigido A single read failure dropped the whole inventory of the project's libraries.
  • Melhorado When an export is refused, the application offers to buy the licence instead of showing an error code.

7.0.3

2026-09-09

Signed installers, and what the application claims

A corrective release, centred on what the application claims and on the format map. Installers are now signed.

Em resumo

  • Segurança 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.
  • Corrigido The format map is accessible; it already provided what another view kept waiting for.
  • Corrigido 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-08

Terms of use and handling of the submitted file

What happens to the files you submit, and what the terms of use say about it.

Em resumo

  • Segurança 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.
  • Corrigido The terms of use were corrected: one clause about the file was inaccurate, and the essential point was missing.
  • Corrigido The graph refused to display with an error code instead of explaining what was missing.

7.0.1

2026-09-06

First 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.

Em resumo

  • Corrigido The installed package was unusable: the application did not start. A real start-up test is now part of building every version.
  • Corrigido 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.
  • Corrigido 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 generation

Generation 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.

Em resumo

  • Novo The engine can run locally or remotely, chosen at launch.
  • Corrigido Library references are written in the exported project for every named type; without them, the IDE rejects the file.
  • Corrigido API declarations (Declare) are written through the native path, which was missing.
  • Corrigido 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.
  • Corrigido Form resource files are written the way the IDE expects.
Read next

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.