飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 1732|回复: 5

第七课的一个练习 本人第一个算法分析

[复制链接]

该用户从未签到

发表于 2006-1-6 18:31:07 | 显示全部楼层 |阅读模式
第七课的还没有仔细的弄一下   先把这个给弄上来吧  免得老大把我给踢出学员区了(:L前几课的作业还没有交呢)  这个算法分析中还有一些问题 希望高手能帮我解决了
crackme 下载地方ftp://fqinyuan1@79222.com/czcrackme_09.rar



【破文标题】CZCrackme09算法分析
【破文作者】IceCrack
【作者邮箱】IceCrack@163.com
【作者主页】www.chinapyg.com
破解工具】oDbyDYK
【破解平台】xp sp2
【软件名称】CZCrackme09
【软件简介】就是一个crackme 没有什么好说的.
------------------------------------------------------------------------
0040136A  |. E8 77030000    call <jmp.&USER32.GetDlgItemTextA>    ; \得到用户名长度
0040136F  |. 83F8 04        cmp eax, 4                            ;  试炼码长度要大于4
00401372  |. 0F8E CC000000  jle czCrackM.00401444
00401378  |. A3 BF304000    mov dword ptr ds:[4030BF], eax        ;  试炼码长度入4030bf
0040137D  |. FF35 C3304000  push dword ptr ds:[4030C3]            ; /hWnd = 0047023C (class='Edit',parent=003C0234)
00401383  |. E8 AC030000    call <jmp.&USER32.SetFocus>           ; \SetFocus
00401388  |. BF 30314000    mov edi, czCrackM.00403130            ;  ASCII "icecrack"
0040138D  |. BE 30314000    mov esi, czCrackM.00403130            ;  ASCII "icecrack"
00401392  |> AC             /lods byte ptr ds:[esi]
00401393  |. 0C 00          |or al, 0
00401395  |. 74 05          |je short czCrackM.0040139C
00401397  |. 0C 20          |or al, 20                            ;  用户名大写变小写
00401399  |. AA             |stos byte ptr es:[edi]
0040139A  |. EB F6          \jmp short czCrackM.00401392
0040139C  |> BF 70314000    mov edi, czCrackM.00403170            ;  ASCII "812/="
004013A1  |. BE 70314000    mov esi, czCrackM.00403170            ;  ASCII "812/="
004013A6  |. 8D1D 30314000  lea ebx, dword ptr ds:[403130]
004013AC  |> AC             /lods byte ptr ds:[esi]
004013AD  |. 0C 00          |or al, 0
004013AF  |. 74 0A          |je short czCrackM.004013BB
004013B1  |. 8A13           |mov dl, byte ptr ds:[ebx]
004013B3  |. 2AD0           |sub dl, al                           ;  小写的用户名逐位减去试炼码 比较次数是试炼码长度
004013B5  |. 8AC2           |mov al, dl
004013B7  |. AA             |stos byte ptr es:[edi]
004013B8  |. 43             |inc ebx
004013B9  |. EB F1          \jmp short czCrackM.004013AC
004013BB  |> 8B0D BF304000  mov ecx, dword ptr ds:[4030BF]
004013C1  |> 80C9 00        /or cl, 0
004013C4  |. 74 60          |je short czCrackM.00401426
004013C6  |. 51             |push ecx
004013C7  |. 68 70314000    |push czCrackM.00403170               ;  ASCII "812/="
004013CC  |. E8 83020000    |call czCrackM.00401654               ; 算法call
004013D1  |. F7E1           |mul ecx                              ;  ecx以密码长度逐减小
004013D3  |. 68 B0314000    |push czCrackM.004031B0
004013D8  |. 50             |push eax
004013D9  |. E8 BE020000    |call czCrackM.0040169C
004013DE  |. BF B0314000    |mov edi, czCrackM.004031B0
004013E3  |. BE B0314000    |mov esi, czCrackM.004031B0
004013E8  |> AC             |/lods byte ptr ds:[esi]
004013E9  |. 0C 00          ||or al, 0
004013EB  |. 74 06          ||je short czCrackM.004013F3
004013ED  |. 83E0 0F        ||and eax, 0F                         ;  高四位清零
004013F0  |. AA             ||stos byte ptr es:[edi]
004013F1  |. EB F5          |\jmp short czCrackM.004013E8
004013F3  |> 8B0D BF304000  |mov ecx, dword ptr ds:[4030BF]
004013F9  |. D1E9           |shr ecx, 1                           ;  密码长度逻辑右移1位  也就是除以二
004013FB  |. BF F0304000    |mov edi, czCrackM.004030F0
00401400  |. BE B0314000    |mov esi, czCrackM.004031B0
00401405  |. 8D99 B0314000  |lea ebx, dword ptr ds:[ecx+4031B0]   ;  4031b2
0040140B  |> 80C9 00        |/or cl, 0
0040140E  |. 74 12          ||je short czCrackM.00401422
00401410  |. AC             ||lods byte ptr ds:[esi]
00401411  |. 33D2           ||xor edx, edx
00401413  |. 8A13           ||mov dl, byte ptr ds:[ebx]
00401415  |. 02C2           ||add al, dl                          ;  4031b0与4031b2相加
00401417  |. 8A17           ||mov dl, byte ptr ds:[edi]
00401419  |. 02C2           ||add al, dl                          ;  004030f0前面的相加  004030F0初值为0
0040141B  |. 24 0F          ||and al, 0F                          ;  高四位清零
0040141D  |. AA             ||stos byte ptr es:[edi]              ;  结果放到004030f0
0040141E  |. 49             ||dec ecx
0040141F  |. 43             ||inc ebx
00401420  |. EB E9          |\jmp short czCrackM.0040140B
00401422  |> 59             |pop ecx
00401423  |. 49             |dec ecx
00401424  |. EB 9B          \jmp short czCrackM.004013C1
00401426  |> BE F0304000    mov esi, czCrackM.004030F0
0040142B  |. 8B1D BF304000  mov ebx, dword ptr ds:[4030BF]
00401431  |. 8BCB           mov ecx, ebx
00401433  |. D1E9           shr ecx, 1
00401435  |> 8A06           /mov al, byte ptr ds:[esi]
00401437  |. 80C9 00        |or cl, 0
0040143A  |. 74 39          |je short czCrackM.00401475
0040143C  |. 38D8           |cmp al, bl
0040143E  |. 75 04          |jnz short czCrackM.00401444
00401440  |. 46             |inc esi
00401441  |. 49             |dec ecx
00401442  |. EB F1          \jmp short czCrackM.00401435



