cjteam 发表于 2012-7-14 21:56

ZP脱壳学习8个样本 你能脱几个?

本帖最后由 cjteam 于 2012-7-15 00:16 编辑

用zp1.49版本,加密了多个版本,只为了解什么是zp的保护,还有如何用zp保护,同时针对不同的保护解决方法。理解大牛们是如何做的Zp早被大牛们玩烂了,以至于说不会脱zp就不要玩破解。。55555551.zp只压缩资源.exe---其他什么保护也没,相当的简单哟。事实也不简单 :)2.zp默认保护但不要key保护.此时有加密导入表,含有加密等级1和加密等级2,以及校验等。Ps:这类脱壳貌似处理iat就可以了,因为修改版的OD+SOD可以处理很多,而且是简单的脱壳,不是patch,所以一般校验之类的扯不上关系。加密调用代码是???在OD里是如何显示的呢?不知道..3.zp默认保护,增加试用30次.4.反函数钩子--不知道OD是如何表现的.因为看不懂,这里只采用这个保护做一个看看.5.VISO保护模块的6.默认保护+反钩子函数,去注册功能7.默认保护+VISO保护模块8.全保护。没添加注册功能PASS:代码保护的功能一直没测试成功,遗憾


cjteam 发表于 2012-7-14 23:17

本帖最后由 cjteam 于 2012-7-14 23:52 编辑

接下来脱第二个和第三个,其实他们全是一样而已,对于脱壳来说。基本没区别:
ESP定律到OEP。修复参考了是这个人的代码,很容易,对照学就可以了,可以google:ZProtect1.4-1.6 IAT 修复代码 精简版
http://www.unpack.cn/forum.php?mod=viewthread&tid=59057
申请一块空地,写上地址,二进制:60 B8 18 21 45 00 83 38 00 74 1B 8B 08 80 39 68 75 21 8B 49 01 83 F9 00 74 19 8B F8 51 E8 00 21
EC FF 89 07 8B C7 3D DC 26 45 00 75 06 61 E9 71 ED 92 FF 83 C0 04 EB CE
输入修改数据,DUMP即可,
第4,5个脱法跟第一个一样,单独加密无保护威力,或许从某种意义上,我们可以废掉这个,或者处理一下特别处的IAT,那么这二个保护也是个无用的么?大牛来解说
第6个就可以看到反钩子的威力了

cjteam 发表于 2012-7-14 22:00

本帖最后由 cjteam 于 2012-7-14 22:40 编辑

