飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4597|回复: 9

mask【成长经历】破解crackme(1)

[复制链接]

该用户从未签到

发表于 2005-2-15 16:47:19 | 显示全部楼层 |阅读模式
我的第1篇破解文章.
适合菜鸟中的菜鸟学习及讨论(在学习和讨论中成长)   
爆破不是目的
这个crackme 已经出现很久了!可能有的人曾经写过破文
我忘了在什么地方下的了
(今天也是想试试手)
工具:flyODBG      黄金版W32dsm          软件无壳

用W32dsm载入找到成功或失败信息  找到关键call和关键跳  关键call是真假注册码比较的地方



我们不去爆破     主要是算法           跳死的地方向上可找到00401150这是第1个跳死的地方.我们从这里入手



00401139   $  6A 32         push 32                                  ; /Count = 32 (50.)
0040113B   .  68 F3204000   push Crackme1.004020F3                   ; |Buffer = Crackme1.004020F3
00401140   .  68 C8000000   push 0C8                                 ; |ControlID = C8 (200.)
00401145   .  FF75 08       push dword ptr ss:[ebp+8]                ; |hWnd
00401148   .  E8 DE000000   call <jmp.&USER32.GetDlgItemTextA>       ; \GetDlgItemTextA ****取用户名
0040114D   .  83F8 00       cmp eax,0                                 ****比较是否小于0
00401150   .  0F84 99000000 je Crackme1.004011EF                      ****小于0跳死                 
00401156   .  83F8 04       cmp eax,4                                 ****比较是否小于4
00401159   .  0F82 90000000 jb Crackme1.004011EF                      ****小于4跳死
0040115F   .  33C9          xor ecx,ecx                               ****清零
00401161   .  33DB          xor ebx,ebx
00401163   .  33F6          xor esi,esi
00401165   .  8945 FC       mov dword ptr ss:[ebp-4],eax              ****送位数
                                                                      ****开始循环
00401168   > /0FBE81 F32040>movsx eax,byte ptr ds:[ecx+4020F3]        ****逐位取注册名   第一个“m”既6D
0040116F   . |83F8 20       cmp eax,20                                ****和20比较
00401172   . |74 07         je short Crackme1.0040117B                ****等于就结束,不等就继续
00401174   . |6BC0 04       imul eax,eax,4                            ****带符号乘法eax=eax*4=6D*4=1B4
00401177   . |03D8          add ebx,eax                               ****ebx=ebx+eax=0+1B4=1B4
00401179   . |8BF3          mov esi,ebx                               ****保存ebx进esi        
0040117B   > |41            inc ecx                                   ****计数器加1
0040117C   . |3B4D FC       cmp ecx,dword ptr ss:[ebp-4]              ****比较是否读完注册名
0040117F   .^\75 E7         jnz short Crackme1.00401168               ****没完继续
00401181   .  83FE 00       cmp esi,0                                 ****比较esi是否为0
00401184   .  74 69         je short Crackme1.004011EF                ****如果为0 跳死
                  
                                                                      ****循环结束
****算法:ebx=ebx+注册名的ASCII*4
N1=0+6D*4=1B4
N2=1B4+61*4=338
N3=338+73*4=504
N4=504+6B*4=6B0
N5=6B0+6D*4=864
N6=864+61*4=9E8
N7=9E8+73*4=BB4
N8=BB4+6B*4=D60(十进制=3424)             完成后保存在esi



第二个循环     ecx=8



00401186   .  BB 89476500   mov ebx,654789                       ****赋值ebx 654789
0040118B   >  0FBE81 F22040>movsx eax,byte ptr ds:[ecx+4020F2]   ****循环开始 取注册名的最后一个
00401192   .  4B            dec ebx                              ****ebx=ebx-1=654788
00401193   .  6BC3 02       imul eax,ebx,2                       ****eax=ebx*2=CA8F10
00401196   .  03D8          add ebx,eax                          ****ebx=ebx+eax=12FD698
00401198   .  4B            dec ebx                              ****ebx=ebx-1=12FD697
00401199   .  49            dec ecx                              ****计数器减1  
0040119A   .^ 75 EF         jnz short Crackme1.0040118B          ****计数器等于0循环结束




****算法:  ebx=(ebx-1)*2+(ebx-1)-1=3*ebx-4
N1 = 654789*3-4 = 12FD697
N2 = 12FD697*3-4 = 38F83C1
N3 = 38F83C1*3-4 = AAE8B3F
N4 = AAE8B3F*3-4 = 200BA1B9
N5 = 200BA1B9*3-4 = 6022E527
N6 = 6022E527*3-4 = 12068AF71 (因为ebx寄存器只保留8 bit,所以这里实际上只取2068AF71)
N7 = 2068AF71*3-4 = 613A0E4F
N8 = 613A0E4F*3-4 = 123AE2AE9 (因为ebx寄存器只保留8 bit,所以这里实际上只取23AE2AE9)



循环8次得23AE2AE9



