很多加了壳的软件是很难逆向分析的,需要手脱。下面以UPX壳为例简单介绍一下如何手动脱壳
需要工具:x64dbg。
以buuctf中re的新年快乐为例
拿到程序以后使用x64dbg打开。
F9运行到程序的起点
第一步
首先要找到OEP去壳后的程序起点。这里常用的有三个方法。
1.直接找跨度大的跳转。
这里比较简单
直接就可以看到E9开头的跳转,但是很多壳以这种方式是找不到的。
2.根据ESP定律设置硬件断点。
由于壳段代码需要保存当前的状态,所以会出现pushad(64位可以看到很多push 寄存器)。这时候F8运行然后在栈顶设置硬件断点。再F9运行程序就会断在恢复原状态popad的位置。
dump下来的程序仍然无法正常打开,原因是没有修改IAT表。IAT表类似linux中的PLT表。windows的PE加载器运用动态链接的方式,将dll中的API位置填补到正确位置。然后脱壳后的程序并不是正常打开,这就导致了IAT未被正确填补需要手动或者利用工具填补IAT表。
第三步
用scylla将IAT表填补完整
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!