北京理工大学信息安全与对抗竞赛----crackme02分析

不知道为什么 ,最近睡眠不好,晚上睡不着,早上醒得早。看吧,今天早上又被鸟吵醒了。

 

醒了,看着无事来破解下这个,在测试过程中发现,这个crackme有个搞笑的地方。

就是注册码只要是1234,无论你输入或者不输入用户名,都会提示成功(当然有例外,这也是本题的所在),到官方一提交,夷,错了,我勒个去,居然没看题目就做了。

原来是要求用户名必须是2012,得,你牛。

看我怎么搞定你!

当然,首先还是找到按钮事件。

 1 00401004   .  55            push    ebp
 2 00401005   .  8BEC          mov     ebp, esp
 3 00401007   .  81EC 10000000 sub     esp, 10
 4 0040100D   >  6A FF         push    -1
 5 0040100F   .  6A 08         push    8
 6 00401011   .  68 11000116   push    16010011
 7 00401016   .  68 01000152   push    52010001
 8 0040101B   .  E8 D7010000   call    004011F7                         ;  获取注册码
 9 00401020   .  83C4 10       add     esp, 10
10 00401023   .  8945 FC       mov     dword ptr [ebp-4], eax
11 00401026   .  68 04000080   push    80000004
12 0040102B   .  6A 00         push    0
13 0040102D   .  8B45 FC       mov     eax, dword ptr [ebp-4]
14 00401030   .  85C0          test    eax, eax                         ;  注册码输入是否为空
15 00401032   .  75 05         jnz     short 00401039
16 00401034   .  B8 509B4600   mov     eax, 00469B50
17 00401039   >  50            push    eax
18 0040103A   .  68 01000000   push    1
19 0040103F   .  BB 60124000   mov     ebx, 00401260
20 00401044   .  E8 A8010000   call    004011F1                         ;  eax为注册码的十六进制形式
21 00401049   .  83C4 10       add     esp, 10
22 0040104C   .  8945 F8       mov     dword ptr [ebp-8], eax           ;  注册码放入XXX
23 0040104F   .  8B5D FC       mov     ebx, dword ptr [ebp-4]
24 00401052   .  85DB          test    ebx, ebx
25 00401054   .  74 09         je      short 0040105F
26 00401056   .  53            push    ebx
27 00401057   .  E8 8F010000   call    004011EB
28 0040105C   .  83C4 04       add     esp, 4
29 0040105F   >  E8 AF000000   call    00401113                         ;  关键call,其实就是读取用户名的值
30 00401064   .  3945 F8       cmp     dword ptr [ebp-8], eax           ;  注册码与XXXXX进行比较
31 00401067   .  0F85 40000000 jnz     004010AD                         ;  关键跳
32 0040106D   .  68 04000080   push    80000004

来看看关键call中的一部分。

1 0040118F  |.  8945 FC       mov     dword ptr [ebp-4], eax
2 00401192  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
3 00401195  |.  E9 00000000   jmp     0040119A
4 0040119A  |>  8BE5          mov     esp, ebp

如果你仔细看,你会觉得真他妈脑残。

就像看a=b;   b=a;一样。而且还jmp到下一句。

反正总的来说,关键call就是把用户名,也就是2012放入堆栈中,等着对比就可以了。

posted @ 2012-05-20 08:28  r3call  阅读(553)  评论(1编辑  收藏  举报