0x00 在正式调试之前需要知道的一些操作

1.单步追踪法向下调试一般用的是F8(单步步过)

2.遇到红色的向上箭头说明运行到此处之后会向上跳转,对于单步跟踪法来说是不能让它发生的,所以点击下一行,F4运行到该处。

脱upx壳--初试--单步追踪-LMLPHP

3.遇到灰色箭头:灰色说明它没有起作用,直接F8就行,并不会向上跳转

脱upx壳--初试--单步追踪-LMLPHP

4.如果看到popad指令,说明在下面不远处会有一个大跳转(跳到另一个区段) ,即程序即将运行到OEP (真正的程序入口点)。

5.在快到popad的时候可能程序会跑飞,如下图的第一个箭头所指

0040BAC0    FF96 A8B00000   call dword ptr ds:[esi+0xB0A8]

那么我们可以直接F4到0x400AC6脱upx壳--初试--单步追踪-LMLPHP

0x01 脱壳

*有了上述的了解之后,经过耐心的调试,程序来到了OEP。

脱upx壳--初试--单步追踪-LMLPHP

注意看,jump的目标地址0x401188, 而当前程序所处的地址是0x40BB03, 跨度如此之大,说明我们离成功不远。

*F8单步运行,到了最后一步。

脱upx壳--初试--单步追踪-LMLPHP

*在0x401188处右键 -> 用Ollydump脱壳调试进程,点脱壳。

脱upx壳--初试--单步追踪-LMLPHP

小trick:alt+m可以看内存映像(memory map),如下图

脱upx壳--初试--单步追踪-LMLPHP

可以看到0x401188 属于UPX0区段,而0x40BB03 属于UPX1,验证了上面的说法。

0x02 验证

用IDA32位打开。

第一张是未脱壳的结果。

脱upx壳--初试--单步追踪-LMLPHP

第二张是脱壳之后的结果。

脱upx壳--初试--单步追踪-LMLPHP

可以看到脱壳之后flag很容易就可以看到是Ea5yR3versing, 但很迷的是用file命令或者是DIE工具扫出来还是有upx壳==

05-08 15:50