本帖最后由 妖精的旋律 于 2011-12-16 10:38 编辑
“不会汇编,永远只是菜鸟”
我个人觉得
菜鸟和大牛的区别是
大牛知道脱壳破解的原理是什么.
而菜鸟只知道脱壳破解的过程是什么.
就算你能把Nooby的壳脱了,你终究也是菜鸟,因为你只会按照别人的视频里做. 知道这一步改哪 断哪 却不知道为什么要这样做.
所以我是一名合格的菜鸟.
像我们菜鸟不要妄想盖空中阁楼.一步一步慢慢走. 前几天52开放注册,公告也说或许会有“骚乱" 果不其然,到处都是拿着强壳 问“请问这个怎么脱啊" 怪不得大牛都懒得回答菜鸟的问题
语言组织的不好,请拍砖.
废话不多,进入正题.
给大家说下小弟脱ZP的过程
目标软件是XP记事本 NOTEPAD.EXE
加壳软件:zp1.4.9 设置软件需key才可以运行!.
工具 OD ZPDecoding zpfixer
首先ESP定律 来到我们熟悉的修改232C的地方.
77D56D7D > 8BFF mov edi,edi
下断 重载程序. 两次F9
再次来到 77D56D7D > 8BFF mov edi,edi
把77D56D7D的断点取消!
看堆栈窗口
0006FE8C 0087155E 返回到 0087155E 来自 00870550
我们去这个地址
00871555 /74 21 je short 00871578
00871557 |8BCB mov ecx,ebx
00871559 |E8 F2EFFFFF call 00870550
0087155E |3D 2C230000 cmp eax,232C
00871563 |74 13 je short 00871578
00871565 |8BCB mov ecx,ebx
00871567 |E8 74FEFFFF call 008713E0
0087156C |85C0 test eax,eax
0087156E |74 08 je short 00871578
00871570 |6A 00 push 0
00871572 |FF15 3CA08500 call dword ptr ds:[85A03C]
00871555处下硬断
重载.
两次F9
来到00871555 /74 21 je short 00871578
此事我们搜索ZP1.4.9的特征码
Ctrl+S
mov edx,dword ptr ds:[esi]
push 4
add ecx,0CE
来到
0086D8DB 8B16 mov edx,dword ptr ds:[esi]
0086D8DD 6A 04 push 4
0086D8DF 81C1 CE000000 add ecx,0CE
0086D8E5 51 push ecx
0086D8E6 50 push eax
0086D8E7 52 push edx
0086D8E8 E8 4301FFFF call 0085DA30
0086D8ED 83C4 10 add esp,10
0086D8F0 5E pop esi
0086D8F1 C2 0400 retn 4
在CALL这里下硬断。
重载。
F9两次去到je跳转的地方 修改标志位 让他跳!
再次F9到CALL这里。
此时shift+f9 一次 看堆栈
0006FE88 01009000 NOTEPAD_.01009000
0006FE8C 00000800
此时用到 ZPDecoding
计算出 0B3A532BC29F90F4A278A918A07CF0AE
F7跟进这个CALL 一直到 00852DE9 E8 CAE8FFFF call 008516B8
00852DD9 55 push ebp
00852DDA 8BEC mov ebp,esp
00852DDC 83EC 10 sub esp,10
00852DDF 8D45 F0 lea eax,dword ptr ss:[ebp-10]
00852DE2 50 push eax
00852DE3 FF75 14 push dword ptr ss:[ebp+14]
00852DE6 FF75 10 push dword ptr ss:[ebp+10]
00852DE9 E8 CAE8FFFF call 008516B8
00852DEE 33C9 xor ecx,ecx
此时堆栈
0006FE64 00892206 |Arg1 = 00892206 ASCII "ER_OF_PROCESSORS=2"
0006FE68 00000004 |Arg2 = 00000004
0006FE6C 0006FE70 \Arg3 = 0006FE70
在Arg3数据窗口跟随
00852DEE 33C9 xor ecx,ecx
这里F2下断 F9运行到这里
此时数据窗口 前两行 代码
0006FE70 1C 21 59 54 A8 32 52 33 !YT?R3
0006FE78 C2 EA 8D 5D 26 4F 88 D5 玛峕&O堈
我们用刚才得到的数据替换这个
F9 三次. 又来到 00852DEE 33C9 xor ecx,ecx
数据窗口再次替换
就这样一直循环F9 替换. 一直到F9之后是jmp.
00879CCD /E9 740B0000 jmp 0087A846
F7跟进
0100739D 6A 70 push 70 到达OEP。。
接下来要做的就是修复IAT.
我们要记录
IAT开头:01001000
结束:01001344
patch:00852847
zero:00852154
(找IAT开始结束 这些过程省略了...这篇文章是给会脱不需要解码的ZP 而无KEY解码不会的朋友 所以这些大家应该都会找)
下来我们用到 zpfixer这个工具!
填写到zpfixer 之后得到地址:A20000
OD里到这个地方
00B20000 BE 00100001 mov esi,1001000 新建EIP
00B20005 BF 44130001 mov edi,1001344
00B2000A B9 47288500 mov ecx,852847
00B2000F 83C1 05 add ecx,5
00B20012 83C7 04 add edi,4
00B20015 8B06 mov eax,dword ptr ds:[esi]
00B20017 8931 mov dword ptr ds:[ecx],esi
00B20019 8A10 mov dl,byte ptr ds:[eax]
00B2001B 80FA 68 cmp dl,68
00B2001E 74 02 je short 00B20022
00B20020 EB 0A jmp short 00B2002C
00B20022 8A50 05 mov dl,byte ptr ds:[eax+5]
00B20025 80FA E9 cmp dl,0E9
00B20028 ^ 75 F6 jnz short 00B20020
00B2002A FFD0 call eax
00B2002C 83C6 04 add esi,4
00B2002F C605 54218500 0>mov byte ptr ds:[852154],0
00B20036 3BF7 cmp esi,edi
00B20038 74 0B je short 00B20045
00B2003A 8B06 mov eax,dword ptr ds:[esi]
00B2003C 85C0 test eax,eax
00B2003E ^ 75 D5 jnz short 00B20015
00B20040 83C6 04 add esi,4
00B20043 ^ EB D0 jmp short 00B20015
00B20045 33C0 xor eax,eax
跑吧。 把所有IAT都跑出来。
其他脱壳修复就和平时大家一样了
lordpe脱壳 import修复 IAT全部有效。。
完成。 |