首页
社区
课程
招聘
[下载]一个很烂的Crackme,前辈莫笑,适合新手玩
发表于: 2010-4-25 17:21 11841

[下载]一个很烂的Crackme,前辈莫笑,适合新手玩

2010-4-25 17:21
11841
写给同学练习的,思路很乱,想到什么就写什么,前辈莫笑
还请多多指点。

没有将字符控制在可输入的范围内,

存在某些字符是输入不了的,

仅仅给大家分析,不求结果
---------------------------------------------------------------------

非常的感谢各位热心的朋友指出CrackMe的错误,在此我重发了一个,

修正了已经知道的错误,这是我第一次发CrackMe,以后会努力的~~

如果发现有什么BUG的话可以在次反映,小弟无尽感激~~~~~

赋上算法,写的有点乱,大家见笑了~~~~

--------------------------------------------------------------------------


希望有人能把整个分析过程贴上

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (33)
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
Crackme1.rar

不会追码小爆一下。 
上传的附件:
2010-4-25 23:26
0
雪    币: 196
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
二楼能帖上你的分析过程吗?
2010-4-26 00:07
0
雪    币: 306
活跃值: (85)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
4
小菜,爆破- =
2010-4-26 00:51
0
雪    币: 306
活跃值: (85)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
5
哈哈,爆破,小菜..
上传的附件:
2010-4-26 00:52
0
雪    币: 435
活跃值: (1282)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
6
00401926 . BE C0C04200 mov esi, 0042C0C0 ; ASCII "zouzhiyong-zouzhiyong"
0040192B . 8D4424 68 lea eax, dword ptr [esp+68]
0040192F > 8A10 mov dl, byte ptr [eax]
00401931 . 8A1E mov bl, byte ptr [esi]
00401933 . 8ACA mov cl, dl
00401935 . 3AD3 cmp dl, bl
00401937 . 75 1E jnz short 00401957
00401939 . 84C9 test cl, cl
0040193B . 74 16 je short 00401953
0040193D . 8A50 01 mov dl, byte ptr [eax+1]
00401940 . 8A5E 01 mov bl, byte ptr [esi+1]
00401943 . 8ACA mov cl, dl
00401945 . 3AD3 cmp dl, bl
00401947 . 75 0E jnz short 00401957
00401949 . 83C0 02 add eax, 2
0040194C . 83C6 02 add esi, 2
0040194F . 84C9 test cl, cl
00401951 .^ 75 DC jnz short 0040192F
00401953 > 33C0 xor eax, eax
00401955 . EB 05 jmp short 0040195C
00401957 > 1BC0 sbb eax, eax
00401959 . 83D8 FF sbb eax, -1
0040195C > 85C0 test eax, eax
0040195E 74 07 je short 00401967 ; 关键跳
00401960 . 68 D8C04200 push 0042C0D8
00401965 . EB 05 jmp short 0040196C
00401967 > 68 3CC14200 push 0042C13C
0040196C > 68 EC030000 push 3EC
00401971 . 8BCF mov ecx, edi
00401973 . E8 08900100 call 0041A980 ; SetDlgItemText


esi常量字符串,eax栈里的一个返回地址
这两个怎么可能相等?
不知道是不是我太菜
2010-4-26 01:11
0
雪    币: 196
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
回复楼上的,你所找到的并不是算法的关键,请从注册失败那里开始分析
2010-4-26 07:37
0
雪    币: 435
活跃值: (1282)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
8
还是算了吧,易语言真是受不了
2010-4-26 09:27
0
雪    币: 196
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
楼上搞错了,这是mfc写的
2010-4-26 09:52
0
雪    币: 435
活跃值: (1282)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
10
mfc不都是按序号导入的么
2010-4-26 10:23
0
雪    币: 116
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
你理解错了,下面的指令 esi保存的是指向“zouzhiyong-zouzhiyong”的指针,而不是字符串,
mov     dl, byte ptr [eax]和 mov     bl, byte ptr [esi]是取出指向的地址空间的数值的第一位

