Nisy 发表于 2007-5-21 20:21:27

Cool CD Ripper V1.26 简单分析

Cool CD RipperV1.26
官方网站:http://www.magicutils.com/

Cool CD RipperV1.26同MouseStarV3.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:
004C313D    64:8920         mov   dword ptr fs:, esp
004C3140    8D55 F4         lea   edx, dword ptr
004C3143    8B83 0C030000   mov   eax, dword ptr
004C3149    E8 C62CF8FF   call    00445E14                        ; 计算用户名的位数
004C314E    8B45 F4         mov   eax, dword ptr
004C3151    8D55 F8         lea   edx, dword ptr
004C3154    E8 DF5EF4FF   call    00409038
004C3159    8B55 F8         mov   edx, dword ptr
004C315C    A1 C41A4E00   mov   eax, dword ptr
004C3161    E8 FE19F4FF   call    00404B64
004C3166    8D55 EC         lea   edx, dword ptr
004C3169    8B83 14030000   mov   eax, dword ptr
004C316F    E8 A02CF8FF   call    00445E14
004C3174    8B45 EC         mov   eax, dword ptr
004C3177    8D55 F0         lea   edx, dword ptr
004C317A    E8 B95EF4FF   call    00409038
004C317F    8B55 F0         mov   edx, dword ptr
004C3182    A1 0C194E00   mov   eax, dword ptr
004C3187    E8 D819F4FF   call    00404B64
004C318C    A1 C41A4E00   mov   eax, dword ptr
004C3191    8338 00         cmp   dword ptr , 0
004C3194    0F84 9C000000   je      004C3236
004C319A    A1 0C194E00   mov   eax, dword ptr
004C319F    8338 00         cmp   dword ptr , 0
004C31A2    0F84 8E000000   je      004C3236
004C31A8    B2 01         mov   dl, 1
004C31AA    A1 98C94600   mov   eax, dword ptr
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          ; CoolCDRi.004E3428
004C31DA    8B09            mov   ecx, dword ptr
004C31DC    BA CC324C00   mov   edx, 004C32CC                     ; user
004C31E1    8BC6            mov   eax, esi
004C31E3    E8 509BFAFF   call    0046CD38
004C31E8    8B0D 0C194E00   mov   ecx, dword ptr          ; CoolCDRi.004E342C
004C31EE    8B09            mov   ecx, dword ptr
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
004C3208    8338 00         cmp   dword ptr , 0
004C320B    74 29         je      short 004C3236
004C320D    8D55 FC         lea   edx, dword ptr
004C3210    A1 C41A4E00   mov   eax, dword ptr
004C3215    8B00            mov   eax, dword ptr
004C3217    E8 74640000   call    004C9690                        ; 软件的算法CALL在这里
004C321C    8B45 FC         mov   eax, dword ptr
004C321F    8B15 0C194E00   mov   edx, dword ptr          ; CoolCDRi.004E342C
004C3225    8B12            mov   edx, dword ptr
004C3227    E8 E01CF4FF   call    00404F0C                        ; 这里进行明码比较EXA即为真码
004C322C    75 08         jnz   short 004C3236
004C322E    A1 98184E00   mov   eax, dword ptr
004C3233    C600 01         mov   byte ptr , 1
004C3236    A1 98184E00   mov   eax, dword ptr
004C323B    8038 00         cmp   byte ptr , 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 , eax
004C96A2    8B45 FC         mov   eax, dword ptr
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:
004C96B5    64:8920         mov   dword ptr fs:, esp
004C96B8    8D55 E4         lea   edx, dword ptr
004C96BB    8B45 FC         mov   eax, dword ptr
004C96BE    E8 75F9F3FF   call    00409038
004C96C3    8B45 E4         mov   eax, dword ptr
004C96C6    8D55 E8         lea   edx, dword ptr
004C96C9    E8 1AF7F3FF   call    00408DE8                        ; 该CALL将用户名转化为大写
004C96CE    8B55 E8         mov   edx, dword ptr
004C96D1    8D45 F8         lea   eax, dword ptr
004C96D4    B9 48974C00   mov   ecx, 004C9748                     ; ASCII "zhiyuan"
004C96D9    E8 36B7F3FF   call    00404E14
004C96DE    8D45 F4         lea   eax, dword ptr
004C96E1    BA 58974C00   mov   edx, 004C9758                     ; ASCII "MagicUtils"
004C96E6    E8 BDB4F3FF   call    00404BA8
004C96EB    8D45 F0         lea   eax, dword ptr
004C96EE    BA 6C974C00   mov   edx, 004C976C                     ; ASCII "Cool_CD_Converter"
004C96F3    E8 B0B4F3FF   call    00404BA8
004C96F8    8D45 EC         lea   eax, dword ptr
004C96FB    BA 88974C00   mov   edx, 004C9788                     ; ASCII "1.15"
004C9700    E8 A3B4F3FF   call    00404BA8
004C9705    8B45 EC         mov   eax, dword ptr
004C9708    50            push    eax
004C9709    53            push    ebx
004C970A    8B4D F0         mov   ecx, dword ptr
004C970D    8B55 F4         mov   edx, dword ptr
004C9710    8B45 F8         mov   eax, dword ptr
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:, edx
004C9720    68 3A974C00   push    004C973A
004C9725    8D45 E4         lea   eax, dword ptr
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             ; 把用户名的字母依次放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 , al            ; AL放入中,将用户名转化为大写后的数据地址
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 , ebx
004C378C    895D F0         mov   dword ptr , ebx
004C378F    894D F4         mov   dword ptr , ecx
004C3792    8955 F8         mov   dword ptr , edx
004C3795    8945 FC         mov   dword ptr , eax
004C3798    8B45 FC         mov   eax, dword ptr
004C379B    E8 1018F4FF   call    00404FB0
004C37A0    8B45 F8         mov   eax, dword ptr
004C37A3    E8 0818F4FF   call    00404FB0
004C37A8    8B45 F4         mov   eax, dword ptr
004C37AB    E8 0018F4FF   call    00404FB0
004C37B0    8B45 0C         mov   eax, dword ptr
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:
004C37C3    64:8920         mov   dword ptr fs:, esp
004C37C6    FF75 FC         push    dword ptr
004C37C9    FF75 F8         push    dword ptr
004C37CC    FF75 F4         push    dword ptr
004C37CF    FF75 0C         push    dword ptr
004C37D2    8B45 0C         mov   eax, dword ptr
004C37D5    50            push    eax
004C37D6    8D45 EC         lea   eax, dword ptr
004C37D9    50            push    eax
004C37DA    8B4D F4         mov   ecx, dword ptr
004C37DD    8B55 F8         mov   edx, dword ptr
004C37E0    8B45 FC         mov   eax, dword ptr
004C37E3    E8 80FDFFFF   call    004C3568                        ; 得到第五个字符串(这里太复杂了,汗)
004C37E8    FF75 EC         push    dword ptr
004C37EB    8D45 F0         lea   eax, dword ptr
004C37EE    BA 05000000   mov   edx, 5
004C37F3    E8 9016F4FF   call    00404E88                        ; 将这5个字符串连接
004C37F8    8B55 08         mov   edx, dword ptr
004C37FB    8B45 F0         mov   eax, dword ptr
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:, edx
004C380B    68 2D384C00   push    004C382D
004C3810    8D45 EC         lea   eax, dword ptr
004C3813    BA 05000000   mov   edx, 5
004C3818    E8 1713F4FF   call    00404B34
004C381D    8D45 0C         lea   eax, dword ptr
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 , ecx
004C3841    8955 F8         mov   dword ptr , edx
004C3844    8945 FC         mov   dword ptr , eax
004C3847    8B45 FC         mov   eax, dword ptr
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:
004C385A    64:8920         mov   dword ptr fs:, esp
004C385D    33DB            xor   ebx, ebx                        ; EBX清零
004C385F    8B45 FC         mov   eax, dword ptr
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             ; 字符串地址进EDX
004C3873    8A5432 FF       mov   dl, byte ptr           ; 依次取字符串中的字符放到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中
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
004C38A0    B8 08000000   mov   eax, 8
004C38A5    E8 4A5AF4FF   call    004092F4
004C38AA    8B45 F4         mov   eax, dword ptr
004C38AD    8B55 F8         mov   edx, dword ptr
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:, edx
004C38BD    68 DA384C00   push    004C38DA
004C38C2    8D45 F4         lea   eax, dword ptr
004C38C5    E8 4612F4FF   call    00404B10
004C38CA    8D45 FC         lea   eax, dword ptr
004C38CD    E8 3E12F4FF   call    00404B10
004C38D2    C3            retn


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

