Decompiler-VB.Net
CN
登录
VBReFormer Gen2 引擎从零重写,完整支持 P-Code,在线工作室进入公开测试。 阅读公告 →
文档
VBReFormer Online

VBReFormer Online 手册

VBReFormer Online 用户手册:在浏览器中拖入 VB6 可执行文件,浏览重建后的代码,下载可在 IDE 中重新打开的工程。

更新于 2026/9/2011 章

浏览器中的工作室。您拖入一个 Visual Basic 5 或 6 可执行文件,浏览其重建后的代码,然后带走一个 VB6 IDE 可以重新打开的压缩包。无需安装,任何系统均可——包括 macOS、Linux,以及对桌面应用程序来说过旧的 Windows 版本。

关于翻译的说明。 在线工作室的界面提供简体中文版本。本手册中,标签页、视图和按钮的名称均按工作室中实际显示的中文引用。

1. 打开工作室

开始使用无需安装、无需配置,也无需创建账户:在一个较新的浏览器中打开工作室的地址,您就到了。

  • 任何系统——工作室只依赖浏览器。这是从 Mac、Linux 计算机或早于 10 的 Windows 上使用 VBReFormer 的唯一方式。
  • 十一种语言——在线工作室以十一种语言提供,接近桌面应用程序的四倍。选择器位于页眉。
  • 浅色或深色主题——工作室跟随您的系统设置,您也可以自行指定。

Français · English · Español · Deutsch · Italiano · Português · 日本語 · 简体中文 · Українська · हिन्दी · العربية

2. 拖入二进制文件

  1. 勾选声明。 工作室要求您声明自己是该程序的所有者,或拥有分析其代码的权利。这是使用条件,不是走形式。
  2. 拖入文件。 把它拖到拖放区,或浏览您的文件。接受的格式:.exe、.dll、.ocx。最大大小:64 MB——限制显示在屏幕上,而不是等上传失败后才发现。
  3. 让分析运行。 工作室逐一报出每个阶段的名称,并附有计数器:正在接收文件 → 正在分析二进制文件 → 正在反编译 → 正在清点符号 → 调用图 → 控制流。

所需时间取决于二进制文件的大小和性质。作为参考,一个 9.35 MB 的可执行文件从打开到写出工程约需十二秒。

分析完成后,工作室还会告诉您它发现的是哪种二进制文件:本机代码、P-code,或类型未定。

3. 您的文件会怎样

文件经分析后,随会话一起删除。不保存任何内容。

这写在拖放页面上,也是服务的实际行为:您的二进制文件在您的工作会话期间被处理,并随会话消失。它不会被归档、不会被索引、不会被再次使用。

这还意味着什么。 您的工作同样不会在会话之后留存。如果您关闭标签页或会话过期,就必须重新拖入二进制文件。离开前请先下载您的压缩包。服务重启也会断开进行中的会话——您的原始文件在您自己的计算机上,没有任何风险,但您会丢失进行中的浏览。

如果您的二进制文件的保密性属于合同事项,请注意 Desktop 版在本地处理一切属于读取文件的操作——格式、字节、反汇编、资源——只把属于重建的部分发送给服务。

4. 进入二进制文件的四条路径

左侧面板提供四个入口,它们回答四个不同的问题。

标签页 它回答的问题
工程 “这个程序是如何组织的?”——窗体、类、模块及其过程的树,如 VB6 当年所见。
符号 “这个是在哪里定义的?”——完整清单,带有每个符号的种类和容器。它区分从二进制文件中读取的名称与不得不合成的名称,这立刻告诉您什么是可以信赖的。
搜索 “这段文本出现在哪里?”——既在重建的代码中,也在设计器区段中。
资源 “除了代码还有什么?”——图标、光标、位图、字符串表、版本信息,带有各自的种类、大小和内容。无需许可证即可提供:资源是读取的,不是重建的。

在树中,每个成员都带有二进制文件所声明的可见性——Public、Private、Friend。可见性无法读取的成员不带任何标记:我们不写下我们不知道的东西。

重命名

