打开软件, 软件会自动退出, 并且还会生成文件夹, 这是个没壳的 VB 程序, OD 载入
F9 运行, 直接退出

我们重载, 右键 查找
> 所有模块间的调用

我们找到 _vbaEnd
, 这就是 VB 的退出函数了, 我们把这些全部下断点

F9 运行, 程序断下来了, 上面有个跳转跳过这个调用函数, 绝壁是关键跳了, 我们先 F8 单步跟下看看程序流程

果然退出了, 我们重载, 给关键跳下断
F9 运行, 跳转未实现, 我们让它实现测试一下

好吧, 忘了给下面的这个关键跳下断了orz
我们继续, 让两个跳转都实现, 测试下流程

发现又是可以跳过退出函数的跳转, 都给下断

运行, 都让它们实现, 我们又双叒叕找到了一个跳转, 下断运行

流比啊, 执行关机, 但是软件已经打开了, 并且目录下多了个批处理, 这名字是威胁我们注册吗 ?
我们点编辑这个 bat, 发现是一个关机指令
我们输入 shutdown -a
来取消这个关机动作, 现在程序还在运行

现在我们把刚才的跳转全部改成无条件跳转 jmp
, 右键保存
程序生成了 bat 文件, 写入关机指令, 然后执行 bat 文件; 现在我们把那个关机干了, 很简单, 直接把 bat 文件名复制, 然后查找

直接 OD 载入我们刚才保存的文件, 搜字符串 register.bat
, 跟进去找一找有没有跳转, 没有跳转就在函数开始下断
F9 运行, 在程序想执行 bat 文件的时候让它停顿, 我们 F8 单步


我们在堆栈窗口找到关机指令, 然后 数据窗口跟随
, 我们把数据窗口调成 16 进制模式, 然后把这一块数据选中 (不要多选), 然后空格, 勾选 保持大小
(怕输入数据多了, 把其他数据覆盖了), 我们把这些全改成 00, 然后确定
在数据窗口, 我们把程序保存出来

现在它生成的这个 bat 文件已经全部是 0 了, 但是还不够, 我们要把这个生成文件也干掉
我们 F9 运行, 让它停在刚才的函数头部, 我们 F8 走出这个函数, 或者 Ctrl+F9 直接到函数结束

走出去后, 不难发现上面的关键跳, 我们下断
跳转未实现, 先让它实现测试, 没生成文件, 我们改成 jmp
右键保存
搞定