妖精的旋律 发表于 2011-1-8 02:04

菜鸟脱ZP. 顺便强调“不会汇编,永远只是菜鸟”

本帖最后由 妖精的旋律 于 2011-12-16 10:38 编辑

“不会汇编,永远只是菜鸟”
我个人觉得
菜鸟和大牛的区别是
大牛知道脱壳破解的原理是什么.
而菜鸟只知道脱壳破解的过程是什么.
就算你能把Nooby的壳脱了,你终究也是菜鸟,因为你只会按照别人的视频里做. 知道这一步改哪 断哪 却不知道为什么要这样做.
所以我是一名合格的菜鸟.


像我们菜鸟不要妄想盖空中阁楼.一步一步慢慢走. 前几天52开放注册,公告也说或许会有“骚乱"果不其然,到处都是拿着强壳 问“请问这个怎么脱啊"怪不得大牛都懒得回答菜鸟的问题


语言组织的不好,请拍砖.

废话不多,进入正题.


给大家说下小弟脱ZP的过程

目标软件是XP记事本 NOTEPAD.EXE

加壳软件:zp1.4.9 设置软件需key才可以运行!.

工具 OD ZPDecodingzpfixer



首先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:   

00871555处下硬断

重载.

两次F9

来到00871555   /74 21         je short 00871578

此事我们搜索ZP1.4.9的特征码

Ctrl+S

mov edx,dword ptr ds:
push 4
add ecx,0CE

来到

0086D8DB    8B16            mov edx,dword ptr ds:
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   01009000NOTEPAD_.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:
00852DE2    50            push eax
00852DE3    FF75 14         push dword ptr ss:
00852DE6    FF75 10         push dword ptr ss:
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运行到这里

此时数据窗口 前两行 代码
0006FE701C 21 59 54 A8 32 52 33!YT?R3
0006FE78C2 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:
00B20017    8931            mov dword ptr ds:,esi
00B20019    8A10            mov dl,byte ptr ds:
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:
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:,0
00B20036    3BF7            cmp esi,edi
00B20038    74 0B         je short 00B20045
00B2003A    8B06            mov eax,dword ptr ds:
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全部有效。。

完成。

yjd333 发表于 2011-1-8 02:11

学习了。改天试试。{:1_921:}

wazz 发表于 2011-1-8 02:21

牛逼表示支持膜拜!!!

gtacsr 发表于 2011-1-8 02:34

很不错。支持。

小生我怕怕 发表于 2011-1-8 02:52

本帖最后由 小生我怕怕 于 2011-1-8 03:00 编辑

我给你说个道理,应该说是前人所说的,


会脱UPX的很多,脱好UPX的很少


楼主点评的那些朋友,应该这样说,别人能帮助你给予解决的话,就不要去挑剔,与其挑剔别人给出的答案,不如挑剔下自己为什么不会

妖精的旋律 发表于 2011-1-8 03:20

本帖最后由 妖精的旋律 于 2011-1-8 03:25 编辑

回复 5# 小生我怕怕


    小生是站在高手的角度思考... 理解.
而且我那比喻说的是 “伪高手”大家懂的。。

doctorlin2015 发表于 2011-1-8 04:28

学习了,刚弄了个ID真不容易,从0开始呵呵

gamezx 发表于 2011-1-8 09:01

其实问,和回不回答,或者说怎么回答,这个没什么好争的!过来人都知道

yjd333 发表于 2011-1-8 09:08

楼主点评的那些朋友,应该这样说,别人能帮助你给予解决的话,就不要去挑剔,与其挑剔别人给出的答案,不如挑剔下自己为什么不会
{:1_921:}赞同。有时候口气真让人受不了。

zckey09 发表于 2011-1-8 09:13

谢谢分享 支持一下
页: [1] 2 3
查看完整版本: 菜鸟脱ZP. 顺便强调“不会汇编,永远只是菜鸟”