飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 6262|回复: 7

[原创] Cool CD Ripper V1.26 简单分析

[复制链接]

该用户从未签到

发表于 2007-5-21 20:21:27 | 显示全部楼层 |阅读模式
Cool CD Ripper  V1.26
官方网站:http://www.magicutils.com/

Cool CD Ripper  V1.26同MouseStar  V3.55是同一公司的作品。软件的算法在形式上几乎没什么变化,调换了一些简单的字符串,在保存KEY上做了小小的修整,使暴破后写入假码。软件可搜索到注册失败的ASCII字符串,所以下断简单。UPX壳我们就直接带壳调试OD开始分析。



004C3129    51              push    ecx
004C312A    51              push    ecx
004C312B    51              push    ecx
004C312C    51              push    ecx
004C312D    51              push    ecx
004C312E    53              push    ebx
004C312F    56              push    esi
004C3130    8BD8            mov     ebx, eax
004C3132    33C0            xor     eax, eax
004C3134    55              push    ebp
004C3135    68 90324C00     push    004C3290
004C313A    64:FF30         push    dword ptr fs:[eax]
004C313D    64:8920         mov     dword ptr fs:[eax], esp
004C3140    8D55 F4         lea     edx, dword ptr [ebp-C]
004C3143    8B83 0C030000   mov     eax, dword ptr [ebx+30C]
004C3149    E8 C62CF8FF     call    00445E14                          ; 计算用户名的位数
004C314E    8B45 F4         mov     eax, dword ptr [ebp-C]
004C3151    8D55 F8         lea     edx, dword ptr [ebp-8]
004C3154    E8 DF5EF4FF     call    00409038
004C3159    8B55 F8         mov     edx, dword ptr [ebp-8]
004C315C    A1 C41A4E00     mov     eax, dword ptr [4E1AC4]
004C3161    E8 FE19F4FF     call    00404B64
004C3166    8D55 EC         lea     edx, dword ptr [ebp-14]
004C3169    8B83 14030000   mov     eax, dword ptr [ebx+314]
004C316F    E8 A02CF8FF     call    00445E14
004C3174    8B45 EC         mov     eax, dword ptr [ebp-14]
004C3177    8D55 F0         lea     edx, dword ptr [ebp-10]
004C317A    E8 B95EF4FF     call    00409038
004C317F    8B55 F0         mov     edx, dword ptr [ebp-10]
004C3182    A1 0C194E00     mov     eax, dword ptr [4E190C]
004C3187    E8 D819F4FF     call    00404B64
004C318C    A1 C41A4E00     mov     eax, dword ptr [4E1AC4]
004C3191    8338 00         cmp     dword ptr [eax], 0
004C3194    0F84 9C000000   je      004C3236
004C319A    A1 0C194E00     mov     eax, dword ptr [4E190C]
004C319F    8338 00         cmp     dword ptr [eax], 0
004C31A2    0F84 8E000000   je      004C3236
004C31A8    B2 01           mov     dl, 1
004C31AA    A1 98C94600     mov     eax, dword ptr [46C998]
004C31AF    E8 E498FAFF     call    0046CA98
004C31B4    8BF0            mov     esi, eax
004C31B6    BA 01000080     mov     edx, 80000001
004C31BB    8BC6            mov     eax, esi
004C31BD    E8 7699FAFF     call    0046CB38
004C31C2    B1 01           mov     cl, 1
004C31C4    BA A8324C00     mov     edx, 004C32A8                     ; \Software\Cool CD Ripper
004C31C9    8BC6            mov     eax, esi
004C31CB    E8 CC99FAFF     call    0046CB9C
004C31D0    84C0            test    al, al
004C31D2    74 28           je      short 004C31FC
004C31D4    8B0D C41A4E00   mov     ecx, dword ptr [4E1AC4]           ; CoolCDRi.004E3428
004C31DA    8B09            mov     ecx, dword ptr [ecx]
004C31DC    BA CC324C00     mov     edx, 004C32CC                     ; user
004C31E1    8BC6            mov     eax, esi
004C31E3    E8 509BFAFF     call    0046CD38
004C31E8    8B0D 0C194E00   mov     ecx, dword ptr [4E190C]           ; CoolCDRi.004E342C
004C31EE    8B09            mov     ecx, dword ptr [ecx]
004C31F0    BA DC324C00     mov     edx, 004C32DC                     ; Key
004C31F5    8BC6            mov     eax, esi
004C31F7    E8 3C9BFAFF     call    0046CD38
004C31FC    8BC6            mov     eax, esi
004C31FE    E8 A10BF4FF     call    00403DA4
004C3203    A1 C41A4E00     mov     eax, dword ptr [4E1AC4]
004C3208    8338 00         cmp     dword ptr [eax], 0
004C320B    74 29           je      short 004C3236
004C320D    8D55 FC         lea     edx, dword ptr [ebp-4]
004C3210    A1 C41A4E00     mov     eax, dword ptr [4E1AC4]
004C3215    8B00            mov     eax, dword ptr [eax]
004C3217    E8 74640000     call    004C9690                          ; 软件的算法CALL在这里
004C321C    8B45 FC         mov     eax, dword ptr [ebp-4]
004C321F    8B15 0C194E00   mov     edx, dword ptr [4E190C]           ; CoolCDRi.004E342C
004C3225    8B12            mov     edx, dword ptr [edx]
004C3227    E8 E01CF4FF     call    00404F0C                          ; 这里进行明码比较EXA即为真码
004C322C    75 08           jnz     short 004C3236
004C322E    A1 98184E00     mov     eax, dword ptr [4E1898]
004C3233    C600 01         mov     byte ptr [eax], 1
004C3236    A1 98184E00     mov     eax, dword ptr [4E1898]
004C323B    8038 00         cmp     byte ptr [eax], 0
004C323E    74 0C           je      short 004C324C
004C3240    B8 E8324C00     mov     eax, 004C32E8                     ; Thanks for your registration!
004C3245    E8 92C3F7FF     call    0043F5DC
004C324A    EB 0A           jmp     short 004C3256
004C324C    B8 10334C00     mov     eax, 004C3310                     ; The registration infomation is not correct!


