PESpin1.32学习笔记之API Redirection的处理
引:“一个有信念者所开发出的力量,大于99个只有兴趣者”
本文章主要讲述PESpin1.32的API Redirection的处理方法,加壳选项如图:
而试炼品依然为98记事本.
OD载入程序,F8单步2次后,即可使用ESP定律法
下完硬件断点后,SHIFT+F9运行,来到下面的地方。(为了方便后面的调试,ESP处的硬件断点暂时不要删除!)
接下来F8单步走,即可来到OEP!
OEP:
来到OEP后,很明显的发现,API被重定位了。
众所周知,98记事本是个VC++的程序,当然,从入口代码来看,也很显然是VC++的入口点。
随便找个VC++的程序,即可知道,代码:
004010D3 FF15 E80E4100 call dword ptr ds:
处应该调用一个系统API函数。而具体为什么函数,也可以靠经验去猜测。
当然,也可以这么看,跟入这个CALL,去看下里面的东西:
跟随后可以发现下面的代码:
其实,有经验的朋友一眼就能发现,此API函数即为GetCommandLineA
当然,此试炼品为98记事本,找未加壳的程序比对下:
004010D3
FF15 E0634000 call dword ptr ds:[<&KERNEL32.GetCommandLineA>] ; kernel32.GetCommandLineA
也可知,此API函数为GetCommandLineA
好,知道了此函数,就方便了我们的调试
CTRL+F2,重新载入程序
在数据窗口处CTRL+G,输入GetCommandLineA
然后,下硬件访问断点
下完断点后,SHIFT+F9运行,5次后,取消该硬件断点
然后F8结合F7一路走,直到来到代码
mov dword ptr ds:,eax的地方
而此处,即为最佳的patch代码的地方!
由于离OEP最近的哪个API不一定是RVA的起始位置,为了把所有的API都处理,故在此处先下个硬件执行断点,接着CTRL+F2重新载入程序,接着SHIFT+F9,再次来到这个最佳地点!
来到后,我们找块空地,patch代码
我们可以用隐藏OD的插件来申请一段空地
申请的新空间的地址为00930000
然后先记录下patch地址处的原始代码:
0040D18A 8907 mov dword ptr ds:,eax ;
0040D18C EB 02 jmp short NotePad_.0040D190
二进制代码为:
89 07 EB 02
然后,把0040D18A处的代码修改为
Jmp 00930000
然后来到00930000处patch我们的代码
具体的代码为什么,我们来看堆栈处:
在堆栈的EIP的所在处往上找
可以发现,出现了SHELL32这个系统DLL,那具体的偏移地址为多少呢?我们可以双击EIP处的地址栏,就会出现以EIP处为原点的偏移值
由于堆栈所指向的值为ESP的值,故此处应为ESP-3C
而下面一行ESP-38的值为偏移大小
也就是说,真正的地址为
Address=-
以此函数为例,真正的地址=7D6110D7-0000000F=7D6110C8
所以patch如下代码:
mov eax,
sub eax,
接着就输入刚才记下的原始代码:
mov dword ptr ds:,eax
jmp 0040D190
全部二进制代码如下:
8B 44 24 C4 2B 44 24 C8 89 07 E9 81 D1 AD FF
Patch完代码后,在第一行下F2断点,接着SHIFT+F9运行
断下后,F8,2次后,即可在寄存器窗口的EAX值处看到正确的API函数了
OK,被重定位的API全部回来了,好极了!下面就取消所有除了原始的ESP处的那个断点,
SHIFT+F9运行,中断后,F8单步走,即可顺利来到OEP了!
而此时可以发现,OEP处,所以的API都回来了
哈,下面就可以dump程序了。
然后用Import REC修复
修复时可能会出现下面的问题
输入OEP的值10CC后,会出现下面的错误
可以用下面的方法来解决。
右键----高级命令------获取API调用,然后按确定就OK
按确定后,会发现,所有的IAT都出来,而且全部有效
最后就是转存修复了。当然也得注意2个问题
(1) 别忘了把OEP处的值修正为10CC
(2) 改下Import-REC的选项,如下图
最后,转存修复!然后程序就能正常运行了!
脱壳过程到此结束!
总结一下:脱壳的过程并不难,关键是如何定位和找到最佳的patch地点,以及如何自己patch代码,由此可见,汇编基础的重要性!应验了某大牛的一句话:不会汇编的人,学脱壳破解永远是菜鸟。同时,也要注意下Import-REC的几个使用下技巧!
引:
今日复今日,今日何其少!今日又不为,此事何时了!人生百年几今日,今日不为真可惜!若言姑待明朝至,明朝又有明朝事。为君聊赋今日诗,努力请从今日始。
------文嘉《今日诗》
珍惜时间,珍爱生命,努力学习,努力拼搏!
作者:ximo
[ 本帖最后由 ximo 于 2008-12-24 19:51 编辑 ] 支持超兄的教程!
膜拜大牛 还是喜欢你的视频教程 看起来让人更懂 学习学习。。。。。。
今日复今日,今日何其少!今日又不为,此事何时了!人生百年几今日,今日不为真可惜!若言姑待明朝至,明朝又有明朝事。为君聊赋今日诗,努力请从今日始。 终于发出来了...
超神~ 偶像,出个录像吧 徐老师就是强啊o(∩_∩)o 学习啊:handshake “路漫漫其修远兮,我将上下而求索”
膜拜了 :loveliness: 视频看不了 55555555