首先先声明下我只是一个业余爱好者,大牛略过!
这几天受人所托破解一个zprotect 1.4.9保护的软件,因之前从没接触过,便上网搜索下资料,发现hyperchem,casgsn,ximo等大牛在这个壳上都有很精彩的分析,特别是hyperchem,简直让我叹为观止。后面在国外网站上发现LCF-AT对这个壳也有很精彩的表现,我这篇文章并不是我的个人发现(部分脚本内容来自网上),只是对自己最近学习Zprotect的一个总结,希望对某些人有帮助。
测试环境:ollydbg 1.10,winxp sp3,ZProtect[1][1].1.4.9.0.Preview.2.RETAIL.INCL_KEYGEN-FFF(看雪论坛上下载),odbgscript 1.78.3

目的:一份软件,只要拥有一组正确的KEY,即让软件成功运行并脱壳。
测试条件:用ZProtect.1.4.9.0.Preview.2 随便对一个notepad.exe和一个crackme.exe进行默认加密,但是"试用控制"-->"软件需要密钥才能运行" 项是勾选的。如图:


目前假设你手上已有一组正确的机器码和KEY(有用户名的也是同样道理),即可用本文提供的脚本进行脱壳。

假设已有一个可用的机器码和KEY:
机器码:AAAA-BBBB-CCCC-DDDD
序列号:B131FA844E0E9A7F32810DD67B9C4DC086EB

脚本原理流程:
1,寻找OEP断点。这个原理很简单,所谓的ESP平衡定律就是了。
2,对机器码进行补丁。zprotect用DeviceIoControl函数获取机器码相关,只要对该函数设置断点即可。本人的脚本来自LCF-AT,但是原来的有些问题,个人对其中某些部分进行了更改。当提示需输入机器号的前8位时,本例中,输入AAAABBBB,后8位即为CCCCDDDD。
3,修复IAT。hyperchem兄对此问题已经解释得很详细了,我实在是找不出新内容补充的,本版本中IAT的起始和结束部分仍然需要手动填入。

对1.4.X其他版本本人没有经过测试,如有不通过请自己更改脚本,或通知我进行修正(并不保证一定有时间修正),谢谢!

附件为所测试的软件和脚本,最后,再度声明个人只是兴趣爱好。
脚本运行步骤:

步骤:
1,跑脚本.
2,到出现输入注册码窗口时,在输入注册码的窗口中输入正确的KEY,注意,这个KEY是别人机器码对应的KEY(如果是本机正确的KEY那还玩什么啊,直接注册就好了)。
3,点注册。
4,出现让你输入这个KEY对应的机器号的前8位,记得把机器号中的"-"号去掉,按要求输入。
5,出现让你输入这个KEY对应的机器号的后8位,记得把机器号中的"-"号去掉,按要求输入。
6,等到脚本暂停时,表明HWID已经PATCH完成,此时你要是按F9,那么软件可直接跑起,但未脱壳。若要让脚本继续跑,则你需获得IAT的起始和结束地址,如搜索"FF 15"或"FF 25"特征码获得。
7,直接更改脚本中的IAT起始和结束地址,我在脚本中以有注释!
8,按空格键跑完脚本。
9,LOADPE 完整转存,修复IAT,则脱壳成功。

上传的附件 test_example.rar
ZProtect HWID & Unpack V1.0.txt