==================软件的算法CALL 004C9690 F7跟进==================

004C9690    55              push    ebp
004C9691    8BEC            mov     ebp, esp
004C9693    33C9            xor     ecx, ecx
004C9695    51              push    ecx
004C9696    51              push    ecx
004C9697    51              push    ecx
004C9698    51              push    ecx
004C9699    51              push    ecx
004C969A    51              push    ecx
004C969B    51              push    ecx
004C969C    53              push    ebx
004C969D    8BDA            mov     ebx, edx
004C969F    8945 FC         mov     dword ptr [ebp-4], eax
004C96A2    8B45 FC         mov     eax, dword ptr [ebp-4]
004C96A5    E8 06B9F3FF     call    00404FB0
004C96AA    33C0            xor     eax, eax
004C96AC    55              push    ebp
004C96AD    68 33974C00     push    004C9733
004C96B2    64:FF30         push    dword ptr fs:[eax]
004C96B5    64:8920         mov     dword ptr fs:[eax], esp
004C96B8    8D55 E4         lea     edx, dword ptr [ebp-1C]
004C96BB    8B45 FC         mov     eax, dword ptr [ebp-4]
004C96BE    E8 75F9F3FF     call    00409038
004C96C3    8B45 E4         mov     eax, dword ptr [ebp-1C]
004C96C6    8D55 E8         lea     edx, dword ptr [ebp-18]
004C96C9    E8 1AF7F3FF     call    00408DE8                          ; 该CALL将用户名转化为大写
004C96CE    8B55 E8         mov     edx, dword ptr [ebp-18]
004C96D1    8D45 F8         lea     eax, dword ptr [ebp-8]
004C96D4    B9 48974C00     mov     ecx, 004C9748                     ; ASCII "zhiyuan"
004C96D9    E8 36B7F3FF     call    00404E14
004C96DE    8D45 F4         lea     eax, dword ptr [ebp-C]
004C96E1    BA 58974C00     mov     edx, 004C9758                     ; ASCII "MagicUtils"
004C96E6    E8 BDB4F3FF     call    00404BA8
004C96EB    8D45 F0         lea     eax, dword ptr [ebp-10]
004C96EE    BA 6C974C00     mov     edx, 004C976C                     ; ASCII "Cool_CD_Converter"
004C96F3    E8 B0B4F3FF     call    00404BA8
004C96F8    8D45 EC         lea     eax, dword ptr [ebp-14]
004C96FB    BA 88974C00     mov     edx, 004C9788                     ; ASCII "1.15"
004C9700    E8 A3B4F3FF     call    00404BA8
004C9705    8B45 EC         mov     eax, dword ptr [ebp-14]
004C9708    50              push    eax
004C9709    53              push    ebx
004C970A    8B4D F0         mov     ecx, dword ptr [ebp-10]
004C970D    8B55 F4         mov     edx, dword ptr [ebp-C]
004C9710    8B45 F8         mov     eax, dword ptr [ebp-8]
004C9713    E8 68A0FFFF     call    004C3780                          ; 软件的算法CALL
004C9718    33C0            xor     eax, eax
004C971A    5A              pop     edx
004C971B    59              pop     ecx
004C971C    59              pop     ecx
004C971D    64:8910         mov     dword ptr fs:[eax], edx
004C9720    68 3A974C00     push    004C973A
004C9725    8D45 E4         lea     eax, dword ptr [ebp-1C]
004C9728    BA 07000000     mov     edx, 7
004C972D    E8 02B4F3FF     call    00404B34
004C9732    C3              retn

