首页
社区
课程
招聘
[原创]aCaFeeL's CrackMe V5(正式版) -> [CrackMe V5 Final]最新下载
发表于: 2007-11-25 15:31 8409

[原创]aCaFeeL's CrackMe V5(正式版) -> [CrackMe V5 Final]最新下载

2007-11-25 15:31
8409
aCaFeeL's CrackMe V5(正式版) -> [CrackMe V5 Final]最新下载

这是我的v5正式版本,剧情仍然是继承了前传版的精髓,不过既然是正式版本,肯定会更有玩头了!但我估计最后关的BOSS比较难搞定,呵呵 :)

(正式版)下载:

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这个,嘿嘿。。。
2007-11-25 15:39
0
雪    币: 29214
活跃值: (7719)
能力值: ( LV15,RANK:3306 )
在线值:
发帖
回帖
粉丝
3
支持正版
2007-11-25 15:54
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
纯顶一下,楼下的继续努力
2007-11-25 19:51
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
强暴了~呵呵~不知道怎么插图~
上传的附件:
  • 1.jpg (20.14kb,178次下载)
2007-11-25 20:38
0
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
6
用心制作,支持一下  
2007-11-25 21:56
0
雪    币: 29214
活跃值: (7719)
能力值: ( LV15,RANK:3306 )
在线值:
发帖
回帖
粉丝
7
坐着等Key..
上传的附件:
2007-11-26 00:27
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
这个Key你是穷举得到的吗?
2007-11-26 14:38
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
好漂亮的界面
2007-11-26 17:44
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
key有何用?不影响结果,难道key意味着完美破解?
费解,费解
这是用户名得到的92D864BD,其他都不贴了,变化不大
2007-11-26 21:42
0
雪    币: 259
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
11
分析了一个晚上,还是没结果,很是郁闷,

谁告诉我最终结果哦

raojianbo    推出:aCaFeeL:|12345678|Jnlgj_vm|55CF3845|    为啥是错的呢,
2007-11-27 02:00
0
雪    币: 212
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
和我之前一样,其实还有一个地方校验的!

004BB4FC    E8 D75AF7FF     CALL BC2B8_.00430FD8   F7进去

00431005  |. /74 10         JE SHORT BC2B8_.00431017   把这个地方修改成JMP就可以了。
2007-11-27 02:33
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
这个CM写的真的很好,界面很酷!
上传的附件:
  • 3.GIF (9.80kb,129次下载)
2007-11-28 06:00
0
雪    币: 452
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
14
等待whatday的“鸡鸡”源代码的出现
2009-5-14 12:02
0
雪    币: 115
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
#include<stdio.h>
#include<string.h>

int int2char(int num){
        if(num<0xa)
                num+=0x30;
        else
                num+=0x37;
        return num;
}

int char2int(int num){
        if(num<'A')
                num-=0x30;
        else
                num-=0x37;
        return num;
}

/*字符串变形*/
char * str2str(char * str, int keyFlg){
        char *str1="IlikeYou";
        char *str2="12315160";
        char *str3="WoAiZhangLiangYing!";
        char *str4="6143614665654c21";
        char str5[20];
        char buffer[30];
        char buffer1[20];
        char result[20];
        int i, len, esi, flg;

        //反序
        len=strlen(str);
        for(i=0; i<len; i++)
                str5[i]=str[len-1-i];
        str5[len]='\0';

        memset(buffer, 0x00, sizeof(buffer));
        memset(buffer1, 0x00, sizeof(buffer1));
        memset(result, 0x00, sizeof(result));
       
        //计算1
        flg=len%2;
        for(i=0, esi=0x80; i<len; i++){
                esi=((str5[i]+esi)%0xff)^str3[i];
                if(i%2==flg)
                        sprintf(buffer,"%s%X%X", buffer,int2char((esi&0xf0)/0x10), int2char(esi&0xf));
                else
                        sprintf(buffer,"%s%X", buffer, esi);
        }
        strcat(buffer, str4);

        //计算KEY 用于还原截取前的字符串
        if(keyFlg==2)
                return buffer;

        //截取
        buffer[16]='\0';
               
        //反序
        for(i=0; i<8; i++)
                sprintf(buffer1,"%s%c%c", buffer1, buffer[14-i*2], buffer[15-i*2]);

        //取得计算2以前的字符串 用于计算KEY
        if(keyFlg==1)
                return buffer1;

        //计算注册码(计算2)
                for(i=0; i<8; i++){
                        esi=((char2int(buffer1[i*2])*0x10+char2int(buffer1[i*2+1])+esi)%0xff)^0x2B;
                        if(esi<0x10&&keyFlg==0)
                                sprintf(result,"%s0%X", result, esi);
                        else
                                sprintf(result,"%s%X", result, esi);
                }
       
        //当用于计算用户名时
        if(keyFlg==3)
                result[8]='\0';

        return result;
}

