单步调试跟踪
单步跟踪法的原理就是通过单步调试(步入、步过)和运行到光标处等功能,完整走过程序的自脱壳过 程,跳过一些循环恢复代码的片段,并用单步进入确保程序不会略过 OEP。
遵循的原则:
-
按 F8 单步向下,尽量实现向下的 jmp 跳转
-
会经常遇到大的循环,这时要多用 F4 来跳过循环
-
如果壳代码入口点不远处就是一个 call(近 call),尽量不要直接跳过,而是进入这个 call
-
一般跳转幅度大的 jmp 指令,都极有可能是跳转到了原程序入口点 (OEP)
更据上述原则单步,到后面会发现触发关键字,popad并且看到一个大跳
这就是找到了oep
ESP定律
是脱壳的利器, 是应用频率最高的脱壳方法之一,它的原理在于利用程序中堆栈平衡来快速 找到 OEP。
由于在程序自解密或者自解压过程中,不少壳会先将当前寄存器状态压栈,如使用 pushad ,在解压结 束后会将之前的寄存器值出栈,如使用 popad 。因此在寄存器出栈时,往往程序代码被恢复,此时硬 件断点触发。然后在程序当前位置,只需要少许单步操作,就很容易到达正确的 OEP 位置。
- 程序刚载入开始 pushad/pushfd
- 将寄存器压栈后就在 ESP/RSP 寄存器所在地址处设硬件访问断点
- 运行程序,触发断点
找到和上面一样的OEP点了
命令检索
再次找到OEP
Dump以及IAT修复
X64debug自带的插件
使用高级方法,找到重定位
然后点击确定,点击get imports,再点击fix dump
先后会在桌面生成
dump.exe和dump_scy.exe
勾选第四行
取消勾选第一行
然后保存