- UID
- 2198
注册时间2005-6-29
阅读权限255
最后登录1970-1-1
副坛主
该用户从未签到
|
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 |
|