首先脱第一个。话说第一个脱壳,除了ESP定律,我在里面折腾了半天,摸的不是很清楚,希望那位大牛非ESP定律完整分析一下。
00473C20 >E8 01000000   call zp只压缩.00473C26      //OD载入,F7
00473C25    B9 871C248D   mov ecx,0x8D241C87
00473C2A    9B            wait
00473C2B    A5            movs dword ptr es:,dword ptr ds:[es>
00473C2C    F8            clc
00473C2D    FFFF            ???                                    ; 未知命令

00473C26    871C24          xchg dword ptr ss:,ebx
00473C29    8D9B A5F8FFFF   lea ebx,dword ptr ds:
00473C2F    871C24          xchg dword ptr ss:,ebx
00473C32^ E9 93F8FFFF   jmp zp只压缩.004734CA            //F4

004734CA    60            pushad
004734CB^ E9 EBFCFFFF   jmp zp只压缩.004731BB            //ESP定律
F9二次就到程序里面了。那简单,.二进制搜索55 8B EC 83 C4 F0 B8 C4 EB 44 00,一下就到了0044EDA4 ,删除分析,dump,ok程序可以运行

单步F7,曾有几个特别处
00473C6F^\0F85 E5F6FFFF   jnz zp只压缩.0047335A             //循环释放?。。
00473C75^ E9 F8F9FFFF   jmp zp只压缩.00473672             //此时EAX=00400000 上面是释放了一个PE了,7C80000也是一个PE
0047352D    66:8138 4D5A    cmp word ptr ds:,0x5A4D   //循环释放DLL
004735C9    FFD1            call ecx                     进入DLL里面了- 9D00000 也是一个PE,进入               
00A0A451            已禁止                        mov eax,dword ptr ds:            没有保护IAT的时候,这里写IAT ds:=00051736
00A0E0B8            始终                         jmp 00A1141F
00A0E0BD            始终                         call dword ptr ds:
00A0FC03            已禁止                        mov dword ptr ds:,eax            写IAT

^\E9 F194FFFF   jmp 00A0C2EF
61            popad
E9 47310000   jmp 00A0F43C
C3            retn   //OEP最后的四句话

虚拟 发表于 2012-7-15 00:24

C牛不是发了zp教程嘛建议楼主看看。。。。比较精彩。。···

cjteam 发表于 2012-7-15 00:49

{:1_931:}楼主可以试试脱第6个

genesis2000 发表于 2012-7-18 22:55

看下。新手学习下。

zzcqm 发表于 2012-7-18 23:58

菜鸟在看了一些大大的教程后也试着脱一脱……
6.默认保护+反钩子函数
到达oep就不说了,esp定律……
1、去除dll模拟
下断 bp CreateFileA,F9运行一次,看堆栈。
0012F8F8   009F1164/CALL 到 CreateFileA 来自 009F115E
0012F8FC   0012FAA8|FileName = "C:\WINDOWS\system32\kernel32.dll"
0012F900   80000000|Access = GENERIC_READ
0012F904   00000001|ShareMode = FILE_SHARE_READ
0012F908   00000000|pSecurity = NULL
0012F90C   00000003|Mode = OPEN_EXISTING
0012F910   00000080|Attributes = NORMAL
0012F914   00000000\hTemplateFile = NULL
返回的是系统dll,所以有dll模拟
下断 bp GetModuleHandleA,F9运行一次,Alt + F9 返回
009E3E68   /74 4B         je short 009E3EB5
009E3E6A   |3958 56         cmp dword ptr ds:,ebx //这里就dll模拟的次数,下硬件执行断点,取消前面的API断点。重载程序……
009E3E6D   |8B15 5C669E00   mov edx,dword ptr ds:            ; ZP默认保.00476000
009E3E73   |8D3C11          lea edi,dword ptr ds:
009E3E76   |7E 35         jle short 009E3EAD
009E3E78   |BE 38659E00   mov esi,9E6538                           ; ASCII "user32.dll"
009E3E7D   |56            push esi
009E3E7E   |57            push edi
009E3E7F   |FF35 28659E00   push dword ptr ds:
009E3E85   |E8 90E0FFFF   call 009E1F1A
009E3E8A   |83C4 0C         add esp,0C
009E3E8D   |56            push esi
009E3E8E   |A3 34659E00   mov dword ptr ds:,eax
009E3E93   |03F8            add edi,eax
009E3E95   |FF15 DC109D00   call dword ptr ds:               ; kernel32.GetModuleHandleA
009E3E9B   |50            push eax                                 ; user32.77D10000//停在这里。向上看代码……
009E3E9C   |E8 BAFBFFFF   call 009E3A5B
重载后注意下好esp定律断点……直接F9
009E3E6A    3958 56         cmp dword ptr ds:,ebx //停在这里
注意看下方信息窗口
ebx=00000000
ds:=00000009
右键修改 00000009 为 0,确定。F9,到达OEP……
2、修复IAT
IAT的修复:偶是到达oep后跟踪观察,然后写了个脚本,直接用脚本修复,菜鸟的脚本很是蹩脚……勿喷啊……
//此脚本到达oep后运行,注意部分地址机器不同可能也不一样。
var Old_esp
var cur_addr
var old_eip
mov old_esp,esp
mov old_eip,eip
mov cur_addr,00452114 //00452114是IAT的起始地址-4
fill 009E215B,1,EB //在解密IAT时这里有个3秒时间校验,跳过校验
bphws 009E2846,"x"
loop:
add cur_addr,4 //IAT 笫一个地址
cmp cur_addr,004526d8 //004526d8是IAT末尾+4
je exit
cmp ,0
je loop
mov eip,
run
mov ,eax
jmp loop
exit:
bphwc
mov esp,old_esp //还原esp,eip
mov eip,old_eip
ret



zzcqm 发表于 2012-7-19 00:05

本帖最后由 zzcqm 于 2012-7-19 00:06 编辑

第7、第8与第6思路差不多,就不写过程了,直接上脱壳后的程序吧!

cjteam 发表于 2012-7-19 10:51

本帖最后由 cjteam 于 2012-7-19 10:54 编辑

{:1_918:}呵呵,是比较简单的,没加出效果,有的人就是加出效果了,{:1_907:}

http://casgsn.ys168.com/
ZProtect 1.4.9脱壳练习遇到的疑问
ZProtect 1.4.9脱壳练习遇到的疑问二
二个就加的比我的有效果多了,楼主有兴趣可以研究下
页: [1]
查看完整版本: ZP脱壳学习8个样本 你能脱几个?