/*
KEY的推导过程
1     2     3    4     5    6     7                        输入key
7     6     5    4     3    2     1                        反序
E0  37 38  EC  34 38  21  33 42  0D                        计算1后的结果
E0  37 38  EC  34 38  21  33                                截取
33  21 38  34  EC 38  37  E0                                反序
6B  A7 F4   2  C5 D6  25  2D                                计算2后的结果
                           C5 D6  25  2D                                最后结果
                          
                   33 4D  AA  BA                                需要的结果
                               
                                                                                           逆计算2
                   18 66  81  91                                穷举法
                          
                   02 33  4D  AA                                
                          
                   16 33  34  E6                                根据算法2可以得
33  21 38  34  16 33  34  E6                                加上原来前面一截

E6   34 33   16    34 38    21    33  42                反序                       

                                                                                             逆计算1
E6    43     16             48     21      3B                  根据计算1可得
B1    2C     57      21     7B      53                        穷举法
31    45     14      B      33      32          根据计算1可得
                                               
31    45     14      B      33      32   ??                由于最后一位截取了所以随便写
??    32         33      B      14      45   31                反序
*/
//生成KEY
int doKey(char * key){
        int num1[7]={0x33, 0x4D, 0xAA, 0xBA};
        int num2[6];
        int num3[6];
        char key1[20];
        char key2[20];
        char keyTmp[10];
        char *str1="WoAiZhangLiangYing!";
        int n, i, esi, tmp;

        memset(key2, 0x00, sizeof(key2));

        //判断输入KEY是否可逆
        strcpy(key1, str2str(key, 0));
        for(n=0; n<4; n++)
                if(key1[n*2]=='0')
                        break;
        if(n==4)
                return -1;

        //得出XOR结果数 0x18 0x66  0x81  0x91
        for(n=0; n<4; n++)
                for(i=0; i<255; i++)
                        if((i^0x2b)==num1[n]){
                                num2[n]=i;
                                break;
                        }
       
        //计算2逆向
        //算出要减去的数
        for(n=0; n<3; n++)
                num1[3-n]=num1[2-n];
        num1[0]=char2int(key1[6])*0x10+char2int(key1[7]);

        //计算结果存为字符串
        for(n=0; n<4; n++){
                tmp=(num2[n]+0xff-num1[n])%0xff;
                keyTmp[n*2]=int2char(tmp/0x10);
                keyTmp[n*2+1]=int2char(tmp&0xf);
        }

        //取得计算2以前的字符串
        strcpy(key1, str2str(key, 1));
       
        //组合成新的字符串
        for(n=0; n<4; n++){
                key1[8+n*2]=keyTmp[n*2];
                key1[9+n*2]=keyTmp[n*2+1];
        }
   
        //反序
        for(i=0; i<8; i++)
                sprintf(key2,"%s%c%c", key2, key1[14-i*2], key1[15-i*2]);

       
        //取得计算1后的字符串
        strcpy(key1, str2str(key, 2));

        //还原截取前 得到新字符串
        key2[16]=key1[16];
        key2[17]=key1[17];
        key2[18]='\0';

        //计算1逆向
        for(n=0, i=0; n<6; n++)
                if(n%2==0){
                        key1[n*2]=key2[i];
                        key1[n*2+1]=key2[i+1];
                        i+=2;
                }else{
                        key1[n*2]=char2int(key2[i])*0x10+char2int(key2[i+1]);
                        key1[n*2+1]=char2int(key2[i+2])*0x10+char2int(key2[i+3]);
                        i+=4;
                }
        key1[n*2]='\0';

        //把字符串转换为数字
        for(n=0; n<6; n++)
                num1[n]=char2int(key1[n*2])*0x10+char2int(key1[n*2+1]);

    //得出XOR结果数
        for(n=0; n<6; n++)
                for(i=0; i<255; i++)
                        if((i^str1[n])==num1[n]){
                                num2[n]=i;
                                break;
                        }
       
        //相减 得到新的数
        for(n=0, esi=0x80; n<6; n++){
                num3[n]=(num2[n]+0xff-esi)%0xff;
                esi=num1[n];
        }

        //反序
        for(n=1; n<=6; n++)
                num1[n]=num3[6-n];
        num1[0]=key[0];
       
        //生成KEY返回
        memset(key, 0x00, sizeof(key));
        for(n=0; n<7; n++)
                sprintf(key, "%s%c", key, num1[n]);

    return 0;
}

int main(){
        char *str1="IlikeYou";
        char *str2="12315160";
        char *str3="WoAiZhangLiangYing!";
        char *str4="6143614665654c21";
        char *str5="334DAABA";
        char str6[10];
        char key[20];
        char name[20];
        char result[10];
        int ebx;

        /*根据注册码第2部分计算出第3部分注册码*/
        for(ebx=0; ebx<8; ebx++){
                if(ebx!=3&&ebx!=7)
                        result[ebx]=str1[ebx]+str2[ebx]-0x30;
                else
                        result[ebx]=str1[ebx]+0x30-str2[ebx];
        }
        result[ebx]='\0';
       
        //计算注册码第5部分后半段
        for(ebx=0; ebx<8; ebx++)
                str6[ebx]=str5[ebx]+7;
        str6[ebx]='\0';

        printf("请输入用户名:");
        scanf("%s", name);
        printf("请输入7位初始化KEY(可以输入woshini):");
        scanf("%s", key);

        //计算KEY
        while(doKey(key)==-1){
                printf("输入的初始化KEY不可逆!\n\n请输入7位初始化KEY(可输入woshini):");
                scanf("%s", key);
        }

        //注册码第1部分为aCaFeeL:
        //注册码第4部分为用户名变形得出
        //注册码第5部分为前半段334DAABA
        //注册码第5部分前半段 和  后半段之间的一个字符可以随便填没做验证 这里填的&
        printf("注册码:aCaFeeL:|%s|%s|%s|%s&%s\nKEY:%s\n", str2, result, str2str(name, 3), str5, str6, key);
       
        getch();
        return 0;
}
2009-5-28 18:28
0
雪    币: 452
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
16
whatday,你太厉害了,膜拜&学习。。。
争取尽快将你的源代码看明白哈~~~~!
牛人~~
2009-5-31 11:47
0
游客
登录 | 注册 方可回帖
返回
//