首页
社区
课程
招聘
[原创]这是我用C写的第二CrackMe
发表于: 2011-4-30 10:34 8799

[原创]这是我用C写的第二CrackMe

2011-4-30 10:34
8799
1。都一个CrackMe是明码比较没有什么很难;
2. 第二CrackMe非明天比较的。
3.这个CrackMe也是没有有加壳,没有做防爆。因为我只是想和大家一起研究算法。也就什么也没有加了~
呵呵
4.这个CrackMe可以用任意的用户名进行注册,不像第一个CrackMe哪样限定了几个字符。

我说说我CrackMe思路:
1. 把用户名x进加密得到字符s。
2.把加密后在与用户名逻辑异或运算F;
3.在把X S F进行运算得到密文。
4.把注册码也做了个加密
5.最后两个加密的密文进行比较~
呵呵说的这么复杂~~
只认真看看就很容易写算法注册机了~~~~。

在此感谢一些朋友他们调试时发现指出我的地些错误~
因此做了两次更新~~呵呵大家可以放心的的玩玩这个CH bug已经修复
呵呵

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (18)
雪    币: 291
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
很抱歉,俺只会爆...
估计你要是做防爆破的...路还很远~
上传的附件:
2011-4-30 10:49
0
雪    币: 508
活跃值: (202)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
3
防爆~~~~~~~
现行思路是~~~~
重启验证~~~~~~~~~
可以挡住大部分人~~~~~~~~
下次加防爆处理了~~
哈哈
2011-4-30 11:22
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
你CM真是太有味道了 用户名和 注册都是分开计算的  再拿到一起做比较  这样能成功嘛?
2011-4-30 17:43
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
你CM真是太有味道了 用户名和 注册都是分开计算的  再拿到一起做比较  这样能成功嘛?
2011-4-30 17:43
0
雪    币: 306
活跃值: (85)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
6
004011FF  |.  52            push    edx
00401200  |.  50            push    eax
00401201  |.  E8 FAFEFFFF   call    00401100   //貌似程序的问题,永远不能eax,得到1?
00401206  |.  83C4 08       add     esp, 8
00401209  |.  83F8 01       cmp     eax, 1
2011-4-30 18:33
0
雪    币: 1149
活跃值: (888)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
7
c
3
。。。。
过于迂回 ,
容易逆重点...
2011-4-30 18:35
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
楼上的我佩服哈哈
2011-4-30 19:04
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
难道我见鬼了晕死
上传的附件:
2011-4-30 19:28
0
雪    币: 508
活跃值: (202)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
10
检查了一下程序发现一个问题比较函数有点问题:
int cmp( char *x, char *y)
{
           int i;
           while ( *x != '\0' && *y != '\0')
           {
                   if ( *x == *y)
                       i = 1;
                   else
                  {
                       i = 0;
                       break;
                  }
                   x++;
                   y++;                                            //检查发现y++掉了,没有发现~加上
             }                                                       //y++就没有问题了
         return i;                     
}
呵呵不好意思~~~~~~~~
2011-4-30 19:30
0
雪    币: 508
活跃值: (202)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
11
刚用mmmruth兄弟的用户名注册了下
OK
上传的附件:
  • 1.jpg (18.83kb,203次下载)
2011-4-30 19:59
0
雪    币: 105
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
先把反汇编的贴上,在OD里跟,我头都是晕的
[COLOR="Red"]主干[/COLOR]
0040118E  |.  8D9424 940000>lea     edx, dword ptr [esp+94]
00401195  |.  8D4424 6C     lea     eax, dword ptr [esp+6C]
00401199  |.  52            push    edx
0040119A  |.  50            push    eax
[COLOR="DarkOrange"]0040119B  |.  E8 60FEFFFF   call    00401000                         ;  处理后的字符保存在0012FF34中  返回用户名长度[/COLOR]
004011A0  |.  8D8C24 C40000>lea     ecx, dword ptr [esp+C4]          ;  0012FF5C
004011A7  |.  8D9424 9C0000>lea     edx, dword ptr [esp+9C]          ;  处理的字符
004011AE  |.  51            push    ecx
004011AF  |.  8D4424 78     lea     eax, dword ptr [esp+78]          ;  取用户名
004011B3  |.  52            push    edx
004011B4  |.  50            push    eax
[COLOR="DarkOrange"]004011B5  |.  E8 96FEFFFF   call    00401050                         ;  第二次处理字符保存在0012FF5C[/COLOR]
004011BA  |.  8D4C24 58     lea     ecx, dword ptr [esp+58]          ;  0012FEE4  真用户名
004011BE  |.  8D9424 D00000>lea     edx, dword ptr [esp+D0]          ;  0012FF5C
004011C5  |.  51            push    ecx
004011C6  |.  8D8424 AC0000>lea     eax, dword ptr [esp+AC]          ;  0012FF34
004011CD  |.  52            push    edx
004011CE  |.  8D8C24 880000>lea     ecx, dword ptr [esp+88]          ;  用户名
004011D5  |.  50            push    eax
004011D6  |.  51            push    ecx
[COLOR="DarkOrange"]004011D7  |.  E8 A4FEFFFF   call    00401080[/COLOR]
004011DC  |.  8D7C24 40     lea     edi, dword ptr [esp+40]
004011E0  |.  83C9 FF       or      ecx, FFFFFFFF
004011E3  |.  33C0          xor     eax, eax
004011E5  |.  83C4 3C       add     esp, 3C
004011E8  |.  F2:AE         repne   scas byte ptr es:[edi]
004011EA  |.  F7D1          not     ecx
004011EC  |.  49            dec     ecx
004011ED  |.  5F            pop     edi
[CODE]对注册码的操作