--------------------------------004013CC  |. E8 83020000    |call czCrackM.00401654 -----------------------------------------
00401654  /$ 55             push ebp
00401655  |. 8BEC           mov ebp, esp
00401657  |. 51             push ecx
00401658  |. 57             push edi
00401659  |. 52             push edx
0040165A  |. 56             push esi
0040165B  |. 33C9           xor ecx, ecx
0040165D  |. 8B7D 08        mov edi, dword ptr ss:[ebp+8]
00401660  |. FF75 08        push dword ptr ss:[ebp+8]             ; /String
00401663  |. E8 FC000000    call <jmp.&KERNEL32.lstrlenA>         ; \密码长度
00401668  |. EB 23          jmp short czCrackM.0040168D
0040166A  |> 33D2           /xor edx, edx
0040166C  |. 8A17           |mov dl, byte ptr ds:[edi]            ;  运算812/=逐位放到dl中
0040166E  |. 80EA 30        |sub dl, 30                           ;  都减去30
00401671  |. 8BF0           |mov esi, eax                         ;  当前密码长度给esi
00401673  |. 4E             |dec esi
00401674  |. 50             |push eax
00401675  |. 8BC2           |mov eax, edx                         ;  运算后的给eax
00401677  |. 53             |push ebx
00401678  |. BB 0A000000    |mov ebx, 0A                          ;  把0a给ebx
0040167D  |. EB 03          |jmp short czCrackM.00401682
0040167F  |> F7E3           |/mul ebx                             ;  密码长度乘以0a
00401681  |. 4E             ||dec esi
00401682  |> 83FE 00        | cmp esi, 0
00401685  |. 77 F8          |\ja short czCrackM.0040167F
00401687  |. 5B             |pop ebx
00401688  |. 03C8           |add ecx, eax                         ;ecx原来的值7C80C710
0040168A  |. 58             |pop eax
0040168B  |. 47             |inc edi
0040168C  |. 48             |dec eax
0040168D  |> 0BC0            or eax, eax
0040168F  |. 75 D9          \jnz short czCrackM.0040166A
00401691  |. 8BC1           mov eax, ecx                          ;  把总算出来的给eax
00401693  |. 5E             pop esi
00401694  |. 5A             pop edx
00401695  |. 5F             pop edi
00401696  |. 59             pop ecx
00401697  |. C9             leave
00401698  \. C2 0400        retn 4

算法总结
    用户名逐位与0x20或运算 然后再逐位减去试验码    结果为M1  
  ;下面的循环密码长度次
{ M1再逐位的减去0x30    M2=(Am1*a^密码长+Bm1*a^密码长减1.............)+7c80c710
M3=M2*密码长(逐次减1)  M3逐位与0F与运算  也就是高四位清零         [ M3的第一位和密码长度/2的位相加 得到M4        M5=(M4+004030F0)的高四位)] 循环密码长度/2次
  }   

最后   得到的004030b0与004020F0逐位比较密码长度/2次
相等则注册成功



------------------------------------------------------------------------
这个是我第一次算法分析 搞的我头都大了 弄了两天了才弄明白怎么弄的  而且知道算法了 也不知道怎么构造注册码  他的循环对我来说太多了
00401688  |. 03C8           |add ecx, eax                         ;ecx原来的值7C80C710
这个ecx的值是怎么来的啊

------------------------------------------------------------------------
【版权声明】本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

[ 本帖最后由 IceCrack 于 2006-1-6 18:32 编辑 ]
PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2020-4-10 17:02
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2006-1-10 00:42:42 | 显示全部楼层
    写得不错啊!

    鼓励一下!!!

    多出精品哦!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-1-10 09:56:52 | 显示全部楼层
    【破解工具】oDbyDYK????
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2006-1-10 10:22:33 | 显示全部楼层
    原帖由 vivian 于 2006-1-10 09:56 发表
    【破解工具】oDbyDYK????

    好像没有什么不对啊    全称应该是DYK158修改出来的od啊 我用着这一版相当的爽哦
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-1-12 10:33:42 | 显示全部楼层
    原帖由 IceCrack 于 2006-1-10 10:22 发表

    好像没有什么不对啊    全称应该是DYK158修改出来的od啊 我用着这一版相当的爽哦


    哦,偶用的是cao_cong的!;)
    PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2017-9-28 11:05
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2006-1-12 18:06:41 | 显示全部楼层
    哈。不错~~
    支持一下
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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