发来一个吧
我这几天蹂躏很多壳了
知道你也是玩壳一族的 ---------
找了52破解的最新的一个练习----------tElock V0.99脱壳
附上我的脱文
这个壳被FLY大侠蹂躏过
很简洁的办法 不过我这样的粗人就靠手感脱了他
【文章标题】: 52破解UnPackMe.exe 6的脱壳
【文章作者】: 小小菜鸟
【软件名称】: UnPackMe.exe--6
【下载地址】: 自己搜索下载
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
换了好多OD
终于躲过了CRC啊.看来比较累.
用FLYOD 插件隐藏下ISDEBEGPRSENT ----HIDE
调试设置里面
不忽略所有异常---忽略在KERNEL32中内存异常
好了 开始
载入以后
到
0046A09D U>^\E9 5EDFFFFF jmp UnPackMe.00468000
0046A0A2 0000 add byte ptr ds:[eax],al
0046A0A4 0093 A958AEE5 add byte ptr ds:[ebx+E5AE58A9],dl
0046A0AA A0 06000000 mov al,byte ptr ds:[6]
这里
连续的按下 SHIFT +F9
16次后程序运行
好了 重新载入
连续的按下 SHIFT +F9
15次
00469181 /EB 0C jmp short UnPackMe.0046918F----------F2下断 SHIFT +F9 运行
00469183 |2BD2 sub edx,edx
00469185 |64:FF32 push dword ptr fs:[edx]
00469188 |64:8922 mov dword ptr fs:[edx],esp
0046918B |FE02 inc byte ptr ds:[edx]------------停在这里
0046918D ^|EB E8 jmp short UnPackMe.00469177
跳到了这里
00469185 64:FF32 push dword ptr fs:[edx]
00469188 64:8922 mov dword ptr fs:[edx],esp
0046918B FE02 inc byte ptr ds:[edx]
0046918D ^ EB E8 jmp short UnPackMe.00469177
0046918F B8 67ABD949 mov eax,49D9AB67---------到这里
00469194 33C9 xor ecx,ecx
00469196 64:8F01 pop dword ptr fs:[ecx]
一路单步 到这里
004691F7 03C7 add eax,edi
004691F9 ^ 79 E4 jns short UnPackMe.004691DF-----------向上跳
004691FB 33C4 xor eax,esp
仔细看下面 找到一个 CALL的调用返回 retn
004691F9 ^\79 E4 jns short UnPackMe.004691DF
004691FB 33C4 xor eax,esp
004691FD 90 nop
004691FE 61 popad
004691FF 83D8 2F sbb eax,2F
00469202 C3 retn-------------F2下断 SHIFT +F9 运行
返回到
返回到 00469070 (UnPackMe.00469070)
到这里
00469070 8BB5 7F374000 mov esi,dword ptr ss:[ebp+40377F]
00469076 8BFD mov edi,ebp
00469078 8D85 3E264000 lea eax,dword ptr ss:[ebp+40263E]
一路向下
00469165 ^\0F8F 5BFFFFFF jg UnPackMe.004690C6----------往回跳了
0046916B 8D85 45294000 lea eax,dword ptr ss:[ebp+402945]----------很容易代码混淆---汗---一动代码就 乱
在下面看到
00469171 /FFE0 jmp eax ; UnPackMe.00469369-------F4
一路单步 又有一个向上的
004693A1 ^\7F D3 jg short UnPackMe.00469376
仔细看代码段
004693A3 5F pop edi
004693A4 5E pop esi
004693A5 8B8F 8B374000 mov ecx,dword ptr ds:[edi+40378B]
004693AB 8B87 87374000 mov eax,dword ptr ds:[edi+403787]
004693B1 F7C1 00000080 test ecx,80000000
004693B7 74 6A je short UnPackMe.00469423-------找到一个跳转 F4
004693B9 81E1 FFFFFF7F and ecx,7FFFFFFF
接下来又有跳转
004693E2 80E1 07 and cl,7
004693E5 ^ 75 F4 jnz short UnPackMe.004693DB----------向上
004693E7 C1E8 08 shr eax,8
在
004693E7 C1E8 08 shr eax,8
004693EA 33C2 xor eax,edx
004693EC 46 inc esi
004693ED 4B dec ebx
004693EE ^ 7F E5 jg short UnPackMe.004693D5-------这个跳转F4 又是向上的
看下面的代码段
004693F0 5F pop edi
004693F1 F7D0 not eax
004693F3 3387 8F374000 xor eax,dword ptr ds:[edi+40378F]
004693F9 35 6137E43C xor eax,3CE43761
004693FE 3385 FF374000 xor eax,dword ptr ss:[ebp+4037FF]
00469404 F7D0 not eax
00469406 2B85 83374000 sub eax,dword ptr ss:[ebp+403783]
0046940C 61 popad------------------出栈的地方 F4
单步又找到一个向上的
00469426 4E dec esi
00469427 7E 06 jle short UnPackMe.0046942F
00469429 ^ FFA5 3E264000 jmp dword ptr ss:[ebp+40263E] ; UnPackMe.0046908C---------向上的
0046942F E9 06010000 jmp UnPackMe.0046953A-------这里有跳转 呵呵F4吧
到这里
0046953A 8BB5 57374000 mov esi,dword ptr ss:[ebp+403757]
00469540 85F6 test esi,esi
00469542 0F84 8B000000 je UnPackMe.004695D3
一路单步
00469725 3A5408 1D cmp dl,byte ptr ds:[eax+ecx+1D]
00469729 ^ 74 D6 je short UnPackMe.00469701-----------向上跳转
下一行是跳转 但是有可能是解码
0046972B ^\EB D0 jmp short UnPackMe.004696FD-------F4过来--------向上
0046972D 0AF6 or dh,dh---------F4
00469766 3803 cmp byte ptr ds:[ebx],al
00469768 ^ 75 F7 jnz short UnPackMe.00469761---------向上
0046976A 83A5 4F374000 00 and dword ptr ss:[ebp+40374F],0
往下看
0046976A 83A5 4F374000 00 and dword ptr ss:[ebp+40374F],0
00469771 8B95 63374000 mov edx,dword ptr ss:[ebp+403763]
00469777 8B06 mov eax,dword ptr ds:[esi]
00469779 85C0 test eax,eax
0046977B 75 0C jnz short UnPackMe.00469789-------有一个跳转 F4
单步到
004697EE 40 inc eax
004697EF 833F 00 cmp dword ptr ds:[edi],0
004697F2 8D7F 04 lea edi,dword ptr ds:[edi+4]
004697F5 ^ 75 F7 jnz short UnPackMe.004697EE-------向上
004697F7 48 dec eax
004697F8 74 1F je short UnPackMe.00469819------这里F4
0046984A 3C 00 cmp al,0
0046984C ^ 75 F5 jnz short UnPackMe.00469843---------向上
0046984E 8803 mov byte ptr ds:[ebx],al
00469850 5B pop ebx
继续单步
004699AC 3803 cmp byte ptr ds:[ebx],al
004699AE ^ 75 F9 jnz short UnPackMe.004699A9---------向上跳
004699AE ^\75 F9 jnz short UnPackMe.004699A9
004699B0 8385 4F374000 04 add dword ptr ss:[ebp+40374F],4
004699B7 ^ E9 B5FDFFFF jmp UnPackMe.00469771---------F4 又是向上的 往下 看
004699B7 ^\E9 B5FDFFFF jmp UnPackMe.00469771
004699BC 83C6 14 add esi,14
004699BF 8B95 63374000 mov edx,dword ptr ss:[ebp+403763]
004699C5 ^ E9 1FFCFFFF jmp UnPackMe.004695E9---------依然是向上的
当我们满心欢喜的时候 会发现 始终跳不出这段了!!!
于是一路向上找到了 出路
在这里往回走
004695E1 /0F84 2F040000 je UnPackMe.00469A16------------呵呵看看跳出来了吧
重新载入
连续的按下 SHIFT +F9
15次
00469181 /EB 0C jmp short UnPackMe.0046918F----------F2下断 SHIFT +F9 运行
00469183 |2BD2 sub edx,edx
00469185 |64:FF32 push dword ptr fs:[edx]
00469188 |64:8922 mov dword ptr fs:[edx],esp
0046918B |FE02 inc byte ptr ds:[edx]------------停在这里
0046918D ^|EB E8 jmp short UnPackMe.00469177
查找
004695E1
跳到这里
004695E1 /0F84 2F040000 je UnPackMe.00469A16------------F4
回车键 跟随
到了
00469A16 8BBD 5B374000 mov edi,dword ptr ss:[ebp+40375B]------------F4
00469A1C 85FF test edi,edi
单步到了 这里
00469A6D AC lods byte ptr ds:[esi]
00469A6E 32C3 xor al,bl
00469A70 D1CB ror ebx,1
00469A72 6BDB 11 imul ebx,ebx,11
00469A75 32C2 xor al,dl
00469A77 AA stos byte ptr es:[edi]
00469A78 ^ E2 F3 loopd short UnPackMe.00469A6D---------返回的
00469A7A FF56 0F call dword ptr ds:[esi+F]--------F4
00469AE8 /EB 01 jmp short UnPackMe.00469AEB
00469AEB /EB 02 jmp short UnPackMe.00469AEF
00469AF6 /EB 01 jmp short UnPackMe.00469AF9
00469AF9 /EB 58 jmp short UnPackMe.00469B53
-------------------------------------------
00469B6E /EB 01 jmp short UnPackMe.00469B71
到一个BOSS了
00469B71 8DC0 lea eax,eax ; 非法使用寄存器
00469B73 EB 01 jmp short UnPackMe.00469B76-----------F2下断--------(1)
00469B75 EB 68 jmp short UnPackMe.00469BDF
N多次失败后...SHFT+F9
00469C72 FE03 inc byte ptr ds:[ebx]
00469C74 ^ EB E8 jmp short UnPackMe.00469C5E
00469C76 23C4 and eax,esp
00469C78 2BC9 sub ecx,ecx
00469C7A 64:8F01 pop dword ptr fs:[ecx]
00469C7D 59 pop ecx
00469C7E E8 00000000 call UnPackMe.00469C83-----------F2下断 删除刚才的(1)断点
SHIFT+F9 OK 过了 太刺激了
00469CF7 59 pop ecx
00469CF8 ^ EB C8 jmp short UnPackMe.00469CC2---------一个回跳
00469CFA 59 pop ecx-----------F4
00469D1F E8 09000000 call UnPackMe.00469D2D
00469D24 98 cwde
00469D25 E9 0C000000 jmp UnPackMe.00469D36
00469D2A 83C0 D6 add eax,-2A
00469D2D 1D 2B7DD949 sbb eax,49D97D2B
00469D32 C3 retn
00469D33 83C8 A1 or eax,FFFFFFA1
00469D36 48 dec eax
00469D37 0BC5 or eax,ebp
00469D39 C3 retn------------------一个大跳转----------光明快要降临
到了
00469BA9 8B9D 83374000 mov ebx,dword ptr ss:[ebp+403783]
00469BAF 33F6 xor esi,esi
00469BB1 F7D3 not ebx
00469BB3 0BF3 or esi,ebx
到了 这里
00469C57 59 pop ecx ; 0012FFB0
00469C58 5F pop edi
00469C59 C3 retn------------------跳向OEP
-----------------------代码突变-----------------------
0045159C 55 push ebp----------------终于到头了-----------追了 一天一夜 ---DELPHI
0045159D 8BEC mov ebp,esp
0045159F 83C4 F0 add esp,-10
004515A2 B8 BC134500 mov eax,UnPackMe.004513BC
004515A7 E8 8846FBFF call UnPackMe.00405C34
004515AC A1 E02F4500 mov eax,dword ptr ds:[452FE0]
004515B1 8B00 mov eax,dword ptr ds:[eax]
004515B3 E8 F8E5FFFF call UnPackMe.0044FBB0
004515B8 A1 E02F4500 mov eax,dword ptr ds:[452FE0]
004515BD 8B00 mov eax,dword ptr ds:[eax]
--------------后面的就是LORDPE DUMP修正景象大小--------
ImportREC_chs.exe填写以后用插件TELOCK 0.99修复-----------
--------------------------------------------------------------------------------
【经验总结】
本来可以多忽略几次异常的
但是好奇的我
在15次异常之后 磨难的过了 异常----希望大家有启示
其实异常部分完全可以手工跳过----------------
原则是 要找关键的代码 -------------
--------------------------------------------------------------------------------
【版权声明】: 本文原创于小小菜鸟.友情支持小生我怕怕, 转载请注明作者并保持文章的完整, 谢谢!
2008年10月02日 13:48:58
希望高手指点一下,完全靠感觉,不知道为什么这么脱
上传的附件: