首页
社区
课程
招聘
[原创]一个简单CrackMe的破解
发表于: 2006-7-1 20:42 13361

[原创]一个简单CrackMe的破解

bxm 活跃值
29
2006-7-1 20:42
13361

目标:随便找了一个简单的CrackMe
破解工具:OD、计算器
  首先用peid查壳,无壳。运行,收集足够的信息,用OD载入,通过字符串参考下断,断在下面:
00457C4E  |.  83F8 06       cmp     eax, 6               ;  name长度必须大于等于6
00457C51  |.  73 1D         jnb     short 00457C70
00457C53  |.  6A 00         push    0
00457C55  |.  B9 F87E4500   mov     ecx, 00457EF8        ;  name too short !
00457C5A  |.  BA 0C7F4500   mov     edx, 00457F0C        ;  your name must be at least 6 chars long !
00457C5F  |.  A1 98A54500   mov     eax, [45A598]
00457C64  |.  8B00          mov     eax, [eax]
00457C66  |.  E8 C584FEFF   call    00440130
00457C6B  |.  E9 59010000   jmp     00457DC9
00457C70  |>  8D55 FC       lea     edx, [ebp-4]
00457C73  |.  8B83 D8020000 mov     eax, [ebx+2D8]
00457C79  |.  E8 62C2FCFF   call    00423EE0
00457C7E  |.  8B45 FC       mov     eax, [ebp-4]
00457C81  |.  BA 01000000   mov     edx, 1
00457C86  |.  4A            dec     edx
00457C87  |.  3B50 FC       cmp     edx, [eax-4]         ;  name字符串长度7
00457C8A  |.  72 05         jb      short 00457C91
00457C8C  |.  E8 F3AEFAFF   call    00402B84
00457C91  |>  42            inc     edx
00457C92  |.  0FB64410 FF   movzx   eax, byte ptr [eax+e>
00457C97  |.  6BF0 02       imul    esi, eax, 2          ;  name第1位*2送eax
00457C9A  |.  71 05         jno     short 00457CA1
00457C9C  |.  E8 EBAEFAFF   call    00402B8C
00457CA1  |>  8D55 F8       lea     edx, [ebp-8]
00457CA4  |.  8B83 D8020000 mov     eax, [ebx+2D8]
00457CAA  |.  E8 31C2FCFF   call    00423EE0
00457CAF  |.  8B45 F8       mov     eax, [ebp-8]
00457CB2  |.  BA 02000000   mov     edx, 2
00457CB7  |.  4A            dec     edx
00457CB8  |.  3B50 FC       cmp     edx, [eax-4]
00457CBB  |.  72 05         jb      short 00457CC2
00457CBD  |.  E8 C2AEFAFF   call    00402B84
00457CC2  |>  42            inc     edx
00457CC3  |.  0FB64410 FF   movzx   eax, byte ptr [eax+e>
00457CC8  |.  6BC0 02       imul    eax, eax, 2          ;  name第2位*2送eax
00457CCB  |.  71 05         jno     short 00457CD2
00457CCD  |.  E8 BAAEFAFF   call    00402B8C
00457CD2  |>  03F0          add     esi, eax             ;  累加于esi
00457CD4  |.  71 05         jno     short 00457CDB
00457CD6  |.  E8 B1AEFAFF   call    00402B8C
00457CDB  |>  8D55 F4       lea     edx, [ebp-C]
00457CDE  |.  8B83 D8020000 mov     eax, [ebx+2D8]
00457CE4  |.  E8 F7C1FCFF   call    00423EE0
00457CE9  |.  8B45 F4       mov     eax, [ebp-C]
00457CEC  |.  BA 03000000   mov     edx, 3
00457CF1  |.  4A            dec     edx
00457CF2  |.  3B50 FC       cmp     edx, [eax-4]
00457CF5  |.  72 05         jb      short 00457CFC
00457CF7  |.  E8 88AEFAFF   call    00402B84
00457CFC  |>  42            inc     edx
00457CFD  |.  0FB64410 FF   movzx   eax, byte ptr [eax+e>
00457D02  |.  6BC0 02       imul    eax, eax, 2          ;  name第3位*2送eax
00457D05  |.  71 05         jno     short 00457D0C
00457D07  |.  E8 80AEFAFF   call    00402B8C
00457D0C  |>  03F0          add     esi, eax             ;  累加于esi
00457D0E  |.  71 05         jno     short 00457D15
00457D10  |.  E8 77AEFAFF   call    00402B8C
00457D15  |>  8D55 F0       lea     edx, [ebp-10]
00457D18  |.  8B83 D8020000 mov     eax, [ebx+2D8]
00457D1E  |.  E8 BDC1FCFF   call    00423EE0
00457D23  |.  8B45 F0       mov     eax, [ebp-10]
00457D26  |.  BA 04000000   mov     edx, 4
00457D2B  |.  4A            dec     edx
00457D2C  |.  3B50 FC       cmp     edx, [eax-4]
00457D2F  |.  72 05         jb      short 00457D36
00457D31  |.  E8 4EAEFAFF   call    00402B84
00457D36  |>  42            inc     edx
00457D37  |.  0FB64410 FF   movzx   eax, byte ptr [eax+e>
00457D3C  |.  6BC0 02       imul    eax, eax, 2          ;  name第4位*2送eax
00457D3F  |.  71 05         jno     short 00457D46
00457D41  |.  E8 46AEFAFF   call    00402B8C
00457D46  |>  03F0          add     esi, eax             ;  累加于esi
00457D48  |.  71 05         jno     short 00457D4F
00457D4A  |.  E8 3DAEFAFF   call    00402B8C
00457D4F  |>  8D55 EC       lea     edx, [ebp-14]
00457D52  |.  8B83 D8020000 mov     eax, [ebx+2D8]
00457D58  |.  E8 83C1FCFF   call    00423EE0
00457D5D  |.  8B45 EC       mov     eax, [ebp-14]
00457D60  |.  BA 05000000   mov     edx, 5
00457D65  |.  4A            dec     edx
00457D66  |.  3B50 FC       cmp     edx, [eax-4]
00457D69  |.  72 05         jb      short 00457D70
00457D6B  |.  E8 14AEFAFF   call    00402B84
00457D70  |>  42            inc     edx
00457D71  |.  0FB64410 FF   movzx   eax, byte ptr [eax+e>
00457D76  |.  6BC0 02       imul    eax, eax, 2          ;  name第5位*2送eax
00457D79  |.  71 05         jno     short 00457D80
00457D7B  |.  E8 0CAEFAFF   call    00402B8C
00457D80  |>  03F0          add     esi, eax
00457D82  |.  71 05         jno     short 00457D89
00457D84  |.  E8 03AEFAFF   call    00402B8C
00457D89  |>  8D55 E8       lea     edx, [ebp-18]
00457D8C  |.  8B83 D8020000 mov     eax, [ebx+2D8]
00457D92  |.  E8 49C1FCFF   call    00423EE0
00457D97  |.  8B45 E8       mov     eax, [ebp-18]
00457D9A  |.  BA 06000000   mov     edx, 6
00457D9F  |.  4A            dec     edx
00457DA0  |.  3B50 FC       cmp     edx, [eax-4]
00457DA3  |.  72 05         jb      short 00457DAA
00457DA5  |.  E8 DAADFAFF   call    00402B84
00457DAA  |>  42            inc     edx
00457DAB  |.  0FB64410 FF   movzx   eax, byte ptr [eax+e>
00457DB0  |.  6BC0 02       imul    eax, eax, 2          ;  name第6位*2送eax
00457DB3  |.  71 05         jno     short 00457DBA
00457DB5  |.  E8 D2ADFAFF   call    00402B8C
00457DBA  |>  03F0          add     esi, eax             ;  累加于esi
00457DBC  |.  71 05         jno     short 00457DC3
00457DBE  |.  E8 C9ADFAFF   call    00402B8C
00457DC3  |>  8935 40B84500 mov     [45B840], esi        ;  累加和存于[45B840]
00457DC9  |>  A1 44B84500   mov     eax, [45B844]        ;  name送eax
00457DCE  |.  E8 FDFBFAFF   call    004079D0             ;  得到字符串长度
00457DD3  |.  6BC0 02       imul    eax, eax, 2          ;  name长度*2送eax
00457DD6  |.  73 05         jnb     short 00457DDD
00457DD8  |.  E8 AFADFAFF   call    00402B8C
00457DDD  |>  33D2          xor     edx, edx
00457DDF  |.  52            push    edx
00457DE0  |.  50            push    eax
00457DE1  |.  A1 40B84500   mov     eax, [45B840]
00457DE6  |.  99            cdq
00457DE7  |.  030424        add     eax, [esp]
00457DEA  |.  135424 04     adc     edx, [esp+4]
00457DEE  |.  71 05         jno     short 00457DF5
00457DF0  |.  E8 97ADFAFF   call    00402B8C
00457DF5  |>  83C4 08       add     esp, 8
00457DF8  |.  50            push    eax
00457DF9  |.  C1F8 1F       sar     eax, 1F
00457DFC  |.  3BC2          cmp     eax, edx
00457DFE  |.  58            pop     eax
00457DFF  |.  74 05         je      short 00457E06
00457E01  |.  E8 7EADFAFF   call    00402B84
00457E06  |>  A3 40B84500   mov     [45B840], eax        ;  新累加和存于[45B840]
00457E0B  |.  8D55 E4       lea     edx, [ebp-1C]
00457E0E  |.  A1 40B84500   mov     eax, [45B840]
00457E13  |.  E8 2CF9FAFF   call    00407744             ;  把累加和转换成十进制,即成注册码
00457E18  |.  8B45 E4       mov     eax, [ebp-1C]
00457E1B  |.  50            push    eax
00457E1C  |.  8D55 FC       lea     edx, [ebp-4]
00457E1F  |.  8B83 DC020000 mov     eax, [ebx+2DC]
00457E25  |.  E8 B6C0FCFF   call    00423EE0
00457E2A  |.  8B55 FC       mov     edx, [ebp-4]
00457E2D  |.  58            pop     eax
00457E2E  |.  E8 51BDFAFF   call    00403B84
00457E33  |.  75 1A         jnz     short 00457E4F
00457E35  |.  6A 00         push    0
00457E37  |.  B9 387F4500   mov     ecx, 00457F38        ;  congratz !
00457E3C  |.  BA 447F4500   mov     edx, 00457F44        ;  you cracked the cff crackme #4 ! please send your solution to acidbytes@gmx.net !
00457E41  |.  A1 98A54500   mov     eax, [45A598]
00457E46  |.  8B00          mov     eax, [eax]
00457E48  |.  E8 E382FEFF   call    00440130

算法分析:
    把NAME的前6位的每一位ASCII码值*2累加记为A,再把NAME的长度*2与A相加得B,把B转换成十进制即得注册码。
注册机比较简单,略。
    初次写破文,有什么不妥之处,请各位指出。


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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (40)
雪    币: 461
活跃值: (93)
能力值: ( LV9,RANK:1170 )
在线值:
发帖
回帖
粉丝
2
怎么没人顶,那我自己顶!
2006-7-1 23:22
0
雪    币: 47147
活跃值: (20455)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
最初由 bxm 发布
怎么没人顶,那我自己顶!


麻烦将CrackMe传一份上来。
2006-7-2 09:33
0
雪    币: 461
活跃值: (93)
能力值: ( LV9,RANK:1170 )
在线值:
发帖
回帖
粉丝
4
附件已上传,感谢看雪老大!
2006-7-2 13:22
0
雪    币: 155
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
下载下载看看
2006-7-2 23:30
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
6
7.1党建,看雪老大优惠大送精
2006-7-2 23:45
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
不错,看了对我提高很快
2006-7-3 16:23
0
雪    币: 205
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
如何计算我就是看不出来,看来我的汇编太差了。55555

NAME:zjxte75
serial:1254
2006-7-5 21:23
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sdy
9
?姓??的~~正在?crack~~
希望大大以後多办文^^
加油
2006-7-6 14:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
好好学习一下,谢谢楼主
2006-7-6 15:52
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sdy
11
#include "stdafx.h"
#include <string.h>

int main(int argc, char* argv[])
{
        char name[256];
        printf("Please input your name:");
        gets(name);
        if(strlen(name)!=6)
        {
                printf("Name's length must be equal 6\n");
                return 0;
        }

        int code=0;
        for(int i=0;i<strlen(name);i++)
        {
                code += name[i]<<1;
        }
        code += strlen(name)<<1;

        printf("Name=%s\n",name);
        printf("Serial=%d\n",code);
        return 0;
}
2006-7-7 21:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
写的什么啊,看不懂
2006-7-14 16:58
0
雪    币: 157
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
解释很好!

新手不懂的,看看领会不少的道理!

经常跟各位学习……ing
2006-7-14 19:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
新手刚开始看不懂,但路总是要走的,感谢!
2006-7-17 09:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
下载来试一下
2006-7-17 11:17
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
下载学习,感谢楼主!
2006-7-18 22:38
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
谢谢楼主!!
2006-7-24 13:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
Name:phillshi
PASS:1320
2006-7-25 19:16
0
雪    币: 333
活跃值: (11)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
19
想问你个问题,你是怎么看出这个是有进行进制的转换,而不是其他的数学变换?
2006-8-4 23:06
0
雪    币: 461
活跃值: (93)
能力值: ( LV9,RANK:1170 )
在线值:
发帖
回帖
粉丝
20
你只要跟进下面这个CALL就可以看出来了!
00457E13  |.  E8 2CF9FAFF   call    00407744             ;  把累加和转换成十进制,即成注册码
2006-8-4 23:25
0
雪    币: 226
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
21
没耐心,爆了。
2006-10-21 15:12
0
雪    币: 405
活跃值: (10)
能力值: ( LV9,RANK:1130 )
在线值:
发帖
回帖
粉丝
22
嘻嘻,本世纪最简单易懂的crackme了。嘻嘻

以下是小弟写的VB注册机代码:

Private Sub Command1_Click()
Dim name As String
Dim x, y As Long
x = 0
y = 0
If Len(Text1.Text) < 6 Then
MsgBox ("用户名必须大于6位")

Else

name = Left(Text1.Text, 6)

For i = 1 To Len(name)
x = x + Asc(Mid(name, i, 1)) * 2
Next i

y = Len(Text1.Text) * 2

Text2.Text = x + y

End If

End Sub
2006-10-21 19:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
先看看吧
很长时间没来了
2006-10-22 13:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
汗,用OD载入,跟了下算法,感觉处理用户名的地方,代码很没效率,是编译器出来的么?
00457E2E  |.  E8 51BDFAFF   call   00403B84                         ;
处理结果与输入的注册码比较,等则通过

跟进这个call,才看到输入的注册码,总算确定前面计算的结果就是注册码了,
要是分成几部分比较,那我肯定要看不懂了
2006-11-4 12:23
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
谢谢楼主了
收下学习了
2006-11-4 21:27
0
游客
登录 | 注册 方可回帖
返回
//