004011EE  |.  85C9          test    ecx, ecx                         ;  判断注册码是否空
004011F0  |.  7E 0F         jle     short 00401201
004011F2  |>  8A5404 00     /mov     dl, byte ptr [esp+eax]          ;  取注册码字符
004011F6  |.  FEC2          |inc     dl                              ;  字符依次加1
004011F8  |.  885404 00     |mov     byte ptr [esp+eax], dl
004011FC  |.  40            |inc     eax
004011FD  |.  3BC1          |cmp     eax, ecx
004011FF  |.^ 7C F1         \jl      short 004011F2
   
00401201  |>  8D5424 00     lea     edx, dword ptr [esp]
00401205  |.  8D4424 28     lea     eax, dword ptr [esp+28]
00401209  |.  52            push    edx
0040120A  |.  50            push    eax                              ;  0012FEE4  真用户名
0040120B  |.  E8 F0FEFFFF   call    00401100                         ;  对处理后的用户名和注册码判断 相等则eax返回1 成功
00401210  |.  83C4 08       add     esp, 8
00401213  |.  83F8 01       cmp     eax, 1
00401216  |.  75 19         jnz     short 00401231                      跳与不跳你懂得
00401218  |.  68 40804000   push    00408040                         ;  你输入的是真码:
[/CODE]
橙色标注,清单如下
00401000  /$  53            push    ebx
00401001  |.  57            push    edi
00401002  |.  8B7C24 0C     mov     edi, dword ptr [esp+C]           ;  取用户名
00401006  |.  33DB          xor     ebx, ebx
00401008  |.  8A07          mov     al, byte ptr [edi]
0040100A  |.  84C0          test    al, al
0040100C  |.  74 3D         je      short 0040104B
0040100E  |.  56            push    esi
0040100F  |.  8B7424 14     mov     esi, dword ptr [esp+14]          ;  取第二个参数 0012FF34
00401013  |>  0FBEC0        /movsx   eax, al
00401016  |.  8BC8          |mov     ecx, eax
00401018  |.  81E1 0F000080 |and     ecx, 8000000F
0040101E  |.  79 05         |jns     short 00401025
00401020  |.  49            |dec     ecx
00401021  |.  83C9 F0       |or      ecx, FFFFFFF0
00401024  |.  41            |inc     ecx
00401025  |>  99            |cdq
00401026  |.  83E2 0F       |and     edx, 0F
00401029  |.  03C2          |add     eax, edx
0040102B  |.  C0E1 04       |shl     cl, 4
0040102E  |.  C1F8 04       |sar     eax, 4
00401031  |.  02C8          |add     cl, al
00401033  |.  880E          |mov     byte ptr [esi], cl
00401035  |.  79 04         |jns     short 0040103B
00401037  |.  F6D9          |neg     cl
00401039  |.  880E          |mov     byte ptr [esi], cl
0040103B  |>  8A47 01       |mov     al, byte ptr [edi+1]
0040103E  |.  47            |inc     edi
0040103F  |.  46            |inc     esi
00401040  |.  43            |inc     ebx
00401041  |.  84C0          |test    al, al
00401043  |.^ 75 CE         \jnz     short 00401013
00401045  |.  5E            pop     esi
00401046  |.  8BC3          mov     eax, ebx
00401048  |.  5F            pop     edi
00401049  |.  5B            pop     ebx
0040104A  |.  C3            retn
0040104B  |>  8BC3          mov     eax, ebx
0040104D  |.  5F            pop     edi
0040104E  |.  5B            pop     ebx
0040104F  \.  C3            retn