在线工作室允许您重命名符号,而且重命名是全局的:其他模块中的调用位置随之更新。这是处理二进制文件时的核心动作——反编译器交还给您逻辑,您交还给它名称。

5. 视图

七个视图,而工作室本身在每个视图下方都说明它显示什么,以及是否需要许可证。

视图 显示内容 许可证
源代码 重建的 VB6 代码 无许可证时为预览
IR 反编译器在重建控制流之前所看到的内容 无许可证时为预览
汇编 x86 机器码,符号已解析 完整提供
P-code VB6 虚拟机操作码 完整提供
设计器 窗体的设计器区段 完整提供
工程 重建的 .vbp 完整提供
结构 读取到的格式结构 完整提供

分界线。 从您的文件中读取的内容是免费的;重建的内容是出售的。反汇编、结构、设计器区段和 .vbp 取自您自己的可执行文件中存在的表。VB6 源代码并不存在于任何地方——它必须被重建,而这项工作就是产品。

在代码下方,工作室还会显示当前过程的反编译器的提示:即诊断信息,也就是它未能做到的事及其原因。每当结果令您意外时,首先就该看这里。

6. 编译保留了什么,丢弃了什么

本章解释为什么您的窗体出来时非常易读,而您的 .bas 模块出来时带着技术名称。规则很简单:

Visual Basic 在运行时需要的东西,它写进了文件:VBReFormer 会把它找回来。编译后不再需要的东西,它丢弃了——没有人能把它找回来。

保留下来的: 窗体、类和模块的名称 · 控件的名称 · 事件处理程序 · 类的公共成员 · 界面属性 · 对 VB 运行时的调用(635 个函数) · Win32 API(15,680 个签名) · 代码的结构 · 字符串。

不在文件中的: 注释 · 局部变量的名称 · 参数的名称 · 被其值替换的命名常量 · .bas 模块中过程的名称 · 原始缩进。

一个可验证的示例

下面的摘录来自 SETUP1.EXE,即随 Visual Basic 6 一起发布的安装向导——Microsoft 分发了它的源代码。因此任何拥有 VB6 的人都可以重做这一比较。

原始源代码,COMMON.BAS:

Sub AddDirSep(strPathName As String)
    If Right(Trim(strPathName), Len(gstrSEP_URLDIR)) <> gstrSEP_URLDIR And _
       Right(Trim(strPathName), Len(gstrSEP_DIR)) <> gstrSEP_DIR Then
        strPathName = RTrim$(strPathName) & gstrSEP_DIR
    End If
End Sub

VBReFormer 的输出:

