yangand 发表于 2012-7-14 11:48

手脱带注册框的VMP+ZPROTECT双层壳

       首先,我要说一下一些人总喜欢问某个软件是什么壳,我觉得这很没意思。PEID能查不出来的,一般都是加密壳,就算告诉你了,一般也没什么傻瓜工具可以对付。对于一个PEID查不出来的壳,最明智的选择是看一下他是不是自己有能力能脱的壳,自己能脱的壳,它的一些入口特征,和区段特征,我想一看也能猜出个一二来。如果是自己不能脱的壳,完全没必要去管他是什么壳,就直接反他归为未知壳一类。要破解就直接打补丁吧。不要为了破一个软件而去学某一种壳。
       脱壳我也是菜鸟,脱本实验品,也只是借用一下XIMO大牛有关VMP壳的一些方法,还有就是CEKTOP大牛的ZPROTECT壳的方法。
       判断一下是不是VMP+ZPROTECT的双层壳。ZPROTECT的特征一是有注册经典的ZPROTEC框,一个是第一个区段名textbss.VMP最名显的是区段特征,一般都会有VMP0,VMP1,VMP2这样的区段,有时候会改成别的XXX0,XXX1,XXX2。0,1,2这样的序号是不变的,至少是有0,1两个区段,有的还有0,1,2,3.这样一般不会变,VMP加壳的时候只能设置XXX,不会分别设置几个区段的名。加好之后,一般也不会改。VMP有自校验,改了区段名,VMP就会报错。
       看一下本试验品的区段
      
第一个区段textbss是ZP的特征,XXXX1,XXXX0,XXXX2,XXXX3是VMP壳的区段特征。

下面开始脱壳,截入实验品,先用FKVMP或者ZEUS找到VMP的RETN特征地址,本实例的是031D79F1。
bp VirtualProtect+13下好断点,F9一直运行,直到堆栈窗口出现如下图的PAGE_READONLY,这时取消断点,ALT+F9返回

再在031D79F1处下个断点,F9运行到这里,再ALT+M,在第二个区段F2下个断点,F9运行,这时就停在了ZPROTECT壳的入口处了。
01C2911F    E8 02000000   call 小光音频.01C29126
01C29124    35 D4870C24   xor eax,240C87D4
01C29129    8D89 52060000   lea ecx,dword ptr ds:
01C2912F    870C24          xchg dword ptr ss:,ecx
01C29132    E9 3F060000   jmp 小光音频.01C29776
01C29137    6F            outs dx,dword ptr es:
01C29138    46            inc esi
01C29139    E9 CA000000   jmp 小光音频.01C29208
下面就可以按照ZPROTECT的套路来对付了。本来我是想用无KEY解码的,但是不知道为什么,这个实验品,无KEY解码不起作用。还好我有一组可用机器码和KEY。
E2A4-747F-388D-323B机器码
84C4DC742C767B1ED5DC6404B2B4027BDD60E57C58C8567EC50276CBBC69A22B010A   KEY
先F7几步来到01C29777
01C29776    60            pushad
01C29777    E9 A0010000   jmp 小光音频.01C2991C
在PUSHAD下面的JMP处下好ESP断点,准备让程序停到OEP处。
再下个bp DeviceIoControl断点,F9运行(一般是出现注册框的前一次反回),本实验品是运行两次ALT+F9返回。
0031F4E6    85C0            test eax,eax
0031F4E8    74 14         je short 0031F4FE
0031F4EA    8B5424 30       mov edx,dword ptr ss:
0031F4EE    8B4424 34       mov eax,dword ptr ss:
0031F4F2    8995 80000000   mov dword ptr ss:,edx
0031F4F8    8985 84000000   mov dword ptr ss:,eax
0031F4FE    57            push edi
0031F4FF    FF15 5CA03000   call dword ptr ds:               ; kernel32.CloseHandle
0031F505    33C0            xor eax,eax
0031F507    5F            pop edi
0031F508    5D            pop ebp
0031F509    81C4 A0020000   add esp,2A0
0031F50F    C2 0400         retn 4
在0031F50F处F4运行到RETN,再F8
再搜命令mov edx,dword ptr ss:,搜到的第二个处下个F2断点,让程序运行到这里,停在这里的时候,在数据窗口中跟随,改成HEX显示方式。这里显示的就是本机的机器码了,再在这里把他改成有KEY的机器码。注意格式,机器码是E2A4-747F-388D-323B,改的值是A4E27F74388D3B32(很明显的规律,自己找一下,也就是一个WORD一个WORD读的)。改好之后,运行。出现注册框之后,输入对应注册码之后,点确定。程序还会停在刚才改机器码的地方,再同样的改一次后运行,程序就会提示注册成功,然后退出。

