欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

真过分啦!居然断网半天,害的我-----算法都有人贴了,555~~~ (1千字)

真过分啦!居然断网半天,害的我-----算法都有人贴了,555~~~ (1千字)

我算了一个
Name:  jackyspy [CCG]
Serial: lZll-V2nT-VGlW-ZZWV
写了一个注册机, 算法有人贴了, 我就不再说了.
/*
软件名称: 棋隐(Chinese Chess Learner)
在VC 6.0下通过编译
*/
#include <stdio.h>
#include <windows.h>
BYTE anti_convert(BYTE c)
{
    c-=0x30;
    if(c<=0xD)
        c=c*2+0x65;
    else if(c<=0x1E)
        c=0x5A-(BYTE)((c<<24)/0x555555+0.5);
    return c;
}
BYTE convert2char(BYTE c)
{
    if(c<26)
        c+='A';
    else if(c<52)
        c+='G';
    else if(c<62)
        c-=4;
    else if(c==62)
        c='+';
    else
        c='*';
    return c;
}
void main()
{
    BYTE result[]="@2NAME748748",serial[]="0000000000000000";
                        // 其中result中的数值可以改变, 但是一定要遵循下面的规则:
                        // 要求字符为'0'-'N'之间或者0x8B-0x94之间, 第二个数为2,后六位必须是数字
                        // 而且要大于1000000(0x186A0)
    BYTE ResortRef[]={2,8,3,7,0x0A,9,0x0F,0,6,1,0x0B,0x0D,4,0x0C,5,0x0E,0};
    int i,temp;
    for(i=1,temp=0;i<12;i++)
        temp=temp*i+result[i];
    temp=temp>=0?temp:-temp;
    temp%=0x1A;temp+=0x41;
    result[0]=(BYTE)temp;
    for(i=1;i<12;i++)
        result[i]=anti_convert(result[i]);
    for(i=0;i<4;i++)
    {
        serial[i*4]=(result[i*3]&0xFC)>>2;
        serial[i*4+1]=((result[i*3+1]&0xF0)>>4)+((result[i*3]&3)<<4);
        serial[i*4+2]=((result[i*3+1]&0x0F)<<2)+((result[i*3+2]&0xC0)>>6);
        serial[i*4+3]=result[i*3+2]&0x3F;
    }
    for(i=0;i<16;i++)
        serial[i]=convert2char(serial[i]);
    for(i=0;i<16;i++)
    {
        putchar(serial[ResortRef[i]]);
        if(i%4==3)
            putchar('-');
    }
}

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功