吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3754|回复: 14
收起左侧

[KeyGenMe] 小白分析的一道注册机的题

  [复制链接]
BeneficialWeb 发表于 2018-5-8 00:35
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。

本帖最后由 BeneficialWeb 于 2018-5-8 07:30 编辑

                                                                                                 新手分析第一稿,如有不足,多多谅解哈!!!!
正文开始:               
            
            先提示下算法流程,首先把输入的32位username每8位进行crc16计算,然后得到一个4个元素的数组,再对这个数组进行一些异或,+,-,/,*这些操作最后得到一个16个元素的数组,最后将这个数组每一项值作为索引在一个Table找到对应的字符,拼接起来就是最后的key
            运行keygen.exe, 看到字符串,激动;www         
                           

             搜索字符串来到这里,输入假码走起

                                                                              
                                            
              F8 单步运行,跟踪     {:1_907:}   排版 也是够水的,还在学习,希望有人能留帖·教教我,谢谢
                                    
                                                     
                                                   
                                                           
                                                                 
                                                                          
                                                                     
                                                            
                                                                                         
                               代码流程图大概也就是这样,此外  需要注意的是    16 个元素的数组,只能成功索引出   前16位注册码
还有其他 的索引值来源,自己分析            或者请看       注册机代码,




                                       
[C] 纯文本查看 复制代码
#include<iostream>
#include<string.h>
#include<Windows.h>

int main()
{
        //测试了一组username,读者可测试其他的
        char serial[] = "QWERTYUIOPQWERTYUIOPQWERTYUIOPQW";
        WORD c[5] = { 0 };
        int i, j, k;
        if (strlen(serial) == 32)
        {
                for (i = 0; i < 4; i++)
                {
                        WORD temp = 0;
                        for (j = 0; j < 8; j++)
                        {
                                temp ^= (serial[i * 8 + j] << 8);
                                for (k = 0; k < 8; k++)
                                {
                                        if (temp & 0x8000)
                                                temp = (2 * temp) ^ 0x1021;
                                        else
                                                temp *= 2;
                                }
                        }
                        c[i] = temp;
                }
//数值交换
                c[3] ^= c[1];
                c[1] ^= c[3];
                c[3] ^= c[1];
                c[0] ^= c[2];
                c[2] ^= c[0];
                c[0] ^= c[2];
                c[3] ^= c[2];
                c[2] ^= c[3];
                c[3] ^= c[2]; 
                       
                c[4] = 0x2;
                WORD v22[38];
                int v23;
                v22[0] = 16 * c[1] * c[0];
                v22[16] = (WORD)16 * ((c[2] + 1) ^ (c[0] + 1));
                v22[1] = (((unsigned __int16)c[0] + 2) % ((unsigned __int16)c[3] + 2) + 1) >> 4;
                v22[2] = (signed __int16)((((unsigned __int16)c[0] + 3) / ((unsigned __int16)c[4] + 3)) ^ 5);
                v22[4] = 16 * (c[3] ^ c[1]);
                v22[3] = ((unsigned __int16)c[1] + 1) % (unsigned __int16)c[0] + 4;
                v22[15] = (unsigned int)(((unsigned __int16)c[1] + 2) / ((unsigned __int16)c[1] + 5)) - 1;
                v22[13] = (c[1] + 99) ^ (c[1] + 6) ^ 0x79;//FFFF
                v22[5] = 16 * c[1];//0084
                v22[6] = (unsigned __int16)c[1] / (signed int)(unsigned __int16)c[2];
                v22[14] = v22[0];
                v22[7] = c[2] + 9;
                v22[8] = (c[2] + 8) ^ 5;
                v22[9] = 99;
                v22[10] = (2 * (unsigned __int16)c[2] - 8) % 10;
                v22[12] = c[0] ^ (c[3] + 6);
                v22[11] = 99 * (c[3] + 2);
                v22[18] = 0x19D1;
                v22[20] = 0x0;
                v22[22] = 0x4;
                v22[24] = 0xFCE4;
                v22[26] = 0xFDE1;
                v22[28] = 0x9744;
                v22[30] = 0xF;
                char key[35] = { 0 };
                char key1[35] = { 0 };
                char box[] = "zwAcG20l1IP=xku^";
                for (j = 0; j < 16; ++j)
                {
                        if (j % 2)
                        {
                                key[2 * j] = box[(((unsigned __int16)v22[2 * j] ^ 0x14) >> 8) % 16];
                                key1[2 * j] = box[(unsigned __int16)v22[2 * j] % 16];
                                printf("%c", key[2 * j]);
                                printf("%c", key1[2 * j]);
                        }
                        else
                        {
                                key[2 * j] = box[((signed int)(unsigned __int16)v22[2 * j] >> 8) % 16];
                                key1[2 * j] = box[(unsigned __int16)v22[2 * j] % 16];
                                printf("%c", key[2 * j]);
                                printf("%c", key1[2 * j]);
                        }
                }
                //注册码以固定3位结尾
                printf("XDD");
        }
        else
        {
                printf("长度不对哦!!!\n");
        }
        system("pause");
        return 0;
}

                由于水平较差,怕说不清楚,呵呵,就这样吧!
拜拜咯!








                          

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
cancer95 + 1 + 1 热心回复!
我叫蛋dan + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

我叫蛋dan 发表于 2018-5-8 00:50
我觉得这才叫做破解
pain5317 发表于 2018-5-8 03:44
笑口 发表于 2018-5-8 05:34
 楼主| BeneficialWeb 发表于 2018-5-8 07:31
我叫蛋dan 发表于 2018-5-8 00:50
我觉得这才叫做破解

sorry ,第一次忘记附上软件了,哈哈
gunxsword 发表于 2018-5-8 10:25
不错啊,很好的文章,感谢分享!
金谢雨 发表于 2018-5-8 10:30
我觉得这才叫做破解
jyqjyq123 发表于 2018-5-8 10:36
真正的高手呀
yaojin666666 发表于 2018-5-8 17:49
收藏,向高手学习
zngshengda 发表于 2018-5-8 18:52
真正的高手呀
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 16:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表