==================将用户名转为大写的代码(高手飘过)==================

00408E05    85DB            test    ebx, ebx
00408E07    74 15           je      short 00408E1E
00408E09    8A02            mov     al, byte ptr [edx]              ; 把用户名的字母依次放AL中
00408E0B    3C 61           cmp     al, 61                          ; AL和61H比较,和a比较
00408E0D    72 06           jb      short 00408E15                  ; 小于则飞走
00408E0F    3C 7A           cmp     al, 7A                          ; 7A=z
00408E11    77 02           ja      short 00408E15
00408E13    2C 20           sub     al, 20                          ; AL-20 这里就是小写变大写
00408E15    8806            mov     byte ptr [esi], al              ; AL放入[ESI]中,将用户名转化为大写后的数据地址
00408E17    42              inc     edx
00408E18    46              inc     esi
00408E19    4B              dec     ebx
00408E1A    85DB            test    ebx, ebx
00408E1C  ^ 75 EB           jnz     short 00408E09
00408E1E    5F              pop     edi
00408E1F    5E              pop     esi
00408E20    5B              pop     ebx
00408E21    C3              retn

==================软件的算法CALL 004C3780 部分==================


004C3780    55              push    ebp
004C3781    8BEC            mov     ebp, esp
004C3783    83C4 EC         add     esp, -14
004C3786    53              push    ebx
004C3787    33DB            xor     ebx, ebx                          ; EBX清零
004C3789    895D EC         mov     dword ptr [ebp-14], ebx
004C378C    895D F0         mov     dword ptr [ebp-10], ebx
004C378F    894D F4         mov     dword ptr [ebp-C], ecx
004C3792    8955 F8         mov     dword ptr [ebp-8], edx
004C3795    8945 FC         mov     dword ptr [ebp-4], eax
004C3798    8B45 FC         mov     eax, dword ptr [ebp-4]
004C379B    E8 1018F4FF     call    00404FB0
004C37A0    8B45 F8         mov     eax, dword ptr [ebp-8]
004C37A3    E8 0818F4FF     call    00404FB0
004C37A8    8B45 F4         mov     eax, dword ptr [ebp-C]
004C37AB    E8 0018F4FF     call    00404FB0
004C37B0    8B45 0C         mov     eax, dword ptr [ebp+C]
004C37B3    E8 F817F4FF     call    00404FB0
004C37B8    33C0            xor     eax, eax
004C37BA    55              push    ebp
004C37BB    68 26384C00     push    004C3826
004C37C0    64:FF30         push    dword ptr fs:[eax]
004C37C3    64:8920         mov     dword ptr fs:[eax], esp
004C37C6    FF75 FC         push    dword ptr [ebp-4]
004C37C9    FF75 F8         push    dword ptr [ebp-8]
004C37CC    FF75 F4         push    dword ptr [ebp-C]
004C37CF    FF75 0C         push    dword ptr [ebp+C]
004C37D2    8B45 0C         mov     eax, dword ptr [ebp+C]
004C37D5    50              push    eax
004C37D6    8D45 EC         lea     eax, dword ptr [ebp-14]
004C37D9    50              push    eax
004C37DA    8B4D F4         mov     ecx, dword ptr [ebp-C]
004C37DD    8B55 F8         mov     edx, dword ptr [ebp-8]
004C37E0    8B45 FC         mov     eax, dword ptr [ebp-4]
004C37E3    E8 80FDFFFF     call    004C3568                          ; 得到第五个字符串(这里太复杂了,汗)
004C37E8    FF75 EC         push    dword ptr [ebp-14]
004C37EB    8D45 F0         lea     eax, dword ptr [ebp-10]
004C37EE    BA 05000000     mov     edx, 5
004C37F3    E8 9016F4FF     call    00404E88                          ; 将这5个字符串连接
004C37F8    8B55 08         mov     edx, dword ptr [ebp+8]
004C37FB    8B45 F0         mov     eax, dword ptr [ebp-10]
004C37FE    E8 31000000     call    004C3834                          ; 软件的算法CALL,我们F7跟进
004C3803    33C0            xor     eax, eax
004C3805    5A              pop     edx
004C3806    59              pop     ecx
004C3807    59              pop     ecx
004C3808    64:8910         mov     dword ptr fs:[eax], edx
004C380B    68 2D384C00     push    004C382D
004C3810    8D45 EC         lea     eax, dword ptr [ebp-14]
004C3813    BA 05000000     mov     edx, 5
004C3818    E8 1713F4FF     call    00404B34
004C381D    8D45 0C         lea     eax, dword ptr [ebp+C]
004C3820    E8 EB12F4FF     call    00404B10
004C3825    C3              retn

