屏幕录像专家 爆破注册机 源码

 

#include <iostream>
#include <Windows.h>
#include <time.h>
#include <cstring>
 
using namespace std;
int main()
{
 
    char st[21] = { 0 };                        //用户名
    char jqm_a[31] = { 0 };                     //机器码
    char jqm[21] = { 0 };                       //机器码前20位
 
    cout << "请输入你的用户名:";
    cin >> st;
    cout << "请输入你的机器码:";
    cin >> jqm_a;
    int q;
    memcpy(jqm, jqm_a, 20);
    cout << "取机器码的前20位来算序列号" << jqm << endl;
 
    q = jqm[2];
    jqm[2] = jqm[18];
    jqm[18] = q;
 
    q = jqm[4];
    jqm[4] = jqm[15];
    jqm[15] = q;
 
 
    q = jqm[8];
    jqm[8] = jqm[11];
    jqm[11] = q;
    while (1)
    {
        char mb[7] = { 0 };                     //运算的出的字符串
        int eax_3;
        int edi_3 = 0;
        for (int i = 0; i < 20; i++)
        {
            eax_3 = st[i] ^ jqm[i];
            eax_3 = eax_3 * i;
            eax_3 = eax_3 + edi_3;
            edi_3 = eax_3;
        }
 
        edi_3 = edi_3 + 0x3039;
        itoa(edi_3, mb, 10);                    //mb=得到那5个秘钥字符,
        char str_z[51];                         //存放真正的字符串
 
 
        char    str[51];                //序列号
        char    str1[6] = { 0 };            //序列号后5个字符
        int     esi = 0;
        int     eax = 0;
        int     ecx = 0;
        int     edi;
        int     arg_3 = 0x2D;           //序列号长度-5
        BYTE    dl;
 
        const char* str2 = "1234567890";
 
        int edi_33 = edi_3;
        srand((unsigned int)time(0));
        while (1)
        {
            for (int i = 0; i < 5; i++)              //生成序列号前10个字符
                itoa((mb[i] + 0x14 - 9 - (1 / 2 + i)), str_z + (i * 2), 10);
 
 
            for (int i = 0; i <= 9; i++)
                str[i] = str_z[i];
            int eax_4;
            int ecx_4;
            int edx_4;
            edi_3 = edi_33;
            edi_3 = edi_3 + 0x4d44;
            eax_4 = int(edi_3 * 3.14 * 0.1594896331738427110);
 
            edi_3 = eax_4;
            ecx_4 = 0x186a0;
 
            edx_4 = eax_4 % ecx_4;
            itoa((edx_4 % 10 + 0x41) - 9 - 11 / 2 + 9, str + 10, 10);
 
            for (int i = 12; i < 50; i++)
                str[i] = str2[rand() % 10];
 
            int g;                                      //交换
            g = str[2];
            str[2] = str[38];
            str[38] = g;
 
            g = str[4];
            str[4] = str[25];
            str[25] = g;
 
            g = str[9];
            str[9] = str[31];
            str[31] = g;
 
 
 
 
 
            for (int i = 0; i <= 4; i++)
                str1[i] = str[45 + i];
            esi = 0;
            eax = 0;
            ecx = 0;
            while (1)
            {
                if (ecx == 0xB26D)
                {
                    edi = 0;
                    while (edi < arg_3)
                    {
                        ecx++;
                        dl = 0x80;
                        do {
                            BYTE ah;
                            ah = WORD(eax) / 256;
                            if (ah >= 0x80)
                            {
                                eax = eax + eax;
                                WORD x = (WORD(eax) ^ 0x1021);
                                eax = eax / 65536;
                                eax = eax * 65536;
                                eax = eax + x;
                                ecx++;
                            }
                            else
                                eax = eax + eax;
                            ecx++;
                            if (str[esi] & dl)
                            {
                                WORD x = (WORD(eax) ^ 0x1021);
                                eax = eax / 65536;
                                eax = eax * 65536;
                                eax = x + eax;
                            }
                            dl = dl / 2;
                        } while (dl != 0);
                        esi++;
                        edi++;
                    }
                }
                ecx++;
                if (ecx >= 0x186A0)
                    break;
            }
            if (WORD(eax) == atof(str1))
                break;
        }
 
 
 
 
        int g;                                          //生成第11,12个字符
        char str_1[41] = { 0 };
        for (int i = 0; i <= 40; i++)
            str_1[i] = str[i];
 
        g = str_1[2];
        str_1[2] = str_1[38];
        str_1[38] = g;
 
        g = str_1[4];
        str_1[4] = str_1[25];
        str_1[25] = g;
 
        g = str_1[9];
        str_1[9] = str_1[31];
        str_1[31] = g;
 
 
 
        char str_2[21] = { 0 };                         //产生的那20个字符
        char str_3[3] = { 0 };
        int zj = 0;
        int edx_1 = 0;
        int ebx_1 = 0;
        int eax_1 = 0;
        for (int i = 0; i < 40; i = i + 2)
        {
            ebx_1++;
            str_3[0] = str_1[i];
            str_3[1] = str_1[i + 1];
            eax_1 = atof(str_3);
            edx_1 = ebx_1;
            edx_1 = edx_1 / 2;
 
            eax_1 = eax_1 + edx_1;
            eax_1 = eax_1 + 9;
            str_2[i / 2] = eax_1;
            ebx_1++;
        }
 
 
        int zjz = 0;
        for (int i = 0; i < 19; i++)
            zjz = zjz + str_2[i];
 
        zjz = zjz % 10;
        zjz = zjz + 0x30;
 
 
 
        if (str_2[19] == zjz || str_2[19] >= 0x41)
        {
            cout << "序列号为:";
            for (int i = 0; i <= 49; i++)
                cout << str[i];
            cout << endl;
            break;
        }
 
    }
    return 0;
}

运算时间长,可见是通过逆向来的验证程序进行对比,不断爆破出正确的注册码,所以稳定性会很糟糕,看人品,一次不行多试几次。

毕竟人家软件说了,即使注册成功也会有问题,所以各位看着办吧,代码从PYG偶然发现的,吾爱破解和飘云阁这两个地方算是现在破解的主要聚集地了。

希望能有新的注册机出现......

【qq交流群:789209269】

原文地址:https://www.cnblogs.com/pta00/p/13591840.html