00401050  /$  57            push    edi
00401051  |.  8B7C24 08     mov     edi, dword ptr [esp+8]           ;  取用户名
00401055  |.  8A0F          mov     cl, byte ptr [edi]
00401057  |.  84C9          test    cl, cl
00401059  |.  74 20         je      short 0040107B
0040105B  |.  8B5424 10     mov     edx, dword ptr [esp+10]          ;  0012FF5C
0040105F  |.  56            push    esi
00401060  |.  8B7424 10     mov     esi, dword ptr [esp+10]          ;  0012FF34
00401064  |>  8A06          /mov     al, byte ptr [esi]
00401066  |.  32C1          |xor     al, cl                          ;  处理用户名和原用户名依次异或
00401068  |.  8802          |mov     byte ptr [edx], al              ;  存入地址0012FF5C  成为新用户名
0040106A  |.  7F 04         |jg      short 00401070
0040106C  |.  04 60         |add     al, 60
0040106E  |.  8802          |mov     byte ptr [edx], al
00401070  |>  8A4F 01       |mov     cl, byte ptr [edi+1]
00401073  |.  47            |inc     edi
00401074  |.  46            |inc     esi
00401075  |.  42            |inc     edx
00401076  |.  84C9          |test    cl, cl
00401078  |.^ 75 EA         \jnz     short 00401064
0040107A  |.  5E            pop     esi
0040107B  |>  5F            pop     edi
0040107C  \.  C3            retn

00401080  /$  55            push    ebp
00401081  |.  8B6C24 08     mov     ebp, dword ptr [esp+8]           ;  ebp指原用户名
00401085  |.  8A4D 00       mov     cl, byte ptr [ebp]
00401088  |.  84C9          test    cl, cl
0040108A  |.  74 6C         je      short 004010F8
0040108C  |.  8B5424 14     mov     edx, dword ptr [esp+14]          ;  0012FEE4
00401090  |.  53            push    ebx
00401091  |.  56            push    esi
00401092  |.  8B7424 18     mov     esi, dword ptr [esp+18]          ;  0012FF5C
00401096  |.  57            push    edi
00401097  |.  8B7C24 18     mov     edi, dword ptr [esp+18]          ;  0012FF34
0040109B  |.  74 0E         je      short 004010AB
0040109D  |>  8A07          mov     al, byte ptr [edi]
0040109F  |.  C74424 14 010>mov     dword ptr [esp+14], 1
004010A7  |.  84C0          test    al, al
004010A9  |.  75 08         jnz     short 004010B3
004010AB  |>  C74424 14 000>mov     dword ptr [esp+14], 0
004010B3  |>  803F 00       cmp     byte ptr [edi], 0
004010B6  |.  75 09         jnz     short 004010C1
004010B8  |.  803E 00       cmp     byte ptr [esi], 0
004010BB  |.  75 04         jnz     short 004010C1
004010BD  |.  33DB          xor     ebx, ebx
004010BF  |.  EB 05         jmp     short 004010C6
004010C1  |>  BB 01000000   mov     ebx, 1
004010C6  |>  8A06          mov     al, byte ptr [esi]
004010C8  |.  32C1          xor     al, cl
004010CA  |.  32C3          xor     al, bl
004010CC  |.  8A5C24 14     mov     bl, byte ptr [esp+14]
004010D0  |.  32C3          xor     al, bl
004010D2  |.  3C 30         cmp     al, 30
004010D4  |.  8802          mov     byte ptr [edx], al
004010D6  |.  7D 04         jge     short 004010DC
004010D8  |.  34 45         xor     al, 45
004010DA  |.  8802          mov     byte ptr [edx], al
004010DC  |>  8A02          mov     al, byte ptr [edx]
004010DE  |.  3C 5B         cmp     al, 5B
004010E0  |.  7C 08         jl      short 004010EA
004010E2  |.  3C 5F         cmp     al, 5F
004010E4  |.  7F 04         jg      short 004010EA
004010E6  |.  04 08         add     al, 8
004010E8  |.  8802          mov     byte ptr [edx], al
004010EA  |>  8A4D 01       mov     cl, byte ptr [ebp+1]
004010ED  |.  45            inc     ebp
004010EE  |.  47            inc     edi
004010EF  |.  46            inc     esi
004010F0  |.  42            inc     edx
004010F1  |.  84C9          test    cl, cl
004010F3  |.^ 75 A8         jnz     short 0040109D
004010F5  |.  5F            pop     edi
004010F6  |.  5E            pop     esi
004010F7  |.  5B            pop     ebx
004010F8  |>  5D            pop     ebp
004010F9  \.  C3            retn

