〇〇木一 发表于 2014-11-4 12:14

【吾爱破解2014CrackMe大赛】【第十四组】

ss为"解锁成功"字串sa={0x1A,0x0C,0x2D,0x1C,0x0F,0x0D,0x3E,0x01};
sb={0x0D,0x3A,0x2D,0x21,0x11,0x14,0x08,0x25}

s1为key前8位(相当于用户名)
s2为8*2+1位字串

其中
s1+atoi(s2,2)+atoi(s2)*0x22+sa+sb=ss   (i=1 to 8)

keygen源码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

unsigned char sa={0x1A,0x0C,0x2D,0x1C,0x0F,0x0D,0x3E,0x01};
unsigned char sb={0x0D,0x3A,0x2D,0x21,0x11,0x14,0x08,0x25};
char *ss="解锁成功";//{0xBD,0xE2,0xCB,0xF8,0xB3,0xC9,0xB9,0xA6};
char s1;
unsigned char s2;
char out;
int main()
{
      memset(s1,0,50);
      memset(s2,0,17);
      printf("请输入八位字串:\n");
      scanf("%s",s1);
      int len=strlen(s1);
      for(int i=len;i<8;i++)
      {
                s1='0';
      }
      s1=0;
      printf("16组key:\n");
      for(i=0;i<16;i++)
      {
                memset(out,0,50);
                strcat(out,s1);
                strcat(out,"-");
                char a;
                for(int j=0;j<8;j++)
                {
                        unsigned char p=ss-sa-sb-s1-i*0x22;
                        sprintf(a,"%02X",p);
                        strcat(out,a);
                }
                sprintf(a,"%1X",i);
                strcat(out,a);
                printf("%s\n",out);
      }
      system("pause");
      return 0;
}


keygen:

Kido 发表于 2014-11-6 20:49

最终得分:194
评委评价:有效

mi426878 发表于 2016-3-6 07:53

不错,好好学习了

mi426878 发表于 2016-3-6 22:43

代码很长,慢慢学习啦

joshdexipi 发表于 2016-3-19 09:50

看到这么长的代码,我头都大了

84939212 发表于 2016-3-25 23:57

学习学习

lhpmain 发表于 2016-4-13 13:12

不错 的解决思路,得好好学习了。

hewap 发表于 2016-4-15 22:47

向楼主学习中

84583728 发表于 2016-4-21 13:07

wincorry 发表于 2016-4-28 11:49

不错,好好学习了
页: [1] 2 3
查看完整版本: 【吾爱破解2014CrackMe大赛】【第十四组】