标 题: 【原创】取巧脱tElock 1.0 (private) -> tE!壳
作 者: swordkok
时 间: 2011-05-16,01:50:00
链 接: http://bbs.pediy.com/showthread.php?p=959225
【文章标题】: 取巧脱tElock 1.0 (private) -> tE!壳
【文章作者】: swordkok
【作者邮箱】:
【软件名称】: REDitorII
【下载地址】: http://u.115.com/file/clcunmn7#
【加壳方式】: tElock 1.0 (private) -> tE!
【保护方式】:
【编写语言】: Delphi??
【使用工具】: OD,IREC,LORDPE
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
PEID插壳,tElock 1.0 (private) -> tE!
OD忽略除了INT3之外的所有异常,IsDebug去掉Od标志
用OD载入,停在
代码:
00A7509D >^\E9 5EDFFFFF jmp REDitorI.00A73000 00A750A2 0000 add byte ptr ds:[eax],al 00A750A4 000B add byte ptr ds:[ebx],cl 00A750A6 D9BB B6E55067 fstcw word ptr ds:[ebx+0x6750E5B6]
CTRL+S,搜索
代码:
mov ebx,edx shr ebx,10 mov eax,dword ptr ds:[esi]
代码:
00A74558 8BDA mov ebx,edx 00A7455A C1EB 10 shr ebx,0x10 00A7455D 8B06 mov eax,dword ptr ds:[esi] 00A7455F 85C0 test eax,eax 00A74561 74 70 je short REDitorI.00A745D3 00A74563 8B4E 04 mov ecx,dword ptr ds:[esi+0x4] 00A74566 83E9 08 sub ecx,0x8 00A74569 D1E9 shr ecx,1 00A7456B 8BBD 63374000 mov edi,dword ptr ss:[ebp+0x403763] 00A74571 03F8 add edi,eax 00A74573 83C6 08 add esi,0x8 00A74576 0FB706 movzx eax,word ptr ds:[esi] 00A74579 C1C8 0C ror eax,0xC 00A7457C FEC8 dec al 00A7457E 78 4C js short REDitorI.00A745CC 00A74580 74 0E je short REDitorI.00A74590 00A74582 FEC8 dec al 00A74584 74 13 je short REDitorI.00A74599 00A74586 FEC8 dec al 00A74588 74 3C je short REDitorI.00A745C6 00A7458A FEC8 dec al 00A7458C 74 14 je short REDitorI.00A745A2 00A7458E EB 3C jmp short REDitorI.00A745CC 00A74590 C1E8 14 shr eax,0x14 00A74593 66:011C38 add word ptr ds:[eax+edi],bx 00A74597 EB 33 jmp short REDitorI.00A745CC 00A74599 C1E8 14 shr eax,0x14 00A7459C 66:011438 add word ptr ds:[eax+edi],dx 00A745A0 EB 2A jmp short REDitorI.00A745CC 00A745A2 52 push edx 00A745A3 C1E8 14 shr eax,0x14 00A745A6 8BD8 mov ebx,eax 00A745A8 C1E0 10 shl eax,0x10 00A745AB 66:8B16 mov dx,word ptr ds:[esi] 00A745AE 66:81E2 FF0F and dx,0xFFF 00A745B3 66:8BC2 mov ax,dx 00A745B6 5A pop edx 00A745B7 8D8402 00800000 lea eax,dword ptr ds:[edx+eax+0x8000] 00A745BE 89043B mov dword ptr ds:[ebx+edi],eax 00A745C1 46 inc esi 00A745C2 46 inc esi 00A745C3 49 dec ecx 00A745C4 EB 06 jmp short REDitorI.00A745CC 00A745C6 C1E8 14 shr eax,0x14 00A745C9 011438 add dword ptr ds:[eax+edi],edx 00A745CC 46 inc esi 00A745CD 46 inc esi 00A745CE 49 dec ecx 00A745CF ^ 7F A5 jg short REDitorI.00A74576 00A745D1 ^ EB 8A jmp short REDitorI.00A7455D 00A745D3 8B95 63374000 mov edx,dword ptr ss:[ebp+0x403763] 00A745D9 8BB5 53374000 mov esi,dword ptr ss:[ebp+0x403753] //IAT地址 00A745DF 85F6 test esi,esi 00A745E1 0F84 2F040000 je REDitorI.00A74A16 //magic jmp
对00A745E1下硬断,SHIFT+F9,再把z置1,跳到:
代码:
00A74A16 8BBD 5B374000 mov edi,dword ptr ss:[ebp+0x40375B] 00A74A1C 85FF test edi,edi 00A74A1E EB 03 jmp short REDitorI.00A74A23 00A74A20 0100 add dword ptr ds:[eax],eax 00A74A22 EB 74 jmp short REDitorI.00A74A98
代码:
0040B848 53 push ebx ; kernel32.LoadLibraryW 0040B849 8BD8 mov ebx,eax 0040B84B 33C0 xor eax,eax 0040B84D A3 281A5F00 mov dword ptr ds:[0x5F1A28],eax 0040B852 6A 00 push 0x0 0040B854 E8 2BFFFFFF call REDitorI.0040B784 0040B859 A3 40DC5F00 mov dword ptr ds:[0x5FDC40],eax 0040B85E A1 40DC5F00 mov eax,dword ptr ds:[0x5FDC40] 0040B863 A3 341A5F00 mov dword ptr ds:[0x5F1A34],eax 0040B868 33C0 xor eax,eax
DUMP ,修复IAT,结果无法运行,出错。
看了好久,没有结果,上看雪求助,“幻影火”牛提示可能OEP找错了,仔细看了下,觉得真有可能是OEP找错了
于是用另外的方法。
OD载入,忽略全部异常
ALT+M
Memory map, 条目 24
地址=005F1000
大小=0000A000 (40960.)
属主=REDitorI 00400000
区段=.aspr
包含=数据
类型=Imag 01001002
访问=R
初始访问=RWE
-------------下断,SHIFT+F9
到:
代码:
00A740C6 AC lods byte ptr ds:[esi] 00A740C7 85FF test edi,edi 00A740C9 34 FF xor al,0xFF
CTRL+B
查找 0AF6
来到:
代码:
00A7472D 0AF6 or dh,dh 00A7472F 895424 1C mov dword ptr ss:[esp+0x1C],edx 00A74733 61 popad 00A74734 C685 FD2F4000 0>mov byte ptr ss:[ebp+0x402FFD],0x0 00A7473B 74 24 je short REDitorI.00A74761 ----------->magic jmp,改成jmp
ALT+M,
Memory map, 条目 22
地址=00401000
大小=001EE000 (2023424.)
属主=REDitorI 00400000
区段=.aspr
包含=代码
类型=Imag 01001002
访问=R
初始访问=RWE
---------------下断,SHIFT+F9来到
代码:
0040B848 53 push ebx ; kernel32.LoadLibraryW 0040B849 8BD8 mov ebx,eax 0040B84B 33C0 xor eax,eax 0040B84D A3 281A5F00 mov dword ptr ds:[0x5F1A28],eax 0040B852 6A 00 push 0x0
结果还是这个伪OEP,郁闷,也不知道真正的OEP在哪
突然想起用某脱壳机脱的时候,OEP是005F0AC4,于是到这个地址看看:
代码:
005F0AC4 55 push ebp 005F0AC5 8BEC mov ebp,esp 005F0AC7 B9 05000000 mov ecx,0x5 005F0ACC 6A 00 push 0x0 005F0ACE 6A 00 push 0x0 005F0AD0 49 dec ecx 005F0AD1 ^ 75 F9 jnz short REDitorI.005F0ACC
dump,IRec输入OEP,自动查找,无果……,输入第一个方法找到的IAT地址:00201000,获取IAT,剪掉无效API,修复。
居然成功了,程序可以正常运行,不过几秒钟后自动退出,估计还有自校验,收工。
成功脱掉有点侥幸,只是不明白这个OEP到底应该怎么找,只是借用了脱壳机找到的OEP,希望大牛们给出找到OEP的方法。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2011年05月16日 01:53:00