再要按照上面的步骤重新做一次,不同的是,改一次机器码之后,程序就会停在ESP定很的硬件断点上了,F7走几步就能到达OEP了,这时,用OD的插件脱壳(脱壳时不修复IAT),本程序就能在本机上运行了。
本实验品有点特殊,它在加ZP时候,可能没有加密IAT,然后把IAT留给了VMP去加密。结果脱出来的不能跨平台使用。这样XIMO大牛的ZEUS神器也不起用了。还希望XIMO大牛能指点一下怎么弄一下跨平台。
如果是一般的VMP+ZP,到DUMP之后,用ZP FIXER干掉,应该是能跨平台的。
本帖没技术含量,要脱好ZPROTECT,建议多看一下CEKTOP大牛的文章。

实验品下载地址:http://115.com/file/dp4qawdx#

Sound 发表于 2012-7-14 12:16

本帖最后由 Sound 于 2012-7-13 19:17 编辑

ZP和VMP加壳

需要兼容

所以ZP都是默认加壳IAT没加密很正常

因为后续需要VMP来加密

文章虽然很短 切入要点 还算不错

LoongKing 发表于 2012-7-14 12:14

膜拜,脱了VMP,再脱ZP.......{:1_931:}

statlove 发表于 2012-7-14 11:54

根本不明白 根本不会脱壳 但是 只知道第一步载入od ~~~~~~ - -!

Chief 发表于 2012-7-14 12:24

很好,手打那么多字。
欢迎出破文。

yangand 发表于 2012-7-14 12:22

Sound 发表于 2012-7-14 12:16 static/image/common/back.gif
ZP和VMP加壳

需要兼容


这个的IAT没被ZP加密,找不到ZP加密的特征。都是用JMP DWORD来代替的。用UIF修复,总是提示偏移错误,我倒是希望他是ZP默认加壳的.ZP加密IAT,VMP就不会再加密了,对付ZP要容易得多。以前我自己加过ZP和VMP的双层壳,可以用无KEY解码搞,这个实验品却不行。这个ZP就这两点很特别。
ZP,VMP双层壳,ZP是不能默认加壳的,必须把文件校验去掉地能加得上。VMP是不可能去处理ZP的文件校验的

Kido 发表于 2012-7-14 12:25

膜拜杨安师傅。

1354669803 发表于 2012-7-14 12:26

想知道用FKVMP插件的具体操作 还想问下E2A4-747F-388D-323B机器码
84C4DC742C767B1ED5DC6404B2B4027BDD60E57C58C8567EC50276CBBC69A22B010A   这些的作用...

54854845 发表于 2012-7-14 12:28

新手路过啥都看不明白~~~学习中

yangand 发表于 2012-7-14 12:30

1354669803 发表于 2012-7-14 12:26 static/image/common/back.gif
想知道用FKVMP插件的具体操作 还想问下E2A4-747F-388D-323B机器码
84C4DC742C767B1ED5DC6404B2B4027BDD6 ...

如果安装了FKVMP插件,在代码窗口,直接点右键,选择START FKVMP,然后打开记录窗口,里面就会一些信息,找到RETN的地址就可以了。具体请看一下KISSY的继续和谐VMP
要有一组机器码和注册码,也就是把自己电脑上的机器码改成别人注册过的机器码,这样那个注册码就能在自己电脑上使用了
页: [1] 2 3 4
查看完整版本: 手脱带注册框的VMP+ZPROTECT双层壳