第二期 04 PUSH 法详解

窗体 ID 被 VM 了怎么办

我们首先看一下没有被 VM 的代码, 直接二进制搜索 FF 25

push 0x520***** 就是窗口 ID

易语言程序, 不管是怎么个调用函数, 它都会经过那一串 jmp

如果是那一段窗口都被 VM 虚拟化了, 我们可以在这一串 jmp 这里下断, 然后看堆栈里面程序压入了什么数据, 然后就可以通过这个来判断是否为窗口代码

打开加壳后的程序 : 1个窗口.vmp.exe

我们来到 00401000

这几个 jmp 没有被 VM, 我们都给下断, 不知道哪个是我们需要的, 我们索性全部下断

然后我们 F9 运行, 断在第 3 个 jmp, 我们继续 F9 让程序运行

就是说程序调用了很多次, 每一次调用都要经过这几个 jmp

我们点击这个窗口按钮, 程序断在第 4 个 jmp

这时候我们看堆栈窗口

我们尝试把这里的窗口改成我们在堆栈中看到的那个

右键保存, 其实这个时候应该打补丁, 但是我们加壳的时候仅仅只是把代码处理了一下而已, 所以可以保存

我们运行试试, 成功了

接下来我们看看两个窗口的程序
OD 载入程序 : 2个窗口.exe

第二个窗口的代码

OD 载入 : 2个窗口.vmp.exe

这是被 VM 后的代码

其实我们可以把它还原, 因为易语言窗口代码都是一样的, 也就只有一两句不一样