00401100  /$  56            push    esi
00401101  |.  8B7424 08     mov     esi, dword ptr [esp+8]           ;  取真用户名
00401105  |.  57            push    edi
00401106  |.  8A0E          mov     cl, byte ptr [esi]
00401108  |.  84C9          test    cl, cl
0040110A  |.  74 21         je      short 0040112D
0040110C  |.  8B7C24 10     mov     edi, dword ptr [esp+10]          ;  取处理后的注册码
00401110  |.  8B4424 0C     mov     eax, dword ptr [esp+C]
00401114  |>  8A17          /mov     dl, byte ptr [edi]
00401116  |.  84D2          |test    dl, dl
00401118  |.  74 17         |je      short 00401131
0040111A  |.  33C0          |xor     eax, eax
0040111C  |.  3ACA          |cmp     cl, dl
0040111E  |.  8A4E 01       |mov     cl, byte ptr [esi+1]
00401121  |.  0F94C0        |sete    al
00401124  |.  46            |inc     esi
00401125  |.  47            |inc     edi
00401126  |.  84C9          |test    cl, cl
00401128  |.^ 75 EA         \jnz     short 00401114
0040112A  |.  5F            pop     edi
0040112B  |.  5E            pop     esi
0040112C  |.  C3            retn
0040112D  |>  8B4424 0C     mov     eax, dword ptr [esp+C]
00401131  |>  5F            pop     edi
00401132  |.  5E            pop     esi
00401133  \.  C3            retn
2011-5-1 10:45
0
雪    币: 86
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
如果从用户名推出注册码的话比较简单,从注册码推出的用户名的话,在用户名与注册码长度一样的话且一一对应的情况下,一个注册码大概可以对应1024个用户名(也不知道算对没,求答案),  还有只要最后一个注册码能与同一位置的用户名对应的话,也能通过, 像 11 楼 情况 输入 一个 n  也能注册成功,输入123a 也可以
2011-5-1 16:45
0
雪    币: 105
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
感谢楼主耐心提供帮助
int Encrypt_X(char *user, char *X)
{
	int eax, ecx, edx, cnt = 0;
	unsigned long long inter;
	char cl;
	
	while(*user)
	{
		eax = (int)*user;
		ecx = eax;
		
		if((ecx &= 0x8000000F) < 0)
		{
			ecx--;
			ecx |= 0xFFFFFFF0;
			ecx++;
		}
		
		inter = ecx;
		inter >>= 32;
		edx = (int)inter;
 		edx &= 0xF;
 		
 		eax += edx;
 		
		cl = (char)ecx;
		cl <<= 4;
		eax >>= 4;
		cl += (char)eax;
		
		if(cl < 0)
			cl = -cl;
		
		*X = cl;
		
		++X;
		++user;
		++cnt;
	}
	
	return cnt;
}

void Encrypt_S(char *user, char *X, char *S)
{
	char cl, al;
	while(*user)
	{
		cl = *user;
		al = *X;
		al ^= cl;
		*S = (al > 0)? al : (al + 0x60);

			
		++user;
		++X;
		++S;
	}
}

void Calculate(char *user, char *X, char *S, char *inter_key)
{
	char cl, al, bl;
	int flag;
	
	while(*user)
	{
		cl = *user;
		al = *X;
		flag = 1;
		if(!al)
			flag = 0;
		
		bl = 1;
		if((!*X) && (!*S))
			bl = 0;
		
		al = *S;
		al ^= cl;
		al ^= bl;
		bl = (char)flag;
		al ^= bl;  
//		al = (cl && *X) ^ (*X || *S) ^ (cl ^ *S);
		
		if(al < 0x30)
			al ^= 0x45;
		*inter_key = al;
		if((al >= 0x5B) && (al <= 0x5F))
		{
			al += 8;
			*inter_key = al;
		}
		
		++user;
		++X;
		++S;
		++inter_key;
	}
}

void KeyGen(char *inter_key, char *key)
{
	while(*inter_key)
	{
		*key = *inter_key - 1;
		++inter_key;
		++key;
	}
}
2011-5-1 17:09
0
雪    币: 967
活跃值: (1138)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
15
跟踪到最后一次运算
得到一个key
把这个key的每一位-1
就得到注册码
2011-5-1 17:49
0
雪    币: 1149
活跃值: (888)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
16
我以为你故意这么写的,让别人忽略...看来 我是想错了....
2011-5-1 18:17
0
雪    币: 508
活跃值: (202)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
17
[QUOTE=loongboy;953872]先把反汇编的贴上,在OD里跟,我头都是晕的

主干
0040118E  |.  8D9424 940000>lea     edx, dword ptr [esp+94]
00401195  |.  8D4424 6C     lea     eax, dword ptr [esp+6C]
0040...[/QUOTE]

我把用户名的小写的明文和密文给大家看看
呵呵只有两明文的密文是相同的~~~~~~~
因此一个用户名不可能有多个不同的注册码~啊
上传的附件:
  • 1.jpg (13.00kb,49次下载)
2011-5-1 18:31
0
雪    币: 77
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
赞一个....
2011-5-4 16:25
0
雪    币: 210
活跃值: (56)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
密码和注册名长度有关
GOOD
2011-5-6 22:21
0
游客
登录 | 注册 方可回帖
返回
//