ASPack脱壳
Aspack脱壳
对这里一直有点模糊,稀里糊涂的解决了,全部推到来一次吧
前期准备
PE Tools
demo.exe
ida8.2
ImportREC
Aspack
010editor
源代码:
1 | #include"stdio.h" |
分析加密变化
在文件可选头可以发现主要是EP和SizeOfImage发生了修改
除此外文件新加了两个节区(这个用010editor模版直接看还看不出来,可能软件设置问题)
脱壳
算法流程
源程序 | 加壳程序 |
---|---|
断点在EP(_mainCRTStartup) | 断点在EP(start) |
进入main函数 | |
main函数执行完退出回到_mainCRTStartup | |
_mainCRTStartup执行结束 |
- _mainCRTStartup由编译器提供的函数,根据编译器的不同也可能是start函数,作用是初始化运行时库,用户的主函数区为main

_mainCRTStartup
ESP定律
利用堆栈平衡,当popad压入的寄存器数据时,对这些数据进行硬件访问断点,至于为什么不是内存断点,我试过停不下来,可能是因为内存断点每次标记的是一个页,对于这个页上所有的内容程序遇到后就会暂停,然后又会去判断是不是要求的,然后就卡死在里面了吧,然后栈的所在页比较特殊,就。。只是一种猜测


oep
当pushad执行后对堆栈的数据下硬件访问断点,可以看到此时已完成解密,恢复基本数据,往oep出发
ret后发现回到了原始OEP
dump
主要修改入口点,其他可以暂时不管,这样可以直接将内存解密好的文件重新装回新的exe
IAT表修复
- 先使用ImportREC修改OEP,然后自动寻找IAT
- 将找到的IAT放入刚dump文件
修补前后修补后的运行如图
总结
很好,以后别想再难住我了,对硬件断点和内存断点理解的也更深了✌️
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 wowonwall!
评论