发布于:2017-8-3 09:58 | 154251次阅读 作者: 管理员 | 原作者: 黄国彬 | 来自: 原创
感谢PC组黄国彬分享解答过程。 首先通过 GetDlgItem函数定位到按钮事件sub_4026F0。 函数中将name和key都转换成string,之后进入到sub_403B70(verify)进行校验。 Verify函数主要流程为: 1.首先检验name的格式是否为xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx,不是则返回错误。 1.接着对name进行计算,计算结果为4个64位的整数(int64) 2.接着判断是标准还是进阶验证。 1.在标准验证中,calckey1函数将每4字节的key转换成3字节,得到一个16字节的vector,并将其转换为2个64位的整数(int64) 2.最后在check函数中,将name计算的4个整数和key计算的2个整数进行验证。 注册机编写: 1.在最后的check中,其实就是解二元二次方程,最后转化为一元二次方程。方程如下: code2 = tmp3 + (tmp2 + tmp1*tmp4)*tmp4 - code1*tmp4; (tmp2 - code1)*(tmp2 - code1) == 4 * (tmp3 - code2)*tmp1 其中tmp1234都是已知的,求code1,code2。转化后为解code1的一元二次方程,其中的deta为0,则code1只有一个解,化简后 _int64 code1 = 2 * nTmp1*nTmp4 + nTmp2; _int64 code2 = nTmp3 + (nTmp2 + nTmp1*nTmp4)*nTmp4 - code1*nTmp4; 2.得到code1,code2后,需要将其每3个字节转化为4个字节,这里生成一个映射表: 3.注意最后一个字节需要特殊处理,得到的注册码还需要加上字符串”==” 4.注册成功 |
最新评论
发表评论