第一次比赛上体验手脱,记录一下,64位程序,x64dbg载入
断点里找入口,跟进去,423DC0是入口
F9让程序执行到这里
再F8,发现只有RSP寄存器的发生变化,符合ESP脱壳定律
在RSP这里右键,选择在内存窗口中转到
在内存窗口右键选择4字节的硬件断点
断点下好以后F9运行,跳到423FD5处,断在了几个pop之后
往下边看看,发现有一个大跳,在423FE5处下断点,F9运行过去然后F7
这里有一个点我比较疑惑,网上的ESP定律dump的OEP都是jmp到的地址,比如应该是401500,可是这里直接从423FD5 dump也是可以的,有些疑惑
这里展示一下两个分别选择两个OEP dump 后的效果
从423FD5 dump:
IDA加载进来是有些问题的,而且找不到main函数
但是可以通过string窗口搜索程序关键字然后交叉引用到主函数
然后就可以很清楚的看到加密逻辑了
从401500 dump:
可以看到程序加载进来是直接到main函数的,很正常
总结一下,找到正确的OEP还是很重要的,不正确的OEP可能程序也能进行反汇编,但是可能会有问题
还需要注意脱壳时程序必须动调运行到ESP第一次变化以后的位置才能进行dump,否则就算OEP找到了也脱不成功