码迷,mamicode.com
首页 > 其他好文 > 详细

Bxm做的第一个CrackMe

时间:2016-02-28 12:38:16      阅读:367      评论:0      收藏:0      [点我收藏+]

标签:

系统 : Windows xp

程序 : Bxm_CrackMe1

程序下载地址 :http://pan.baidu.com/s/1pK0a0xt

要求 : 分析算法

使用工具 :OD

可在看雪论坛中查找关于此程序的讨论:传送门

 

OD载入程序,利用插件查看字串表,双击“破解成功”的字串进入关键算法:

00402406  |.  50            push    eax                              ; /src
00402407  |.  8D45 D0       lea     eax, dword ptr [ebp-30]          ; |
0040240A  |.  50            push    eax                              ; |dest
0040240B  |.  E8 24EDFFFF   call    <jmp.&MSVCRTD.strcpy>            ; \strcpy
00402410  |.  83C4 08       add     esp, 8
00402413  |.  8D4D D0       lea     ecx, dword ptr [ebp-30]          ;  取出字串地址
00402416  |.  51            push    ecx                              ; /s
00402417  |.  E8 1EEDFFFF   call    <jmp.&MSVCRTD.strlen>            ; \strlen
0040241C  |.  83C4 04       add     esp, 4
0040241F  |.  8945 E8       mov     dword ptr [ebp-18], eax          ;  保存长度
00402422  |.  C745 EC 00000>mov     dword ptr [ebp-14], 0            ;  取出一段内存置零
00402429  |.  EB 09         jmp     short 00402434
0040242B  |>  8B55 EC       /mov     edx, dword ptr [ebp-14]
0040242E  |.  83C2 01       |add     edx, 1
00402431  |.  8955 EC       |mov     dword ptr [ebp-14], edx         ;  循环变量自增
00402434  |>  8B45 EC        mov     eax, dword ptr [ebp-14]
00402437  |.  3B45 E8       |cmp     eax, dword ptr [ebp-18]         ;  迭代字串完毕则跳转
0040243A  |.  7D 12         |jge     short 0040244E
0040243C  |.  8B4D EC       |mov     ecx, dword ptr [ebp-14]
0040243F  |.  0FBE540D D0   |movsx   edx, byte ptr [ebp+ecx-30]      ;  取出字符
00402444  |.  8B45 F8       |mov     eax, dword ptr [ebp-8]
00402447  |.  03C2          |add     eax, edx                        ;  累加
00402449  |.  8945 F8       |mov     dword ptr [ebp-8], eax          ;  保存结果
0040244C  |.^ EB DD         \jmp     short 0040242B
0040244E  |>  8B4D F8       mov     ecx, dword ptr [ebp-8]
00402451  |.  F7D9          neg     ecx                              ;  对结果进行求补运算
00402453  |.  8B55 F8       mov     edx, dword ptr [ebp-8]
00402456  |.  0355 E8       add     edx, dword ptr [ebp-18]          ;  结果加上用户名字串的长度
00402459  |.  0FAFCA        imul    ecx, edx                         ;  相乘
0040245C  |.  894D F4       mov     dword ptr [ebp-C], ecx           ;  保存结果
0040245F  |.  8B4D FC       mov     ecx, dword ptr [ebp-4]
00402462  |.  83C1 64       add     ecx, 64
00402465  |.  E8 2AFBFFFF   call    <jmp.&MFC42D.#880>
0040246A  |.  50            push    eax                              ; /src
0040246B  |.  8D45 B8       lea     eax, dword ptr [ebp-48]          ; |
0040246E  |.  50            push    eax                              ; |dest
0040246F  |.  E8 C0ECFFFF   call    <jmp.&MSVCRTD.strcpy>            ; \strcpy
00402474  |.  83C4 08       add     esp, 8
00402477  |.  C745 B0 01000>mov     dword ptr [ebp-50], 1
0040247E  |.  8D4D B8       lea     ecx, dword ptr [ebp-48]
00402481  |.  51            push    ecx                              ; /s
00402482  |.  E8 B3ECFFFF   call    <jmp.&MSVCRTD.strlen>            ; \strlen
00402487  |.  83C4 04       add     esp, 4
0040248A  |.  83E8 01       sub     eax, 1                           ;  长度-1
0040248D  |.  8945 B4       mov     dword ptr [ebp-4C], eax          ;  保存
00402490  |.  EB 09         jmp     short 0040249B
00402492  |>  8B55 B4       /mov     edx, dword ptr [ebp-4C]
00402495  |.  83EA 01       |sub     edx, 1                          ;  循环变量自减
00402498  |.  8955 B4       |mov     dword ptr [ebp-4C], edx
0040249B  |>  837D B4 00     cmp     dword ptr [ebp-4C], 0           ;  迭代完毕则跳转
0040249F  |.  7C 22         |jl      short 004024C3
004024A1  |.  8B45 B4       |mov     eax, dword ptr [ebp-4C]
004024A4  |.  0FBE4C05 B8   |movsx   ecx, byte ptr [ebp+eax-48]      ;  倒序取字符
004024A9  |.  83E9 30       |sub     ecx, 30                         ;  转化为十进制
004024AC  |.  0FAF4D B0     |imul    ecx, dword ptr [ebp-50]         ;  相乘
004024B0  |.  8B55 F0       |mov     edx, dword ptr [ebp-10]
004024B3  |.  03D1          |add     edx, ecx
004024B5  |.  8955 F0       |mov     dword ptr [ebp-10], edx         ;  保存累加结果
004024B8  |.  8B45 B0       |mov     eax, dword ptr [ebp-50]
004024BB  |.  6BC0 0A       |imul    eax, eax, 0A                    ;  eax * 0A
004024BE  |.  8945 B0       |mov     dword ptr [ebp-50], eax         ;  再存回去
004024C1  |.^ EB CF         \jmp     short 00402492
004024C3  |>  8B4D F0       mov     ecx, dword ptr [ebp-10]          ;  取结果
004024C6  |.  6BC9 FF       imul    ecx, ecx, -1                     ;  取相反数
004024C9  |.  894D F0       mov     dword ptr [ebp-10], ecx          ;  再存回去
004024CC  |.  837D E8 00    cmp     dword ptr [ebp-18], 0            ;  用户名长度为0?
004024D0  |.  74 2F         je      short 00402501                   ;  为0则破解失败
004024D2  |.  8B55 F0       mov     edx, dword ptr [ebp-10]
004024D5  |.  0FAF55 F0     imul    edx, dword ptr [ebp-10]          ;  相反数 * 相反数
004024D9  |.  8B45 F0       mov     eax, dword ptr [ebp-10]          ;  取出结果
004024DC  |.  0FAF45 E8     imul    eax, dword ptr [ebp-18]          ;  结果乘以用户名长度
004024E0  |.  8B4D F4       mov     ecx, dword ptr [ebp-C]           ;  取F(用户名)
004024E3  |.  03CA          add     ecx, edx                         ;  累加之前的结果
004024E5  |.  03C1          add     eax, ecx
004024E7  |.  85C0          test    eax, eax                         ;  eax为0?
004024E9  |.  75 16         jnz     short 00402501                   ;  不为0则破解失败
004024EB  |.  6A 00         push    0
004024ED  |.  68 20514100   push    00415120                         ;  恭喜你
004024F2  |.  68 14514100   push    00415114                         ;  破解成功!
004024F7  |.  8B4D FC       mov     ecx, dword ptr [ebp-4]
004024FA  |.  E8 71ECFFFF   call    <jmp.&MFC42D.#3517>
004024FF  |.  EB 14         jmp     short 00402515
00402501  |>  6A 00         push    0
00402503  |.  68 08514100   push    00415108                         ;  破解失败
00402508  |.  68 58504100   push    00415058                         ;  重试?
0040250D  |.  8B4D FC       mov     ecx, dword ptr [ebp-4]
00402510  |.  E8 5BECFFFF   call    <jmp.&MFC42D.#3517>

算法比较简单,就不一一说明了,直接修改4024E9处的跳转指令就可以完成爆破。

有兴趣的朋友可以尝试写出注册机。

Bxm做的第一个CrackMe

标签:

原文地址:http://www.cnblogs.com/ZRBYYXDM/p/5224292.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!