0040119C   .  56            push esi                                 ; /<%lu>  ****第一次码入栈
0040119D   .  53            push ebx                                 ; |<%lX>  ****第二次码入栈
0040119E   .  68 C7204000   push Crackme1.004020C7                   ; |Format = "BS-%lX-%lu"  ****注册码格式
004011A3   .  68 BB214000   push Crackme1.004021BB                   ; |s = Crackme1.004021BB  
004011A8   .  E8 6C000000   call <jmp.&USER32.wsprintfA>             ; \wsprintfA              ****合并
004011AD   .  58            pop eax
004011AE   .  58            pop eax
004011AF   .  58            pop eax
004011B0   .  58            pop eax
004011B1   .  E8 01000000   call Crackme1.004011B7                              ****比较注册码
004011B6   .  C3            retn
004011B7   $  33C9          xor ecx,ecx                                         ****进call
004011B9   .  6A 32         push 32                                  ; /Count = 32 (50.)
004011BB   .  68 57214000   push Crackme1.00402157                   ; |Buffer = Crackme1.00402157
004011C0   .  68 C9000000   push 0C9                                 ; |ControlID = C9 (201.)
004011C5   .  FF75 08       push dword ptr ss:[ebp+8]                ; |hWnd
004011C8   .  E8 5E000000   call <jmp.&USER32.GetDlgItemTextA>       ; \GetDlgItemTextA ****获得假码
004011CD   .  83F8 00       cmp eax,0                                                   ****是否为0
004011D0   .  74 1D         je short Crackme1.004011EF                                  ****为0结束
004011D2   .  33C9          xor ecx,ecx                                                 ****ecx清0
004011D4   >  0FBE81 572140>movsx eax,byte ptr ds:[ecx+402157]                          ****取假码
004011DB   .  0FBE99 BB2140>movsx ebx,byte ptr ds:[ecx+4021BB]                          ****取真码
004011E2   .  3BC3          cmp eax,ebx                                                 ****比较
004011E4   .  75 09         jnz short Crackme1.004011EF                                 ****不同跳死
004011E6   .  83F8 00       cmp eax,0                                                  
004011E9   .  74 19         je short Crackme1.00401204                                  ****eax等于0跳到成功
004011EB   .  41            inc ecx                                                     ****ecx计数器减1
004011EC   .^ EB E6         jmp short Crackme1.004011D4                                 ****跳回循环
004011EE   .  C3            retn



004011EF   > \6A 10         push 10                                  ; /Style = MB_OK|MB_ICONHAND|MB_APPLMODAL
004011F1   .  68 E4204000   push Crackme1.004020E4                   ; |Title = "Nope"
004011F6   .  68 E9204000   push Crackme1.004020E9                   ; |Text = "Try again"
004011FB   .  FF75 08       push dword ptr ss:[ebp+8]                ; |hOwner
004011FE   .  E8 34000000   call <jmp.&USER32.MessageBoxA>           ; \MessageBoxA
00401203   .  C3            retn
00401204   >  6A 40         push 40                                  ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00401206   .  68 D2204000   push Crackme1.004020D2                   ; |Title = "Solved"
0040120B   .  68 D9204000   push Crackme1.004020D9                   ; |Text = "Well done."
00401210   .  FF75 08       push dword ptr ss:[ebp+8]                ; |hOwner
00401213   .  E8 1F000000   call <jmp.&USER32.MessageBoxA>           ; \MessageBoxA
00401218   .  C3            retn



算法分析完毕    Name:maskmask      S/N:BS-23AE2AE9-3424

请各位提出意见.我汇编语言还不太会
KeyGen的工作交给各位高手了
希望能把keygen帖出

[ Last edited by mask on 2005-2-15 at 09:12 PM ]

Crackme1.rar

2.59 KB, 下载次数: 40, 下载积分: 飘云币 -2 枚

PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-12-1 11:04
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    发表于 2005-2-15 18:52:41 | 显示全部楼层
    附件问题已经解决!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-7-21 08:38
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2005-2-15 21:27:10 | 显示全部楼层
    不错啊,兄弟!
    支持!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2005-2-15 23:52:39 | 显示全部楼层
    很厉害啊,支持
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2005-2-16 08:42:29 | 显示全部楼层
    支持,成长的过程是充满喜悦的。
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2020-3-30 17:42
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2005-3-6 20:30:20 | 显示全部楼层
    鼎!清冽支持
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2005-3-7 15:25:48 | 显示全部楼层
    我刚刚入门,爆破过几个小软件(不到1m的),可是算法一巧不通,,,,就象天书一样》》》》》》》郁闷《〈〈〈〈
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2005-3-16 15:32:11 | 显示全部楼层
    看到那么多代码就头昏
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2005-3-17 17:18:11 | 显示全部楼层
    偶作为菜鸟,深知想破点东西不容易啊
    PYG19周年生日快乐!
    6928120 该用户已被删除
    发表于 2005-8-7 15:08:09 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表