只会挂一档 发表于 2017-6-2 11:00:46

精装友情通讯录算法逆向与注册机实现

精装友情通讯录注册算法分析:1.        注册码由三部分组成。2. 注册码的第一部分是由订单号对0x6d取余3. 注册码第二部分:        先将订单号与0XB25F1异或,将异或后的结果转换成十进制字符串后,在些字符串后面连接上两个字符。        而这两个字符分别由字符串的第0位,第1位和第2位,第3位计算而来。记为szTemp.算法如下        DWORD dwTemp2 = dwNum ^ 0xB25F1;
        TCHAR szTemp = {0};
        _sntprintf(szTemp, 20, "%d", dwTemp2);
        DWORD dwKey2Len = strlen(szTemp);
        TCHAR szTemp1 = {0};
        TCHAR szTemp2 = {0};
        _snprintf(szTemp1, 20, "%c", (szTemp + szTemp) % 5 + 0x34);
        _snprintf(szTemp2, 20, "%c", (szTemp + szTemp) % 5 + 0x33);
        strcat(szTemp, szTemp1);
        strcat(szTemp, szTemp2);
将上面的结果szTemp转换成十进制数字后,与0xDDFB7687进行异或,作为此步结果的一部分。然后根据异或后的结果算出4个不同的字符,然后将这四个字符插入到异或后的字符串中。结果记为szKey2.算法代码如下。        DWORD dwTemp3 = 0;
        dwTemp3 = atoi(szTemp);
        TCHAR szKey2 = {0};
        _snprintf(szKey2, 20, "%u", dwTemp3 ^ 0xDDFB7687);
        TCHAR sz1 = {0};
        TCHAR sz2 = {0};
        TCHAR sz3 = {0};
        TCHAR sz4 = {0};
        _snprintf(sz1, 2, "%c", (szKey2 + szKey2) % 5 + 0x66);
        _snprintf(sz2, 2, "%c", (szKey2 + szKey2) % 5 + 0x75);
        _snprintf(sz3, 2, "%c", (szKey2 + szKey2) % 5 + 0x7a);
        _snprintf(sz4, 2, "%c", (szKey2 + szKey2 + szKey2) % 5 + 0x69);
        strinsert(szKey2, sz1, 7);
        strinsert(szKey2, sz4, 3);
        strinsert(szKey2, sz2, 5);
        strinsert(szKey2, sz3, 9);4.        //生成注册码,注册码= 注册码第一部分 + 注册码第二部分 + “!”        TCHAR szResult = {0};
        memcpy(szResult, szKey1, strlen(szKey1));
        strcat(szResult, szKey2);
        strcat(szResult, _T("!"));逆向过程 :逆向的过程中使用的定单号是123456注册机代码与分析过程与udd文件下载地址:http://download.csdn.net/detail/xiaocaiju/7522099
页: [1]
查看完整版本: 精装友情通讯录算法逆向与注册机实现