飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4909|回复: 8

[C/C++] Power Copy 1.92 注册机源码

  [复制链接]
  • TA的每日心情
    无聊
    2024-1-15 22:57
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-12-19 10:21:30 | 显示全部楼层 |阅读模式
    本帖最后由 zaas 于 2010-12-19 10:36 编辑

    软件本身是vc的程序,注册过程都是字符串操作。
    本来用delphi写过一个。但delphi的字符串起始位置为1,c字符串起始位置为0,因此写起来要去填补这个位置差,写的很累。
    学了这么多天的c,昨天改用c改写了一遍,果然要容易不少。。。

    算法描述:
    注册码去掉“-”为15位,设为str:0123456789ABCDE;
    str[6]和str[8]除以5求余分别得到前后6位中的一位,设为char_a和char_b
    前后6位分别去掉char_a和char_b得到StrA和StrB
    软件要成功注册要满足的条件:
    1。StrA在密码表中的位置和经过运算得出的值等于char_a;
    2。StrB在密码表中的位置和经过运算得出的值等于char_b;
    3。StrA和StrB中字符在密码表中的位置经浮点运算的和加上str[7]的位置=0x798000,用数学公式表示为:
    a*18H^4+b*18H^3+c*18H^2+d*18H^1+e*18H^0+x*18H^4+y*18H^3+z*18H^2+u*18H^1+v*18H^0+s=18H^5
    条件1,2比较容易,条件三初看起来没有头绪,但实际分析一下,以上公式可以化简为:
    (a+x)*51000+(b+y)*3600+(c+z)*240+(d+u)*18+(e+v+s)=798000
    再次化简就很容易理解了,条件三等价于:
    a+x=17
    b+y=17
    c+7=17
    d+u=17
    e+v+s=18
    依据这个写出注册机
    1. #include <stdio.h>
    2. #include <time.h>
    3. #include <stdlib.h>
    4. void main()
    5. {
    6.         char ref_str[]="BCDFGHJKMPQRTVWXY2346789";
    7.         int position[16]={0};
    8.         int rnd_a,rnd_b;       
    9.         int i,k,m;
    10.         printf("----------------------\n");
    11.         printf("Power Copy 1.92 KeyGen\n");
    12.         printf("code by zaas ,20101216\n");
    13.         printf("----------------------\n");
    14.         while(1)
    15.         {
    16.                 char code[]="111111111111111";
    17.                 int result_a=0,result_b=0;
    18.                 srand((unsigned) time(0));
    19.                 rnd_a=rand()%24;
    20.                 code[6]=ref_str[rnd_a];        //第7位
    21.                 rnd_b=rand()%24;
    22.                 code[8]=ref_str[rnd_b];        //第9位
    23.                 for (i=0;i<4;i++)                //1-5,11-15位在密码表中的坐标
    24.                 {
    25.                         *(position+i)=rand()%22;
    26.                         *(position+14-i)=23-*(position+i);
    27.                         result_a += *(position+i);
    28.                         result_b += *(position+14-i);
    29.                 }
    30.                 position[4]=rand()%8+1;
    31.                 result_a +=position[4];
    32.                 position[10]=rand()%8+1;
    33.                 result_b +=position[10];
    34.                 position[7]=24-position[4]-position[10];//9,5,11位的坐标之和等于24
    35.                 code[7]=ref_str[position[7]];        //第8位
    36.                 i=rnd_a%5;
    37.                 k=14-rnd_b%5;
    38.                 result_a=(24-result_a%24)%24;        //前插入位的坐标
    39.                 result_b=23-result_b%24;        //后插入位的坐标
    40.                 code[i]=ref_str[result_a];        //前插入位
    41.                 code[k]=ref_str[result_b];        //后插入位
    42.                 k=0;
    43.                 for (m=0;m<5;m++)        //前6位的排序
    44.                 {
    45.                         if (code[m] !=0x31)        k=1;
    46.                         *(code+m+k)=ref_str[*(position+m)];       
    47.                 }
    48.                 k=0;
    49.                 for (m=14;m>9;m--)        //后6位的排序,逆序
    50.                 {
    51.                         if (code[m] !=0x31)        k=1;
    52.                         *(code+m-k)=ref_str[*(position+m)];       
    53.                 }
    54.                 for (i=0;i<15;i++)        //输出
    55.                 {
    56.                         if (!(i%5) && i) printf("-");
    57.                         printf("%c",*(code+i));
    58.                 }
    59.                 printf("\n");
    60.                 printf("----------------------\n");
    61.                 printf("Want another one?[Y/N]\n");
    62.                 char redo;
    63.                 scanf("%c",&redo);
    64.                 getchar();
    65.                 printf("----------------------\n");
    66.                 if (redo !='y' && redo != 'Y')
    67.                 {
    68.                         printf("Bye~good luck.........\n");
    69.                         break;
    70.                 }
    71.         }
    72. }
    复制代码
    Snap1.gif
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2019-3-12 17:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-12-19 10:53:26 | 显示全部楼层
    很给力,学习了!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-12-19 10:56:53 | 显示全部楼层
    zaas,你真厉害,以后要向你学习破解了,
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-3-7 15:25
  • 签到天数: 442 天

    [LV.9]以坛为家II

    发表于 2010-12-21 19:25:26 | 显示全部楼层
    水平真高,算法都分析出来了./:good
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2021-5-4 13:47
  • 签到天数: 41 天

    [LV.5]常住居民I

    发表于 2010-12-22 19:13:07 | 显示全部楼层
    z大大,支持原创。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-12-23 12:08:58 | 显示全部楼层
    thanks you good try
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-12-24 09:22:14 | 显示全部楼层
    支持原创
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    10 小时前
  • 签到天数: 1434 天

    [LV.10]以坛为家III

    发表于 2010-12-24 10:26:23 | 显示全部楼层
    楼主太给力了,感谢了,学习
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2011-2-23 08:40:33 | 显示全部楼层

                 

    唉,没抢到沙发沙发。。。












    燃文
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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