DiskGenius Pro 4.2.0.100注册算法简析 下载本文

激活码(Activation Key)实际上是对激活时提交信息进行变换、加密处理后的结果。这是激活服务器后台干的事,程序解密激活码后对那些信息逐一进行对比,没有问题激活就成功了。

激活码可视为一张证书,分好几种类型。比如是否限制了特定版本,若无则通用证书适用于其他版本;还有试用证书,可指定过期日期。大概还有一种,决定硬件信息的比对来源,是加密锁还是API,没详细看代码,无法肯定。

图中uncheck两个Encrypted的Checkbox会显示mid和diskinfo1各自的明文。

激活成功后,程序会写激活文件Options.ini,用于重启验证;同时会复制一份到dos文件夹给DOS版使用。格式基本上是这样子:

1. [license]

2. user = \

3. email = \

4. regcode = \5. key =

\\

6. [LicenseInfo] 7. Show = \

复制代码

这里注册码(regcode)目前看来是“有效的”;激活码(key)是我手工敲的,显然无效,不能通过验证。但已足够让程序去掉Title里的“未注册”字样和“关于”对话框的“立即注册”按钮:

貌视已注册成功,此为“暗桩”之一。

五.注册码兮,注册码

将key的内容改回注册机(DiskGenius Keygen)里\Key\的内容,这下能通过重启验证,应该是“完美激活”了吧?

No, No, No..., Something wrong! 试图恢复大于64KB的文件时失败,错误类型表明还是“未注册”! 看来还有玄机。重新审查激活码验证通过后的代码,发现确实有调用对注册码再次进行验证,当前这个regcode没有通过!

在仔细研究了那段代码后,我才恍然大悟,它还真是跟MSFT的CDKEY学来的,注册码由三部分组成:序列号(SerialNumber) + 签名(Signature) + 校验位(Hash)。签名由序列号按签名算法得到,校验位为根据前两部分计算出的结果。

同时也搞清楚了哪几个关键标志DWORDs的值应该是什么才表明它是真正注册成功了。

回到第一节的\Generator for DiskGenius\页面,\I\解决了Hash的问题,接下来\II\解决签名的问题。先随机生成一个RegCode,得到序列号部分,根据它的逆算法得到签名部分,最后计算校验位部分。

这样整个DiskGenius的注册过程分为两个步骤:1) 用HTML页面产生有效的注册码;2) 用注册机生成激活码。Webster只是分析问题时的一个工具,不再需要了。 再试一试恢复大于64KB的文件,这次当然不会再有问题:

最后,感谢DiskGenius的作者,很好的工具,希望它更加强大!我从分析它代码的过程中得到乐趣。 谢谢您阅读此文!谬误之处,请批评指正。