==================关键算法CALL 004C3568 这里得到第五个字符串==================
这一部分太烦琐了跟的我头疼,有兴趣的话,大家自己跟一下吧。
用户名(大写)+zhiyuan为第一个字符串;
MagicUtils为第二个字符串;
Cool_CD_Converter为第三个字符串;
1.15为第四个字符串;(汗,这样的话启不每个版本都要换算法?)
第五个字符串由以上四个字符串计算得出: "5(oPkgO_~"

五个字符串连接后的数值:ASCII "NISYzhiyuanMagicUtilsCool_CD_Converter1.15!5(oPkgO_~"

==================软件算法CALL 004C3834 这里得到最终的KEY==================


004C3834    55              push    ebp
004C3835    8BEC            mov     ebp, esp
004C3837    83C4 F4         add     esp, -0C
004C383A    53              push    ebx
004C383B    56              push    esi
004C383C    33C9            xor     ecx, ecx
004C383E    894D F4         mov     dword ptr [ebp-C], ecx
004C3841    8955 F8         mov     dword ptr [ebp-8], edx
004C3844    8945 FC         mov     dword ptr [ebp-4], eax
004C3847    8B45 FC         mov     eax, dword ptr [ebp-4]
004C384A    E8 6117F4FF     call    00404FB0
004C384F    33C0            xor     eax, eax
004C3851    55              push    ebp
004C3852    68 D3384C00     push    004C38D3
004C3857    64:FF30         push    dword ptr fs:[eax]
004C385A    64:8920         mov     dword ptr fs:[eax], esp
004C385D    33DB            xor     ebx, ebx                          ; EBX清零
004C385F    8B45 FC         mov     eax, dword ptr [ebp-4]
004C3862    E8 6115F4FF     call    00404DC8
004C3867    85C0            test    eax, eax
004C3869    7E 2C           jle     short 004C3897
004C386B    BE 01000000     mov     esi, 1                            ; ESI赋初值1
004C3870    8B55 FC         mov     edx, dword ptr [ebp-4]            ; 字符串地址进EDX
004C3873    8A5432 FF       mov     dl, byte ptr [edx+esi-1]          ; 依次取字符串中的字符放到DL中
004C3877    32D3            xor     dl, bl                            ; DL和BL相异或
004C3879    81E2 FF000000   and     edx, 0FF                          ; EDX与0FF做与运算
004C387F    8B1495 680A4E00 mov     edx, dword ptr [edx*4+4E0A68]     ; EDX*4+4E0A68 存放到EDX中
004C3886    C1EB 08         shr     ebx, 8                            ; 逻辑右移8位
004C3889    81E3 FFFFFF00   and     ebx, 0FFFFFF                      ; EBX同0FFFFFF相异或
004C388F    33D3            xor     edx, ebx                          ; EDX和EBX相异或
004C3891    8BDA            mov     ebx, edx                          ; EDX数值放EBX中
004C3893    46              inc     esi                               ; ESI+1
004C3894    48              dec     eax                               ; EAX中存放的是字符串的长度
004C3895  ^ 75 D9           jnz     short 004C3870                    ; 开始循环
004C3897    8BC3            mov     eax, ebx                          ; 次时EDX中数值(转化为小写后)即为软件KEY
004C3899    33D2            xor     edx, edx
004C389B    52              push    edx
004C389C    50              push    eax
004C389D    8D55 F4         lea     edx, dword ptr [ebp-C]
004C38A0    B8 08000000     mov     eax, 8
004C38A5    E8 4A5AF4FF     call    004092F4
004C38AA    8B45 F4         mov     eax, dword ptr [ebp-C]
004C38AD    8B55 F8         mov     edx, dword ptr [ebp-8]
004C38B0    E8 6F55F4FF     call    00408E24                          ; 该CALL将上方计算结果转化为小写
004C38B5    33C0            xor     eax, eax
004C38B7    5A              pop     edx
004C38B8    59              pop     ecx
004C38B9    59              pop     ecx
004C38BA    64:8910         mov     dword ptr fs:[eax], edx
004C38BD    68 DA384C00     push    004C38DA
004C38C2    8D45 F4         lea     eax, dword ptr [ebp-C]
004C38C5    E8 4612F4FF     call    00404B10
004C38CA    8D45 FC         lea     eax, dword ptr [ebp-4]
004C38CD    E8 3E12F4FF     call    00404B10
004C38D2    C3              retn


