破解狼人 发表于 2010-10-31 22:54:52

ZProtect文件校验

貌似过ZProtect的文件校验比较简单,下面以1.4.4.0 Pro为例(1.4.9.0 Preview2也可以)。

加了ZProtect壳的程序如果被修改,运行将提示“当前程序文件已经被破坏,请重新安装软件!”,然后退出程序,这个就是ZProtect的文件校验。

1、目标文件名为Notepad.zp.exe,OD打开之,bp MapViewOfFile在MapViewOfFile下个断点,F9运行,中断后F2取消断点,然后Atl + F9返回。

2、现在eax指向的内存里就是Notepad.zp.exe文件自身的内容,hr eax在eax指向的内存下硬件访问断点,F9运行,中断在下面:00953C37   56                   push    esi
00953C38   57                   push    edi
00953C39   8DA424 00000000      lea   esp, dword ptr
00953C40   0FB63A               movzx   edi, byte ptr
00953C43   8BF0               mov   esi, eax    ; ★ 中断在这里
00953C45   81E6 FF000000      and   esi, 0FF
00953C4B   33F7               xor   esi, edi
00953C4D   C1E8 08            shr   eax, 8
00953C50   3304B5 AC989600      xor   eax, dword ptr
00953C57   83E9 01            sub   ecx, 1
00953C5A   83C2 01            add   edx, 1
00953C5D   85C9               test    ecx, ecx
00953C5F   ^ 75 DF                jnz   short 00953C40
00953C61   5F                   pop   edi
00953C62   5E                   pop   esi
00953C63   F7D0               not   eax
00953C65   C3                   ret这里就是计算校验码的地方,这里会被调用两次,得到两个值,最后xor两个值得到最终的文件校验码。
删除硬件断点,然后在00953C65处按F4,然后F8。

3、反复按F7,直到出现cmp指令,大致过程如下(已去除花指令):0096F592   8B4C24 24            mov   ecx, dword ptr
00970BF1   8B5424 10            mov   edx, dword ptr
0097294B   33C8               xor   ecx, eax    ; ★ 前面计算得的两个值xor得到最终的校验码
0096C9A9   3B4A 40            cmp   ecx, dword ptr
; ★ ecx=文件现在的校验码,dword ptr =文件原始的校验码dword ptr 指向的内存是文件里的固定地址,可以直接修改的,将dword ptr 内存里的值改为ecx的值,然后复制到可执行文件就可以了。
页: [1]
查看完整版本: ZProtect文件校验