第一期 23 所有模块间的调用

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

F9 运行, 直接退出

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

VB 退出函数

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

全部下断

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

关键跳 1 号

果然退出了, 我们重载, 给关键跳下断

F9 运行, 跳转未实现, 我们让它实现测试一下

下面的就是关键跳 2 号

好吧, 忘了给下面的这个关键跳下断了orz

我们继续, 让两个跳转都实现, 测试下流程

关键跳 3 号和 4 号

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

关键跳 5 号

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

流比啊, 执行关机, 但是软件已经打开了, 并且目录下多了个批处理, 这名字是威胁我们注册吗 ?

我们点编辑这个 bat, 发现是一个关机指令

我们输入 shutdown -a 来取消这个关机动作, 现在程序还在运行

全部改掉

现在我们把刚才的跳转全部改成无条件跳转 jmp, 右键保存

程序生成了 bat 文件, 写入关机指令, 然后执行 bat 文件; 现在我们把那个关机干了, 很简单, 直接把 bat 文件名复制, 然后查找

让它断在函数开头

直接 OD 载入我们刚才保存的文件, 搜字符串 register.bat, 跟进去找一找有没有跳转, 没有跳转就在函数开始下断

F9 运行, 在程序想执行 bat 文件的时候让它停顿, 我们 F8 单步

程序在写入关机指令
全改成 0

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

在数据窗口, 我们把程序保存出来

现在它生成的这个 bat 文件已经全部是 0 了, 但是还不够, 我们要把这个生成文件也干掉

我们 F9 运行, 让它停在刚才的函数头部, 我们 F8 走出这个函数, 或者 Ctrl+F9 直接到函数结束

生成文件的关键跳

走出去后, 不难发现上面的关键跳, 我们下断

跳转未实现, 先让它实现测试, 没生成文件, 我们改成 jmp右键保存

搞定