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. 拖入二进制文件
- 勾选声明。 工作室要求您声明自己是该程序的所有者,或拥有分析其代码的权利。这是使用条件,不是走形式。
- 拖入文件。 把它拖到拖放区,或浏览您的文件。接受的格式:
.exe、.dll、.ocx。最大大小:64 MB——限制显示在屏幕上,而不是等上传失败后才发现。 - 让分析运行。 工作室逐一报出每个阶段的名称,并附有计数器:正在接收文件 → 正在分析二进制文件 → 正在反编译 → 正在清点符号 → 调用图 → 控制流。
所需时间取决于二进制文件的大小和性质。作为参考,一个 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 结构。
这合法吗? 这取决于您所在的司法管辖区以及您对该二进制文件所拥有的权利——拖入时的声明正是关于这一点。预期用途是找回您自己的代码,或您拥有权利或获授权分析的代码。