首页
社区
课程
招聘
[旧帖] [分享]新手中的菜鸟第一贴之CrackMe 0.00雪花
发表于: 2011-10-4 19:13 999

[旧帖] [分享]新手中的菜鸟第一贴之CrackMe 0.00雪花

2011-10-4 19:13
999
新人首次发帖,本人是今年才开始接触编程的,25岁了~(早干麻去了???)
由于本人思路不清晰,看起来应该会很乱……看的牛牛们可别拿砖头~~~
这个“CrackMe”来自网上,应该不会有人追究我的责任问题吧?要是有的话我再删除好了

好了,正式开始:
我是用IDA打开这个CrackMe的,转到下面的地方

.text:0040137D mov     dword ptr [esp], offset aStage1 ; "\n\nSTAGE 1\n"
.text:00401384 call    printf
.text:00401389 mov     dword ptr [esp], offset asc_4031D3 ; "*******\n\n"
.text:00401390 call    printf
.text:00401395 mov     dword ptr [esp], offset aEnterPasswordT ; "Enter Password To Continue : "
.text:0040139C call    printf
.text:004013A1 lea     eax, [ebp+var_28]
.text:004013A4 mov     [esp+4], eax
.text:004013A8 mov     dword ptr [esp], offset aS ; "%s"
.text:004013AF call    scanf
.text:004013B4 lea     eax, [ebp+var_28]
.text:004013B7 mov     [esp], eax      ; char *
.text:004013BA call    strlen                                ;取输入字符串的长度
.text:004013BF cmp     eax, 8                                ;比较长度是否为8       
.text:004013C2 jz      short loc_4013C9                        ;是就跳走
.text:004013C4 jmp     loc_4014F5                                ;这里跳到失败
.text:004013C9 ; ---------------------------------------------------------------------------
.text:004013C9
.text:004013C9 loc_4013C9:                             
.text:004013C9 mov     [ebp+var_ecx], 0                        ;这里是循环计数器清零
.text:004013D0
.text:004013D0 loc_4013D0:                             
.text:004013D0 cmp     [ebp+var_ecx], 7                       
.text:004013D4 jg      short loc_4013F6                        ;大于等于7时跳走

.text:004013D6 lea     eax, [ebp+var_8]
.text:004013D9 add     eax, [ebp+var_ecx]
.text:004013DC lea     edx, [eax-20h]
.text:004013DF lea     eax, [ebp+var_8]
.text:004013E2 add     eax, [ebp+var_ecx]
.text:004013E5 sub     eax, 20h
.text:004013E8 movzx   eax, byte ptr [eax]
.text:004013EB inc     al
.text:004013ED mov     [edx], al
.text:004013EF lea     eax, [ebp-0Ch]
.text:004013F2 inc     dword ptr [eax]                        ;这段是把输入的字符的ASCII码加1的循环
.text:004013F4 jmp     short loc_4013D0                       

.text:004013F6 loc_4013F6:
.text:004013F6 lea     eax, [ebp+var_38]                        ;这里是真码做循环后的结果
.text:004013F9 lea     edx, [ebp+var_28]                        ;我们输入字符后循环后的结果
.text:004013FC mov     [esp+4], eax    ; char *
.text:00401400 mov     [esp], edx      ; char *
.text:00401403 call    strcmp                               
.text:00401408 test    eax, eax                               
.text:0040140A jnz     loc_4014F5                                ;比较字串,不相等就跳向失败

.text:00401410 mov     dword ptr [esp], offset aStage1Complete ; "\nStage 1 completed!"
.text:00401417 call    printf
.text:0040141C mov     dword ptr [esp], offset aStage2 ; "\n\n\nSTAGE 2\n"
.text:00401423 call    printf
.text:00401428 mov     dword ptr [esp], offset asc_4031D3 ; "*******\n\n"
.text:0040142F call    printf
.text:00401434 mov     dword ptr [esp], offset aName2Chars10 ; "\nName [2<=chars<=10] : "
.text:0040143B call    printf
.text:00401440 lea     eax, [ebp+var_48]
.text:00401443 mov     [esp+4], eax
.text:00401447 mov     dword ptr [esp], offset aS ; "%s"
.text:0040144E call    scanf
.text:00401453 mov     dword ptr [esp], offset aSerial ; "\nSerial : "
.text:0040145A call    printf
.text:0040145F lea     eax, [ebp+var_50]
.text:00401462 mov     [esp+4], eax
.text:00401466 mov     dword ptr [esp], offset aD ; "%d"
.text:0040146D call    scanf
.text:00401472 mov     [ebp+var_ecx], 0
.text:00401479 mov     [ebp+var_ecx], 0

.text:00401480 loc_401480:
.text:00401480 lea     eax, [ebp+var_48]
.text:00401483 mov     [esp], eax                              ;相当于 push eax?                         ;
.text:00401486 call    strlen                                  ; 得到 NAME 的长度以便做循环
.text:0040148B cmp     [ebp+var_c], eax                        ;比较循环次数
.text:0040148E ja      short loc_4014AA                        ;大于等于eax的值跳走

.text:00401490 lea     eax, [ebp+var_8]
.text:00401493 add     eax, [ebp+var_C]
.text:00401496 sub     eax, 40h
.text:00401499 movsx   eax, byte ptr [eax]
.text:0040149C add     eax, [ebp+var_4C]
.text:0040149F dec     eax
.text:004014A0 mov     [ebp+var_4C], eax       
.text:004014A3 lea     eax, [ebp+var_C]                        ;这段是用户名的每个字符相加,再加1,最后再加1
.text:004014A6 inc     dword ptr [eax]
.text:004014A8 jmp     short loc_40

.text:004014AA loc_4014AA:
.text:004014AA mov     eax, [ebp+var_4C]                        ;我们输入NAME计算出来的正确结果
.text:004014AD cmp     eax, [ebp+var_50]                        ;我们输入的错的Serial算出来的错码
.text:004014B0 jnz     short loc_4014F5                        ;结果不相等就跳向失败

.text:004014B2 mov     dword ptr [esp], offset aStage2Complete ; "\nStage 2 Completed!\n"
.text:004014B9 call    printf
.text:004014BE mov     dword ptr [esp], offset aStage3 ; "\n\nSTAGE 3\n"
.text:004014C5 call    printf
.text:004014CA mov     dword ptr [esp], offset asc_4031D3 ; "*******\n\n"
.text:004014D1 call    printf
.text:004014D6 mov     dword ptr [esp], offset aConsoleNag___L ; "Console nag... lol ...Remove Me!\n"
.text:004014DD call    printf
.text:004014E2 call    _getch
.text:004014E7 mov     dword ptr [esp], offset aStage3Complete ; "\nStage 3 Completed if you don't see nag"...
.text:004014EE call    printf
.text:004014F3 jmp     short loc_401506                                ;此段为提示成功段

到这里基本上是结束了吧?
然后用Delphi写了个注册机,当然,这个水平也非常非常有限,也不知道是不是悟性的问题~~~哈哈~~

[培训]传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回