004C9603    E8 88000000   call    004C9690                         ; 重启验证时的CALL
004C9608    8B45 FC         mov   eax, dword ptr
004C960B    8B15 2C344E00   mov   edx, dword ptr
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

冷血书生 发表于 2007-5-21 20:31:50

等待算法分析完毕!!!

Nisy 发表于 2007-5-21 21:27:08

原帖由 冷血书生 于 2007-5-21 20:31 发表 https://www.chinapyg.com/images/common/back.gif
等待算法分析完毕!!!


想偷个懒都被你发现了, 第五个数值那的循环没看懂是怎么弄的, 我得吃饭去了, 一会见 ~~

wzwgp 发表于 2007-5-21 22:57:05

老大帮助兄弟们分析分析

[ 本帖最后由 wzwgp 于 2007-5-21 23:07 编辑 ]

pw2000 发表于 2007-5-22 15:18:47

需要前辈教导算法分析。

交响诗篇 发表于 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 , ebx
004C3574|.895D EC       mov   dword ptr , ebx
004C3577|.895D F0       mov   dword ptr , ebx
004C357A|.894D F4       mov   dword ptr , ecx
004C357D|.8955 F8       mov   dword ptr , edx
004C3580|.8945 FC       mov   dword ptr , eax
004C3583|.8B45 FC       mov   eax, dword ptr          ;用户名(大写)+zhiyuan
004C3586|.E8 251AF4FF   call    00404FB0
004C358B|.8B45 F8       mov   eax, dword ptr          ;ASCII "MagicUtils"
004C358E|.E8 1D1AF4FF   call    00404FB0
004C3593|.8B45 F4       mov   eax, dword ptr          ;ASCII "Cool_CD_Converter"
004C3596|.E8 151AF4FF   call    00404FB0
004C359B|.8B45 0C       mov   eax, dword ptr          ;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:
004C35AE|.64:8920       mov   dword ptr fs:, esp
004C35B1|.33D2          xor   edx, edx
004C35B3|.8B45 0C       mov   eax, dword ptr
004C35B6|.E8 B55DF4FF   call    00409370
004C35BB|.8BD0          mov   edx, eax
004C35BD|.8D4D F0       lea   ecx, dword ptr
004C35C0|.B8 34364C00   mov   eax, 004C3634
004C35C5|.E8 6E000000   call    004C3638
004C35CA|.8B45 F4       mov   eax, dword ptr          ;ASCII "Cool_CD_Converter"
004C35CD|.E8 EE19F4FF   call    00404FC0
004C35D2|.8D4D EC       lea   ecx, dword ptr           ;堆栈地址=0012FEF0
004C35D5|.33D2          xor   edx, edx
004C35D7|.E8 5C000000   call    004C3638                         ;在这里关键算法跟进,为什么呢?因为在这里跟进才是计算第五个字符串的开始
004C35DC|.8B45 FC       mov   eax, dword ptr          ;用户名(大写)+zhiyuan
004C35DF|.E8 DC19F4FF   call    00404FC0
004C35E4|.8D4D E8       lea   ecx, dword ptr           ;堆栈地址=0012FEEC
004C35E7|.33D2          xor   edx, edx
004C35E9|.E8 4A000000   call    004C3638                         ;跟进继续计算第五个字符串值
004C35EE|.8B45 F8       mov   eax, dword ptr          ;ASCII "MagicUtils"
004C35F1|.E8 CA19F4FF   call    00404FC0
004C35F6|.8B4D 08       mov   ecx, dword ptr          ;堆栈 ss:=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:, edx
004C3608|.68 2A364C00   push    004C362A
004C360D|>8D45 E8       lea   eax, dword ptr
004C3610|.BA 06000000   mov   edx, 6
004C3615|.E8 1A15F4FF   call    00404B34
004C361A|.8D45 0C       lea   eax, dword ptr
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"的关键算法CALL004C3638
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 , ebx
004C3646|.895D F0       mov   dword ptr , ebx
004C3649|.894D F8       mov   dword ptr , ecx
004C364C|.8BF2          mov   esi, edx
004C364E|.8945 FC       mov   dword ptr , eax
004C3651|.33C0          xor   eax, eax
004C3653|.55            push    ebp
004C3654|.68 72374C00   push    004C3772
004C3659|.64:FF30       push    dword ptr fs:
004C365C|.64:8920       mov   dword ptr fs:, esp
004C365F|.8D45 F0       lea   eax, dword ptr
004C3662|.8B55 FC       mov   edx, dword ptr
004C3665|.E8 9616F4FF   call    00404D00
004C366A|.8B45 F0       mov   eax, dword ptr
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 , esi
004C367E|.6BC6 64       imul    eax, esi, 64
004C3681|.A3 FC334E00   mov   dword ptr , eax
004C3686|.E9 CC000000   jmp   004C3757
004C368B|>8B45 F8       mov   eax, dword ptr
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           ;字符串地址进eax
004C36A4|.8A0430      |mov   al, byte ptr           ;依次取字符串中的字符放到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          ;初始值为0,每循环一次更新它的值,这就是为什么选着以ASCII "Cool_CD_Converter"的关键算法CALL004C3638为计算第五个字符串的开始。本次CALL004C3638的的结果值将成为下一次CALL004C3638中的开始值.
004C36BD|.81E2 FFFFFF1F |and   edx, 1FFFFFFF
004C36C3|.8B0D F8334E00 |mov   ecx, dword ptr
004C36C9|.C1E9 1D       |shr   ecx, 1D
004C36CC|.83E1 31       |and   ecx, 31
004C36CF|.33D1          |xor   edx, ecx
004C36D1|.8915 F8334E00 |mov   dword ptr , edx
004C36D7|.8845 F7       |mov   byte ptr , al
004C36DA|.A1 F8334E00   |mov   eax, dword ptr
004C36DF|.B9 5F000000   |mov   ecx, 5F
004C36E4|.99            |cdq
004C36E5|.F7F9          |idiv    ecx                           ;的值除以5F
004C36E7|.33D2          |xor   edx, edx
004C36E9|.8A55 F7       |mov   dl, byte ptr
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                   ; 初始值为0,每循环一次它的值加1,这就是为什么选着以ASCII "Cool_CD_Converter"的关键算法CALL004C3638为计算第五个字符串的开始. 本次CALL004C3638的的结果值将成为下一次CALL004C3638中的开始值.
004C3701|.813D FC334E00>|cmp   dword ptr , 5179
004C370B|.7C 07         |jl      short 004C3714
004C370D|.33C0          |xor   eax, eax
004C370F|.A3 FC334E00   |mov   dword ptr , eax
004C3714|>8A45 F7       |mov   al, byte ptr
004C3717|.32C3          |xor   al, bl
004C3719|.25 FF000000   |and   eax, 0FF
004C371E|.8B15 F8334E00 |mov   edx, dword ptr
004C3724|.0315 F8334E00 |add   edx, dword ptr
004C372A|.03C2          |add   eax, edx
004C372C|.0305 FC334E00 |add   eax, dword ptr
004C3732|.A3 F8334E00   |mov   dword ptr , eax
004C3737|.8D45 EC       |lea   eax, dword ptr
004C373A|.8BD3          |mov   edx, ebx
004C373C|.E8 AF15F4FF   |call    00404CF0
004C3741|.8B55 EC       |mov   edx, dword ptr
004C3744|.8B45 F8       |mov   eax, dword ptr
004C3747|.E8 8416F4FF   |call    00404DD0
004C374C|.8B45 F8       |mov   eax, dword ptr
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:, edx
004C375F|.68 79374C00   push    004C3779
004C3764|>8D45 EC       lea   eax, dword ptr
004C3767|.BA 02000000   mov   edx, 2
004C376C|.E8 C313F4FF   call    00404B34
004C3771\.C3            retn
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
================== ASCII"用户名(大写)+zhiyuan "的关键算法CALL004C3638
算法分析如上。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
================== ASCII "MagicUtils"的关键算法CALL004C3638
算法分析如上。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
==================算法CALL004C3528
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 编辑 ]

bhcjl 发表于 2007-6-3 08:38:38

有难度,学习中

zsl01 发表于 2008-9-23 08:15:09

新手,只有看前辈们分析了,顶一个。
页: [1]
查看完整版本: Cool CD Ripper V1.26 简单分析