PS:软件重启时候,调用相同的算法部分进行验证,在这里也可做内存注册机

004C9603    E8 88000000     call    004C9690                         ; 重启验证时的CALL
004C9608    8B45 FC         mov     eax, dword ptr [ebp-4]
004C960B    8B15 2C344E00   mov     edx, dword ptr [4E342C]
004C9611    E8 F6B8F3FF     call    00404F0C                         ; 这里进行明码比较EXA即为真码
004C9616    75 07           jnz     short 004C961F

软件作者在加密上做了稍微的修改,在向注册表保存信息时候做了多重验证,写入的是我们输入的假码,修正了将真码保存的BUG。
注册信息保存在这里:HKEY_USERS\S-1-5-21-746137067-838170752-725345543-500\Software\Cool CD Ripper

算法分析中,还有一部分没有完整写出(生成第五部分字符串的算法部分),一是水平有限,看那的时候已经头大了,另一点就是得吃晚饭了,那位兄弟能补充下的话,哦一会过来学习下.

提供一组可用信息
Name:Nisy
Key   :fbdf40e1
PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2020-4-10 17:02
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2007-5-21 20:31:50 | 显示全部楼层
    等待算法分析完毕!!!
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2007-5-21 21:27:08 | 显示全部楼层
    原帖由 冷血书生 于 2007-5-21 20:31 发表
    等待算法分析完毕!!!



    想偷个懒都被你发现了, 第五个数值那的循环没看懂是怎么弄的, 我得吃饭去了, 一会见 ~~
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-2-26 08:32
  • 签到天数: 19 天

    [LV.4]偶尔看看III

    发表于 2007-5-21 22:57:05 | 显示全部楼层
    老大帮助兄弟们分析分析

    [ 本帖最后由 wzwgp 于 2007-5-21 23:07 编辑 ]
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-5-22 15:18:47 | 显示全部楼层
    需要前辈教导算法分析。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-6-3 00:34:26 | 显示全部楼层
    看了Nisy的文章,感兴趣,于是决定研究一下关键算法CALL 004C3568
    这是我第一次写算法分析文章,难免有许多错误,不足之处还请大家多多指教。
    非常感谢蝙蝠韦一笑, 星云, (_少誘惑Wǒ的关心。
    =================关键算法CALL 004C3568 这里得到第五个字符串
    004C3568  /$  55            push    ebp
    004C3569  |.  8BEC          mov     ebp, esp
    004C356B  |.  83C4 E8       add     esp, -18
    004C356E  |.  53            push    ebx
    004C356F  |.  33DB          xor     ebx, ebx
    004C3571  |.  895D E8       mov     dword ptr [ebp-18], ebx
    004C3574  |.  895D EC       mov     dword ptr [ebp-14], ebx
    004C3577  |.  895D F0       mov     dword ptr [ebp-10], ebx
    004C357A  |.  894D F4       mov     dword ptr [ebp-C], ecx
    004C357D  |.  8955 F8       mov     dword ptr [ebp-8], edx
    004C3580  |.  8945 FC       mov     dword ptr [ebp-4], eax
    004C3583  |.  8B45 FC       mov     eax, dword ptr [ebp-4]           ;  用户名(大写)+zhiyuan
    004C3586  |.  E8 251AF4FF   call    00404FB0
    004C358B  |.  8B45 F8       mov     eax, dword ptr [ebp-8]           ;  ASCII "MagicUtils"
    004C358E  |.  E8 1D1AF4FF   call    00404FB0
    004C3593  |.  8B45 F4       mov     eax, dword ptr [ebp-C]           ;  ASCII "Cool_CD_Converter"
    004C3596  |.  E8 151AF4FF   call    00404FB0
    004C359B  |.  8B45 0C       mov     eax, dword ptr [ebp+C]           ;  ASCII "1.15"
    004C359E  |.  E8 0D1AF4FF   call    00404FB0
    004C35A3  |.  33C0          xor     eax, eax
    004C35A5  |.  55            push    ebp
    004C35A6  |.  68 23364C00   push    004C3623
    004C35AB  |.  64:FF30       push    dword ptr fs:[eax]
    004C35AE  |.  64:8920       mov     dword ptr fs:[eax], esp
    004C35B1  |.  33D2          xor     edx, edx
    004C35B3  |.  8B45 0C       mov     eax, dword ptr [ebp+C]
    004C35B6  |.  E8 B55DF4FF   call    00409370
    004C35BB  |.  8BD0          mov     edx, eax
    004C35BD  |.  8D4D F0       lea     ecx, dword ptr [ebp-10]
    004C35C0  |.  B8 34364C00   mov     eax, 004C3634
    004C35C5  |.  E8 6E000000   call    004C3638
    004C35CA  |.  8B45 F4       mov     eax, dword ptr [ebp-C]           ;  ASCII "Cool_CD_Converter"
    004C35CD  |.  E8 EE19F4FF   call    00404FC0
    004C35D2  |.  8D4D EC       lea     ecx, dword ptr [ebp-14]          ;  堆栈地址=0012FEF0
    004C35D5  |.  33D2          xor     edx, edx
    004C35D7  |.  E8 5C000000   call    004C3638                         ;  在这里关键算法跟进,为什么呢?因为在这里跟进才是计算第五个字符串的开始
    004C35DC  |.  8B45 FC       mov     eax, dword ptr [ebp-4]           ;  用户名(大写)+zhiyuan
    004C35DF  |.  E8 DC19F4FF   call    00404FC0
    004C35E4  |.  8D4D E8       lea     ecx, dword ptr [ebp-18]          ;  堆栈地址=0012FEEC
    004C35E7  |.  33D2          xor     edx, edx
    004C35E9  |.  E8 4A000000   call    004C3638                         ;  跟进继续计算第五个字符串值
    004C35EE  |.  8B45 F8       mov     eax, dword ptr [ebp-8]           ;  ASCII "MagicUtils"
    004C35F1  |.  E8 CA19F4FF   call    00404FC0
    004C35F6  |.  8B4D 08       mov     ecx, dword ptr [ebp+8]           ;  堆栈 ss:[0012FF0C]=0012FF34
    004C35F9  |.  33D2          xor     edx, edx
    004C35FB  |.  E8 38000000   call    004C3638                         ;  跟进得到第五个字符串的值
    004C3600  |.  33C0          xor     eax, eax
    004C3602  |.  5A            pop     edx
    004C3603  |.  59            pop     ecx
    004C3604  |.  59            pop     ecx
    004C3605  |.  64:8910       mov     dword ptr fs:[eax], edx
    004C3608  |.  68 2A364C00   push    004C362A
    004C360D  |>  8D45 E8       lea     eax, dword ptr [ebp-18]
    004C3610  |.  BA 06000000   mov     edx, 6
    004C3615  |.  E8 1A15F4FF   call    00404B34
    004C361A  |.  8D45 0C       lea     eax, dword ptr [ebp+C]
    004C361D  |.  E8 EE14F4FF   call    00404B10
    004C3622  \.  C3            retn
    004C3623   .^ E9 100FF4FF   jmp     00404538
    004C3628   .^ EB E3         jmp     short 004C360D
    004C362A   .  5B            pop     ebx
    004C362B   .  8BE5          mov     esp, ebp
    004C362D   .  5D            pop     ebp
    004C362E   .  C2 0800       retn    8
    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
    ====================================
    ================== ASCII"Cool_CD_Converter"的关键算法CALL  004C3638
    004C3638  /$  55            push    ebp
    004C3639  |.  8BEC          mov     ebp, esp
    004C363B  |.  83C4 EC       add     esp, -14
    004C363E  |.  53            push    ebx
    004C363F  |.  56            push    esi
    004C3640  |.  57            push    edi
    004C3641  |.  33DB          xor     ebx, ebx
    004C3643  |.  895D EC       mov     dword ptr [ebp-14], ebx
    004C3646  |.  895D F0       mov     dword ptr [ebp-10], ebx
    004C3649  |.  894D F8       mov     dword ptr [ebp-8], ecx
    004C364C  |.  8BF2          mov     esi, edx
    004C364E  |.  8945 FC       mov     dword ptr [ebp-4], eax
    004C3651  |.  33C0          xor     eax, eax
    004C3653  |.  55            push    ebp
    004C3654  |.  68 72374C00   push    004C3772
    004C3659  |.  64:FF30       push    dword ptr fs:[eax]
    004C365C  |.  64:8920       mov     dword ptr fs:[eax], esp
    004C365F  |.  8D45 F0       lea     eax, dword ptr [ebp-10]
    004C3662  |.  8B55 FC       mov     edx, dword ptr [ebp-4]
    004C3665  |.  E8 9616F4FF   call    00404D00
    004C366A  |.  8B45 F0       mov     eax, dword ptr [ebp-10]
    004C366D  |.  E8 5617F4FF   call    00404DC8                         ;  call计算字符串长度
    004C3672  |.  8BD8          mov     ebx, eax
    004C3674  |.  85DB          test    ebx, ebx
    004C3676  |.  75 13         jnz     short 004C368B
    004C3678  |.  8935 F8334E00 mov     dword ptr [4E33F8], esi
    004C367E  |.  6BC6 64       imul    eax, esi, 64
    004C3681  |.  A3 FC334E00   mov     dword ptr [4E33FC], eax
    004C3686  |.  E9 CC000000   jmp     004C3757
    004C368B  |>  8B45 F8       mov     eax, dword ptr [ebp-8]
    004C368E  |.  E8 7D14F4FF   call    00404B10
    004C3693  |.  8BFB          mov     edi, ebx
    004C3695  |.  4F            dec     edi
    004C3696  |.  85FF          test    edi, edi
    004C3698  |.  0F8C B9000000 jl      004C3757                         ;  检查字符串长度是否为零,为零则跳走
    004C369E  |.  47            inc     edi
    004C369F  |.  33F6          xor     esi, esi
    004C36A1  |>  8B45 FC       /mov     eax, dword ptr [ebp-4]          ;  字符串地址进eax
    004C36A4  |.  8A0430        |mov     al, byte ptr [eax+esi]          ;  依次取字符串中的字符放到al中
    004C36A7  |.  3C 20         |cmp     al, 20
    004C36A9  |.  0F82 A0000000 |jb      004C374F
    004C36AF  |.  3C 7E         |cmp     al, 7E
    004C36B1  |.  0F87 98000000 |ja      004C374F
    004C36B7  |.  8B15 F8334E00 |mov     edx, dword ptr [4E33F8]         ;  [4E33F8]初始值为0,每循环一次更新它的值,这就是为什么选着以ASCII "Cool_CD_Converter"的关键算法CALL  004C3638为计算第五个字符串的开始。本次CALL  004C3638的[4E33F8]的结果值将成为下一次CALL  004C3638中[4E33F8]的开始值.
    004C36BD  |.  81E2 FFFFFF1F |and     edx, 1FFFFFFF
    004C36C3  |.  8B0D F8334E00 |mov     ecx, dword ptr [4E33F8]
    004C36C9  |.  C1E9 1D       |shr     ecx, 1D
    004C36CC  |.  83E1 31       |and     ecx, 31
    004C36CF  |.  33D1          |xor     edx, ecx
    004C36D1  |.  8915 F8334E00 |mov     dword ptr [4E33F8], edx
    004C36D7  |.  8845 F7       |mov     byte ptr [ebp-9], al
    004C36DA  |.  A1 F8334E00   |mov     eax, dword ptr [4E33F8]
    004C36DF  |.  B9 5F000000   |mov     ecx, 5F
    004C36E4  |.  99            |cdq
    004C36E5  |.  F7F9          |idiv    ecx                             ;  [4E33F8]的值除以5F
    004C36E7  |.  33D2          |xor     edx, edx
    004C36E9  |.  8A55 F7       |mov     dl, byte ptr [ebp-9]
    004C36EC  |.  83EA 20       |sub     edx, 20
    004C36EF  |.  2BC2          |sub     eax, edx
    004C36F1  |.  E8 32FEFFFF   |call    004C3528                        ;  软件的算法CALL,我们F7跟进
    004C36F6  |.  8BD8          |mov     ebx, eax                        ;  获得eax值
    004C36F8  |.  80C3 20       |add     bl, 20
    004C36FB  |.  FF05 FC334E00 |inc     dword ptr [4E33FC]                  ;[4E33FC] 初始值为0,每循环一次它的值加1,这就是为什么选着以ASCII "Cool_CD_Converter"的关键算法CALL  004C3638为计算第五个字符串的开始. 本次CALL  004C3638的[4E33FC]的结果值将成为下一次CALL  004C3638中[4E33FC]的开始值.
    004C3701  |.  813D FC334E00>|cmp     dword ptr [4E33FC], 5179
    004C370B  |.  7C 07         |jl      short 004C3714
    004C370D  |.  33C0          |xor     eax, eax
    004C370F  |.  A3 FC334E00   |mov     dword ptr [4E33FC], eax
    004C3714  |>  8A45 F7       |mov     al, byte ptr [ebp-9]
    004C3717  |.  32C3          |xor     al, bl
    004C3719  |.  25 FF000000   |and     eax, 0FF
    004C371E  |.  8B15 F8334E00 |mov     edx, dword ptr [4E33F8]
    004C3724  |.  0315 F8334E00 |add     edx, dword ptr [4E33F8]
    004C372A  |.  03C2          |add     eax, edx
    004C372C  |.  0305 FC334E00 |add     eax, dword ptr [4E33FC]
    004C3732  |.  A3 F8334E00   |mov     dword ptr [4E33F8], eax
    004C3737  |.  8D45 EC       |lea     eax, dword ptr [ebp-14]
    004C373A  |.  8BD3          |mov     edx, ebx
    004C373C  |.  E8 AF15F4FF   |call    00404CF0
    004C3741  |.  8B55 EC       |mov     edx, dword ptr [ebp-14]
    004C3744  |.  8B45 F8       |mov     eax, dword ptr [ebp-8]
    004C3747  |.  E8 8416F4FF   |call    00404DD0
    004C374C  |.  8B45 F8       |mov     eax, dword ptr [ebp-8]
    004C374F  |>  46            |inc     esi
    004C3750  |.  4F            |dec     edi                             ;  edi=字符串长度减1
    004C3751  |.^ 0F85 4AFFFFFF \jnz     004C36A1
    004C3757  |>  33C0          xor     eax, eax
    004C3759  |.  5A            pop     edx
    004C375A  |.  59            pop     ecx
    004C375B  |.  59            pop     ecx
    004C375C  |.  64:8910       mov     dword ptr fs:[eax], edx
    004C375F  |.  68 79374C00   push    004C3779
    004C3764  |>  8D45 EC       lea     eax, dword ptr [ebp-14]
    004C3767  |.  BA 02000000   mov     edx, 2
    004C376C  |.  E8 C313F4FF   call    00404B34
    004C3771  \.  C3            retn
    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
    ================== ASCII"用户名(大写)+zhiyuan "的关键算法CALL  004C3638
    算法分析如上。
    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
    ================== ASCII "MagicUtils"的关键算法CALL  004C3638
    算法分析如上。
    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
    ==================算法CALL  004C3528
    004C3528  /$  3D 1C250000   cmp     eax, 251C
    004C352D  |.  7C 0C         jl      short 004C353B
    004C352F  |>  2D 1C250000   /sub     eax, 251C                       ;  
    004C3534  |.  3D 1C250000   |cmp     eax, 251C
    004C3539  |.^ 7D F4         \jge     short 004C352F
    004C353B  |>  3D B6030000   cmp     eax, 3B6
    004C3540  |.  7C 0C         jl      short 004C354E
    004C3542  |>  2D B6030000   /sub     eax, 3B6
    004C3547  |.  3D B6030000   |cmp     eax, 3B6
    004C354C  |.^ 7D F4         \jge     short 004C3542
    004C354E  |>  83F8 5F       cmp     eax, 5F
    004C3551  |.  7C 08         jl      short 004C355B
    004C3553  |>  83E8 5F       /sub     eax, 5F
    004C3556  |.  83F8 5F       |cmp     eax, 5F
    004C3559  |.^ 7D F8         \jge     short 004C3553
    004C355B  |>  85C0          test    eax, eax
    004C355D  |.  7D 07         jge     short 004C3566
    004C355F  |>  83C0 5F       /add     eax, 5F
    004C3562  |.  85C0          |test    eax, eax
    004C3564  |.^ 7C F9         \jl      short 004C355F
    004C3566  \>  C3            retn
    这里将eax同251C比较,小于同3B6比较,大于减去251C,直到小于251C
    当eax小于251C时同3B6比较,小于同5F比较,大于减去3B6,直到小于3B6
    当eax小于3B6时同5F比较,小于者test    eax, eax,大于减去5F,直到小于5F
    test    eax, eax,当eax大于等于0返回,否则eax值加5F,还是小于在加5F直到
    大于等于0

    [ 本帖最后由 交响诗篇 于 2007-6-3 00:39 编辑 ]
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-12-6 09:28
  • 签到天数: 121 天

    [LV.7]常住居民III

    发表于 2007-6-3 08:38:38 | 显示全部楼层
    有难度,学习中
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-9-23 08:15:09 | 显示全部楼层
    新手,只有看前辈们分析了,顶一个。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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