00401926   .  BE C0C04200   mov     esi, 0042C0C0                    ;  ASCII "zouzhiyong-zouzhiyong"
0040192B   .  8D4424 68     lea     eax, dword ptr [esp+68]
0040192F   >  8A10          mov     dl, byte ptr [eax]
00401931   .  8A1E          mov     bl, byte ptr [esi]
2010-4-26 10:31
0
雪    币: 196
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
楼上正解,但是用于比较的并不是真正的的注册码,跟入就知道了
2010-4-26 10:36
0
雪    币: 435
活跃值: (1282)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
13
见楼下xxxxxx
2010-4-26 10:40
0
雪    币: 435
活跃值: (1282)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
14
name随便填
serial为29个@,即@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
思路很乱,lz应该在理一理
显示恭喜,已经注册了
但相应鼠标移动消息时,还会有一个验证
这里就是我说的那个地方了,会和一个返回地址比较
是bug吧
00401926   .  BE C0C04200   mov     esi, 0042C0C0                    ;  ASCII "zouzhiyong-zouzhiyong"
0040192B   .  8D4424 68     lea     eax, dword ptr [esp+68]
0040192F   >  8A10          mov     dl, byte ptr [eax]
00401931   .  8A1E          mov     bl, byte ptr [esi]
00401933   .  8ACA          mov     cl, dl
00401935   .  3AD3          cmp     dl, bl
00401937   .  75 1E         jnz     short 00401957
00401939   .  84C9          test    cl, cl
0040193B   .  74 16         je      short 00401953
0040193D   .  8A50 01       mov     dl, byte ptr [eax+1]
00401940   .  8A5E 01       mov     bl, byte ptr [esi+1]
00401943   .  8ACA          mov     cl, dl
00401945   .  3AD3          cmp     dl, bl
00401947   .  75 0E         jnz     short 00401957
00401949   .  83C0 02       add     eax, 2
0040194C   .  83C6 02       add     esi, 2
0040194F   .  84C9          test    cl, cl
00401951   .^ 75 DC         jnz     short 0040192F


eax这时候的值是12FB2C
看堆栈
0012FB2C   77D3E577  返回到 USER32.DefDlgProcA

上传的附件:
2010-4-26 11:22
0
雪    币: 111
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
爆破要简单些,逆向算法有点复杂,Name好像要大于8个字符,校验的时候Name没用
2010-4-26 12:35
0
雪    币: 103
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
来学习了,呵呵
2010-4-26 14:49
0
雪    币: 196
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
回复上两楼的,感谢你对本CrackMe的测试并指出错误,

~~~~~~~~~~
本来想重写,但是没有太多时间,就修改了原来的
2010-4-26 18:42
0
雪    币: 435
活跃值: (1282)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
18
name,17个冒号
:::::::::::::::::
serial,17个@
@@@@@@@@@@@@@@@@@
上传的附件:
2010-4-26 20:03
0
雪    币: 196
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
哈!

楼上得到的是最简单的一个组合了~~~~~~~
2010-4-26 21:19
0
雪    币: 435
活跃值: (1282)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
20
这个cm的思路比较乱,你应该先给出你的几组可用的
或者你应该保证有一个通用的,构造的name或serial的注册算法
2010-4-26 22:34
0
雪    币: 196
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
恩,多谢赐教,下次改进
2010-4-27 01:28
0
雪    币: 136
活跃值: (1475)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
22
楼主源码可否发下?让我等小菜观摩下。
2010-5-1 11:15
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
从简单的开始学习 先爆破
2010-5-1 11:19
0
雪    币: 196
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
算法已经贴上
2010-5-1 12:18
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
int __thiscall sub_4016B0(void *this, const char *a2, char *a3)
{
  int v3; // ebp@1
  const char *v4; // edi@2
  unsigned int v5; // ecx@4
  signed int i; // esi@4
  int v7; // eax@5
  int v8; // eax@6
  int v10; // [sp+10h] [bp-10h]@1

  v3 = (int)this;
  v10 = (int)this;
  if ( strlen(a2) - 1 >= strlen(a3) - 1 )
  {
     strcpy(a3, a2);
     v4 = a2;
  }
  else
  {
     strcpy((char *)a2, a3);
     v4 = a3;
  }
  v5 = strlen(v4) - 1;
  for ( i = 0; i < (signed int)v5; ++i )
  {
     v7 = a3[i];
     if ( (signed int)v5 <= 10 )
        v8 = (v5 + v7) ^ 3;
     else
        v8 = v7 + v5 - 10;
     if ( ((*(&a3[i] + a2 - a3) - 48) ^ 4) + 1 + *(&a3[i] + a2 - a3) == v8 + 2 || i >= 21 || i == 11 )
     {
        v3 = v10;
     }
     else
     {
        v3 = v10;
        *(_BYTE *)(v10 + 92 + i) ^= *(_BYTE *)(v10 + 93 + i);
     }
  }
  if ( !strcmp((const char *)(v3 + 92), "zouzhiyong-zouzhiyong") )
     sub_41A980(1000, "恭喜!已经注册了 ^_^");
  if ( sub_416FD1(0x5Cu) )
     sub_401870(0);
  sub_4171BD((LPCSTR)0x81, v3);
  return sub_41AB17(5);
}
2010-5-8 15:10
0
游客
登录 | 注册 方可回帖
返回
//