Public Sub proc_42C506(ByRef arg_8 As String)
    If ((Right(Trim(arg_8), Len("/")) <> "/") And (Right(Trim(arg_8), Len("\")) <> "\")) <> 0 Then
        arg_8 = (RTrim$(arg_8) & "\")
    End If
End Sub

逻辑逐行相同。 Right、Trim、Len 和 RTrim$ 都有名称;ByRef 传递被正确推断。丢失的是过程及其参数的名称,而命名常量以其值的形式出现——替换它们的是编译器,不是 VBReFormer。

读懂标记

VBReFormer 从不猜测:无法确定的值会被标记,而不是被编造。

标记 含义 处理方法
proc_42C506 以地址指代的过程 重命名——名称会传播
var_18、arg_8 局部变量或参数 先读懂其用法,再重命名
? 未能确定的值 在汇编视图中查看同一位置

含有 ? 的文件会被 VB6 IDE 拒绝。标记是留给您决定的,不是用来原样重新编译的。一个看似合理却错误的值,是反编译器所能产生的最糟糕的东西。

7. 图形

两种图形,它们讲的不是同一个故事。

  • 调用——谁调用了什么:程序的架构。可按调用方、被调用方或两者筛选,并可选择隐藏孤立节点。
  • 流程——执行去往何处:基本块、入口、循环头、循环回边,以及标记为不可达的基本块。

读一个基本块的五种方式

在图中选择一个基本块,然后选择您想在其中看到的内容:形状、IR、VB6、汇编或 P-code。同一段程序,五个阅读层次。

渲染上的诚实。 工作室说明有多少基本块锚定在清单行上,又有多少没有确证的地址——它们的指令归入前一区段。这样您就知道切分中哪一部分是确定的。

图形需要许可证:谁调用了什么、执行去往何处,这就是程序的架构。反汇编和结构在没有许可证时依然开放。

8. 预览与许可证

没有许可证时,源代码视图并不会拒绝您:它以部分遮盖的方式显示。您可以看到结构、找回的名称以及重建的真实质量——就在您自己的二进制文件上——而无需先付任何费用。

这是有意为之:什么都看不到的访客无从判断。而如果订阅失效,您看到的是您能取回什么,而不是一扇关上的门。

同一时间一台工作站

一份 VBReFormer 许可证同一时间只开放一台工作站——而浏览器算作一台工作站。如果您的许可证正在别处工作,工作室会提议从您的账户将其转移到这里,或添加一个工作站。这是一种温和的拒绝:您已经付费,什么都不缺。

9. 下载您的源代码

交付面板生成一个 .zip 压缩包,其中包含 .vbp 及其文件——.bas、.cls、.frm——以 ANSI 编码写入,正如 IDE 所期待的那样。面板会在您下载之前说明文件数量和大小。

打开工程之前先阅读说明

工作室显示未能重建的内容,每一条都附有原因。有些信息——外部引用、编译选项、启动模式——不在二进制文件的任何结构中:它们不是被抹去了,而是从来就不在那里。因此它们会被报告,而不是被编造。

在 IDE 中,如果缺少某个引用,请通过 Project ▸ References(工程 ▸ 引用)添加。任何 ? 标记都需要您手动处理。

随后面板会提议分析另一个二进制文件:会话重新开始,之前的文件被删除。

10. Online 还是 Desktop?

两个版本共用同一个引擎,生成同样的代码。它们服务的目的不同。

Online Desktop
安装 无 MSI,Windows 10+
系统 全部 Windows 10 和 11
界面语言 11 3
树、符号、搜索、重命名 ✔ ✔
七个视图 ✔ ✔
调用图和流程图 ✔ ✔
工程导出 ✔(zip) ✔(文件夹)
资源:清单和内容 ✔ ✔
资源:提取到文件 ✘ ✔
带注释的十六进制视图 ✘ ✔
绘制的设计器、图像导出 ✘ (仅文本区段) ✔
二进制补丁 ✘ ✔
交叉引用 ✘ ✔
对象浏览器、Win32 API 浏览器 ✘ ✔
书签、渲染选项 ✘ ✔
工作在会话之后留存 ✘ ✔
计费 点数 订阅

简而言之——Online 用于打开二进制文件、了解它做什么并带走源代码。Desktop 用于长时间处理一个二进制文件:字节、资源、交叉引用、补丁,以及关闭标签页后不会消失的工作。

11. 常见问题

我的二进制文件会被保存吗? 不会。它经分析后随会话一起删除。参见第 3 章。

我的文件大于 64 MB。 这是工作室的限制,在您拖入文件之前就已说明。对于更大的二进制文件,Desktop 版没有这样的上传限制。

二进制文件的资源在哪里? 在左侧的资源标签页中——无需许可证。您可以看到每个条目及其种类和大小,打开时还能看到其内容:图像会被绘制,文本会被显示,其他一切则以字节形式显示,而不是被隐藏。提取到文件是 Desktop 版特有的,十六进制视图也是。

为什么代码在过程中间停止了? 这是预览:没有许可证时,免费版显示结构、名称和完整的反汇编,但重建的过程体需要许可证。

我关闭了标签页,一切都丢失了。 工作不会在会话之后留存。离开前请下载压缩包;二进制文件本身仍在您的计算机上。

导出的代码能原样重新编译吗? 通常可以:在一个包含 149 个工程的测试集上,121 个无需任何修改即可重新编译。其余的需要添加缺失的引用,或处理几个标记。

我的可执行文件被加壳了。 必须先脱壳,否则文件中看不到 VB6 结构。

这合法吗? 这取决于您所在的司法管辖区以及您对该二进制文件所拥有的权利——拖入时的声明正是关于这一点。预期用途是找回您自己的代码,或您拥有权利或获授权分析的代码。