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 发表 https://www.chinapyg.com/images/common/back.gif
等待算法分析完毕!!!
想偷个懒都被你发现了, 第五个数值那的循环没看懂是怎么弄的, 我得吃饭去了, 一会见 ~~ 老大帮助兄弟们分析分析
[ 本帖最后由 wzwgp 于 2007-5-21 23:07 编辑 ] 需要前辈教导算法分析。 看了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 编辑 ] 有难度,学习中 新手,只有看前辈们分析了,顶一个。
页:
[1]