【脱文动画】http://cms.cnxhacker.net/donghua/crack/200607/247.html
【脱文标题】 手动脱壳进阶第一篇Petite2.2 续之Patch IAT+CRC
【脱文作者】 weiyi75[Dfcg]
【作者邮箱】 weiyi75@sohu.com
【作者主页】 Dfcg官方大本营
【使用工具】 Peid,Ollydbg,ImportREC1.6f
【脱壳平台】 Win2K/XP
【软件名称】 PEtite 2.2加密的记事本
【软件大小】 17.3k
【下载地址】 本地下载
Petite2.2.rar
【加壳方式】 PEtite 2.2 -> Ian Luck
【脱壳声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【脱壳内容】
这个壳入口和IAT通过ImportREC1.6f辅助是非常容易修复的,但懒人还是喜欢脚本一步到位,像普通壳一样脱。
运行ImportREC,选择这个进程。把OEP改为000010cc,点IT AutoSearch,点“Get Import”,看到指针无规律被重定向。
以0062EC处的指针突破,点右键反汇编/16进制显示,看到指针都被重定向了。用跟踪等级1是容易修,但脱衣服就要强★
通过IR告诉 IAT从000062E0开始,大小248
从第一个指针开始,4062E4
IAT重定向就是先前IAT是正确的,然后修改IAT为IR不认识的地址。
OD载入程序
忽略所有异常
命令行
hw 4062e4
F9运行中断3次
004059C2 8B06 mov eax,dword ptr ds:[esi]
004059C4 85C0 test eax,eax
004059C6 0F84 81000000 je Notepad.00405A4D
004059CC 0FBAE0 1F bt eax,1F
004059D0 73 2B jnb short Notepad.004059FD
004059D2 25 FFFF0000 and eax,0FFFF
004059D7 2B4424 0C sub eax,dword ptr ss:[esp+C]
004059DB 0F82 AB000000 jb Notepad.00405A8C
004059E1 3B4424 08 cmp eax,dword ptr ss:[esp+8]
004059E5 0F83 A1000000 jnb Notepad.00405A8C
004059EB C1E0 02 shl eax,2
004059EE 034424 04 add eax,dword ptr ss:[esp+4]
004059F2 8B00 mov eax,dword ptr ds:[eax]
004059F4 03C7 add eax,edi
004059F6 8906 mov dword ptr ds:[esi],eax
004059F8 83C6 04 add esi,4
004059FB ^ EB C5 jmp short Notepad.004059C2
004059FD 03C5 add eax,ebp
004059FF 50 push eax //放入IAT函数名
00405A00 50 push eax
00405A01 57 push edi
00405A02 FF95 94070000 call dword ptr ss:[ebp+794] ; kernel32.GetProcAddress
//GetProcAddress 获取正确地址
00405A08 85C0 test eax,eax
00405A0A 74 7F je short Notepad.00405A8B
00405A0C FF4C24 28 dec dword ptr ss:[esp+28] //是否加密指针
00405A10 7D 1F jge short Notepad.00405A31 //不跳就加密,如果修改这里就遭了,程序异常,不跳IAT就加密,就连修改S标志也不行,怒!
************************************************************************************
找到判断位置,重启动OD
bp GetProcAddress
Alt+F9返回
bc GetProcAddress
修改
00405A10 7D 1F jge short Notepad.00405A31
为
00405A10 EB 1F jmp short Notepad.00405A31
然后找到循环出口,并处理最后的跳转。
************************************************************************************
00405A12 8B5424 24 mov edx,dword ptr ss:[esp+24]
00405A16 C602 E9 mov byte ptr ds:[edx],0E9
00405A19 2BC2 sub eax,edx //修改正确地址
00405A1B 83E8 05 sub eax,5 //修改正确地址
00405A1E 8942 01 mov dword ptr ds:[edx+1],eax
00405A21 8BC2 mov eax,edx //重定向
00405A23 83C2 05 add edx,5
00405A26 895424 24 mov dword ptr ss:[esp+24],edx
00405A2A 83E2 07 and edx,7
00405A31 8906 mov dword ptr ds:[esi],eax //写入正确的指针
00405A33 873C24 xchg dword ptr ss:[esp],edi //这里中断,往上看
00405A36 83C9 FF or ecx,FFFFFFFF
00405A39 33C0 xor eax,eax
00405A3B F2:AE repne scas byte ptr es:[edi]
00405A3D FD std
00405A3E F7D1 not ecx
00405A40 4F dec edi
00405A41 F3:AA rep stos byte ptr es:[edi]
00405A43 5F pop edi
00405A44 FC &nbs
[1] [2] [3] 下一页