飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3158|回复: 7

[原创] MouseStar 3.55算法分析

[复制链接]

该用户从未签到

发表于 2009-4-10 00:02:10 | 显示全部楼层 |阅读模式
MouseStar 3.55算法分析
软件大小:735KB 软件类别:国外软件/鼠标键盘  
下载次数:26721 软件授权:共享版
软件语言:英文 运行环境:Win9x/Me/NT/2000/XP/2003
软件评级: 更新时间:2008-1-25 14:51:36
软件下载地址:http://www.onlinedown.net/soft/12912.htm
Nisy老大算法分析地址:http://www.unpack.cn/viewthread.php?tid=12352
    大家好,前两天从《一蓑烟雨》里看到Nisy老大的一篇算法分析,我看到Nisy老大最后说算法分析不难,心想正是在学习算法的

时候,正好抓一个软柿子捏一捏,于是就下了软件来试一试,蛮以为很简单,没有想到碰到了一个硬脑壳,算法分析花了我三个晚上

,字符串串过来串过去串的我头都晕了,所以就有了下面这篇算法分析文章,第一次写算法分析文章,有什么讲的不清楚的请大家谅解。
   
首先当然是查壳了,无壳,Borland Delphi 4.0 - 5.0写的,于是用DEDE和pexplorer找到了注册地址:
    00491BF4  /.  55            push    ebp
     OD载入,下断。
    用户名:qianjiangyue  注册码:0123456789 就这样断下来了。
    00491BF4  /.  55            PUSH EBP
00491BF5  |.  8BEC          MOV EBP,ESP
00491BF7  |.  33C9          XOR ECX,ECX
00491BF9  |.  51            PUSH ECX
00491BFA  |.  51            PUSH ECX
00491BFB  |.  51            PUSH ECX
00491BFC  |.  51            PUSH ECX
00491BFD  |.  51            PUSH ECX
00491BFE  |.  51            PUSH ECX
00491BFF  |.  53            PUSH EBX
00491C00  |.  56            PUSH ESI
00491C01  |.  8BD8          MOV EBX,EAX
00491C03  |.  33C0          XOR EAX,EAX
00491C05  |.  55            PUSH EBP
00491C06  |.  68 301D4900   PUSH MouseSta.00491D30
00491C0B  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
00491C0E  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
00491C11  |.  8D55 F4       LEA EDX,DWORD PTR SS:[EBP-C]
00491C14  |.  8B83 FC020000 MOV EAX,DWORD PTR DS:[EBX+2FC]
00491C1A  |.  E8 05A0F9FF   CALL MouseSta.0042BC24                   ;  取用户名的位数
00491C1F  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]
00491C22  |.  8D55 F8       LEA EDX,DWORD PTR SS:[EBP-8]
00491C25  |.  E8 2E64F7FF   CALL MouseSta.00408058
00491C2A  |.  8D4D FC       LEA ECX,DWORD PTR SS:[EBP-4]
00491C2D  |.  A1 98BB4900   MOV EAX,DWORD PTR DS:[49BB98]
00491C32  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
00491C34  |.  8B55 F8       MOV EDX,DWORD PTR SS:[EBP-8]
00491C37  |.  E8 64560000   CALL MouseSta.004972A0                   ;  注册码算法call,跟进
00491C3C  |.  8D55 EC       LEA EDX,DWORD PTR SS:[EBP-14]
00491C3F  |.  8B83 00030000 MOV EAX,DWORD PTR DS:[EBX+300]
00491C45  |.  E8 DA9FF9FF   CALL MouseSta.0042BC24                   ;  取假码的位数
00491C4A      8B45 EC       MOV EAX,DWORD PTR SS:[EBP-14]
00491C4D  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
00491C50  |.  E8 0364F7FF   CALL MouseSta.00408058
00491C55  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]            ;  假码放入eax
00491C58  |.  8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]             ;  真码给edx,
00491C5B  |.  E8 4C22F7FF   CALL MouseSta.00403EAC                   ;  真假码比较call
00491C60  |.  0F85 8F000000 JNZ MouseSta.00491CF5                    ;  爆破点
00491C66  |.  A1 98BB4900   MOV EAX,DWORD PTR DS:[49BB98]

从00491C37  |.  E8 64560000   CALL MouseSta.004972A0 进入,这个call算法call ,跟进

004972A0  /$  55            PUSH EBP
004972A1  |.  8BEC          MOV EBP,ESP
004972A3  |.  6A 00         PUSH 0
004972A5  |.  6A 00         PUSH 0
004972A7  |.  6A 00         PUSH 0
004972A9  |.  6A 00         PUSH 0
004972AB  |.  6A 00         PUSH 0
004972AD  |.  6A 00         PUSH 0
004972AF  |.  6A 00         PUSH 0
004972B1  |.  53            PUSH EBX
004972B2  |.  8BD9          MOV EBX,ECX
004972B4  |.  8955 FC       MOV DWORD PTR SS:[EBP-4],EDX
004972B7  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004972BA  |.  E8 91CCF6FF   CALL MouseSta.00403F50
004972BF  |.  33C0          XOR EAX,EAX
004972C1  |.  55            PUSH EBP
004972C2  |.  68 48734900   PUSH MouseSta.00497348
004972C7  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
004972CA  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
004972CD  |.  8D55 E4       LEA EDX,DWORD PTR SS:[EBP-1C]
004972D0  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ;  用户名放入eax
004972D3  |.  E8 800DF7FF   CALL MouseSta.00408058
004972D8  |.  8B45 E4       MOV EAX,DWORD PTR SS:[EBP-1C]
004972DB  |.  8D55 E8       LEA EDX,DWORD PTR SS:[EBP-18]
004972DE  |.  E8 650BF7FF   CALL MouseSta.00407E48                   ;  把用户名转成大写
004972E3  |.  8B55 E8       MOV EDX,DWORD PTR SS:[EBP-18]
004972E6  |.  8D45 F8       LEA EAX,DWORD PTR SS:[EBP-8]
004972E9  |.  B9 5C734900   MOV ECX,MouseSta.0049735C                ;  ASCII "DELPHI2005"
004972EE  |.  E8 F5CAF6FF   CALL MouseSta.00403DE8
004972F3  |.  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]
004972F6  |.  BA 70734900   MOV EDX,MouseSta.00497370                ;  ASCII "MagicUtils2005"
004972FB  |.  E8 B4C8F6FF   CALL MouseSta.00403BB4
00497300  |.  8D45 F0       LEA EAX,DWORD PTR SS:[EBP-10]
00497303  |.  BA 88734900   MOV EDX,MouseSta.00497388                ;  ASCII "zhiyuan"
00497308  |.  E8 A7C8F6FF   CALL MouseSta.00403BB4
0049730D  |.  8D45 EC       LEA EAX,DWORD PTR SS:[EBP-14]
00497310  |.  BA 98734900   MOV EDX,MouseSta.00497398                ;  ASCII "3.55"
00497315  |.  E8 9AC8F6FF   CALL MouseSta.00403BB4
0049731A  |.  8B45 EC       MOV EAX,DWORD PTR SS:[EBP-14]
0049731D  |.  50            PUSH EAX
0049731E  |.  53            PUSH EBX
0049731F  |.  8B4D F0       MOV ECX,DWORD PTR SS:[EBP-10]
00497322  |.  8B55 F4       MOV EDX,DWORD PTR SS:[EBP-C]
00497325  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
00497328  |.  E8 1F8EFFFF   CALL MouseSta.0049014C                   ;  关键call,跟进
0049732D  |.  33C0          XOR EAX,EAX
0049732F  |.  5A            POP EDX
00497330  |.  59            POP ECX
00497331  |.  59            POP ECX
00497332  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
00497335  |.  68 4F734900   PUSH MouseSta.0049734F
0049733A  |>  8D45 E4       LEA EAX,DWORD PTR SS:[EBP-1C]
0049733D  |.  BA 07000000   MOV EDX,7
00497342  |.  E8 F9C7F6FF   CALL MouseSta.00403B40
00497347  \.  C3            RETN

跟进去后看到有一些字符串,我们记录下来:
把用户名转成大写:qianjiangyue变大写QIANJIANGYUE
DELPHI2005
MagicUtils2005
zhiyuan
3.55

00497328  |.  E8 1F8EFFFF   CALL MouseSta.0049014C                  这个也是是关键call,跟进


0049014C  /$  55            PUSH EBP
0049014D  |.  8BEC          MOV EBP,ESP
0049014F  |.  83C4 EC       ADD ESP,-14
00490152  |.  53            PUSH EBX
00490153  |.  33DB          XOR EBX,EBX
00490155  |.  895D EC       MOV DWORD PTR SS:[EBP-14],EBX
00490158  |.  895D F0       MOV DWORD PTR SS:[EBP-10],EBX
0049015B  |.  894D F4       MOV DWORD PTR SS:[EBP-C],ECX
0049015E  |.  8955 F8       MOV DWORD PTR SS:[EBP-8],EDX
00490161  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
00490164  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
00490167  |.  E8 E43DF7FF   CALL MouseSta.00403F50
0049016C  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
0049016F  |.  E8 DC3DF7FF   CALL MouseSta.00403F50
00490174  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]
00490177  |.  E8 D43DF7FF   CALL MouseSta.00403F50
0049017C  |.  8B45 0C       MOV EAX,DWORD PTR SS:[EBP+C]
0049017F  |.  E8 CC3DF7FF   CALL MouseSta.00403F50
00490184  |.  33C0          XOR EAX,EAX
00490186  |.  55            PUSH EBP
00490187  |.  68 F2014900   PUSH MouseSta.004901F2
0049018C  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
0049018F  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
00490192  |.  FF75 FC       PUSH DWORD PTR SS:[EBP-4]
00490195  |.  FF75 F8       PUSH DWORD PTR SS:[EBP-8]
00490198  |.  FF75 F4       PUSH DWORD PTR SS:[EBP-C]
0049019B  |.  FF75 0C       PUSH DWORD PTR SS:[EBP+C]
0049019E  |.  8B45 0C       MOV EAX,DWORD PTR SS:[EBP+C]
004901A1  |.  50            PUSH EAX
004901A2  |.  8D45 EC       LEA EAX,DWORD PTR SS:[EBP-14]
004901A5  |.  50            PUSH EAX
004901A6  |.  8B4D F4       MOV ECX,DWORD PTR SS:[EBP-C]
004901A9  |.  8B55 F8       MOV EDX,DWORD PTR SS:[EBP-8]
004901AC  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004901AF  |.  E8 80FDFFFF   CALL MouseSta.0048FF34                   ;  算重要字符串,此call一定要跟进
004901B4  |.  FF75 EC       PUSH DWORD PTR SS:[EBP-14]
004901B7  |.  8D45 F0       LEA EAX,DWORD PTR SS:[EBP-10]
004901BA  |.  BA 05000000   MOV EDX,5
004901BF  |.  E8 983CF7FF   CALL MouseSta.00403E5C                   ;  把上面出现的一些字符串连接起来,关键算法

call2
004901C4  |.  8B55 08       MOV EDX,DWORD PTR SS:[EBP+8]
004901C7  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]
004901CA  |.  E8 31000000   CALL MouseSta.00490200                   ;  注册码算法call,跟进
004901CF  |.  33C0          XOR EAX,EAX
004901D1  |.  5A            POP EDX
004901D2  |.  59            POP ECX
004901D3  |.  59            POP ECX
004901D4  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
004901D7  |.  68 F9014900   PUSH MouseSta.004901F9
004901DC  |>  8D45 EC       LEA EAX,DWORD PTR SS:[EBP-14]
004901DF  |.  BA 05000000   MOV EDX,5
004901E4  |.  E8 5739F7FF   CALL MouseSta.00403B40
004901E9  |.  8D45 0C       LEA EAX,DWORD PTR SS:[EBP+C]
004901EC  |.  E8 2B39F7FF   CALL MouseSta.00403B1C
004901F1  \.  C3            RETN
004901F2   .^ E9 3933F7FF   JMP MouseSta.00403530
004901F7   .^ EB E3         JMP SHORT MouseSta.004901DC
004901F9   .  5B            POP EBX
004901FA   .  8BE5          MOV ESP,EBP
004901FC   .  5D            POP EBP
004901FD   .  C2 0800       RETN 8

我们对这个call跟进:004901AF  |.  E8 80FDFFFF   CALL MouseSta.0048FF34                   ;  算重要字符串,此call一定

要跟进


0048FF34  /$  55            PUSH EBP
0048FF35  |.  8BEC          MOV EBP,ESP
0048FF37  |.  83C4 E8       ADD ESP,-18
0048FF3A  |.  53            PUSH EBX
0048FF3B  |.  33DB          XOR EBX,EBX
0048FF3D  |.  895D E8       MOV DWORD PTR SS:[EBP-18],EBX
0048FF40  |.  895D EC       MOV DWORD PTR SS:[EBP-14],EBX
0048FF43  |.  895D F0       MOV DWORD PTR SS:[EBP-10],EBX
0048FF46  |.  894D F4       MOV DWORD PTR SS:[EBP-C],ECX
0048FF49  |.  8955 F8       MOV DWORD PTR SS:[EBP-8],EDX
0048FF4C  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
0048FF4F  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
0048FF52  |.  E8 F93FF7FF   CALL MouseSta.00403F50
0048FF57  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
0048FF5A  |.  E8 F13FF7FF   CALL MouseSta.00403F50
0048FF5F  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]
0048FF62  |.  E8 E93FF7FF   CALL MouseSta.00403F50
0048FF67  |.  8B45 0C       MOV EAX,DWORD PTR SS:[EBP+C]
0048FF6A  |.  E8 E13FF7FF   CALL MouseSta.00403F50
0048FF6F  |.  33C0          XOR EAX,EAX
0048FF71  |.  55            PUSH EBP
0048FF72  |.  68 EFFF4800   PUSH MouseSta.0048FFEF
0048FF77  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
0048FF7A  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
0048FF7D  |.  33D2          XOR EDX,EDX
0048FF7F  |.  8B45 0C       MOV EAX,DWORD PTR SS:[EBP+C]
0048FF82  |.  E8 3182F7FF   CALL MouseSta.004081B8
0048FF87  |.  8BD0          MOV EDX,EAX
0048FF89  |.  8D4D F0       LEA ECX,DWORD PTR SS:[EBP-10]
0048FF8C  |.  B8 00004900   MOV EAX,MouseSta.00490000
0048FF91  |.  E8 6E000000   CALL MouseSta.00490004
0048FF96  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]
0048FF99  |.  E8 C23FF7FF   CALL MouseSta.00403F60
0048FF9E  |.  8D4D EC       LEA ECX,DWORD PTR SS:[EBP-14]
0048FFA1  |.  33D2          XOR EDX,EDX
0048FFA3  |.  E8 5C000000   CALL MouseSta.00490004
0048FFA8  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
0048FFAB  |.  E8 B03FF7FF   CALL MouseSta.00403F60
0048FFB0  |.  8D4D E8       LEA ECX,DWORD PTR SS:[EBP-18]
0048FFB3  |.  33D2          XOR EDX,EDX
0048FFB5  |.  E8 4A000000   CALL MouseSta.00490004                   ;  关键点之一(把大写的用户名和DELPHI2005连接起

来进行计算)
0048FFBA  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
0048FFBD  |.  E8 9E3FF7FF   CALL MouseSta.00403F60
0048FFC2  |.  8B4D 08       MOV ECX,DWORD PTR SS:[EBP+8]
0048FFC5  |.  33D2          XOR EDX,EDX
0048FFC7  |.  E8 38000000   CALL MouseSta.00490004                   ;  又是计算字符串
0048FFCC  |.  33C0          XOR EAX,EAX
0048FFCE  |.  5A            POP EDX
0048FFCF  |.  59            POP ECX
0048FFD0  |.  59            POP ECX
0048FFD1  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
0048FFD4  |.  68 F6FF4800   PUSH MouseSta.0048FFF6
0048FFD9  |>  8D45 E8       LEA EAX,DWORD PTR SS:[EBP-18]
0048FFDC  |.  BA 06000000   MOV EDX,6
0048FFE1  |.  E8 5A3BF7FF   CALL MouseSta.00403B40
0048FFE6  |.  8D45 0C       LEA EAX,DWORD PTR SS:[EBP+C]
0048FFE9  |.  E8 2E3BF7FF   CALL MouseSta.00403B1C
0048FFEE  \.  C3            RETN
0048FFEF   .^ E9 3C35F7FF   JMP MouseSta.00403530
0048FFF4   .^ EB E3         JMP SHORT MouseSta.0048FFD9
0048FFF6   .  5B            POP EBX
0048FFF7   .  8BE5          MOV ESP,EBP
0048FFF9   .  5D            POP EBP
0048FFFA   .  C2 0800       RETN 8




0048FFB5  |.  E8 4A000000   CALL MouseSta.00490004                   ;  关键点之一(把大写的用户名和DELPHI2005连接起

来进行计算

00490004  |.  55          PUSH EBP
00490005  |.  8BEC          MOV EBP,ESP
00490007  |.  83C4 EC       ADD ESP,-14
0049000A  |.  53            PUSH EBX
0049000B  |.  56            PUSH ESI
0049000C  |.  57            PUSH EDI
0049000D  |.  33DB          XOR EBX,EBX
0049000F  |.  895D EC       MOV DWORD PTR SS:[EBP-14],EBX
00490012  |.  895D F0       MOV DWORD PTR SS:[EBP-10],EBX
00490015  |.  894D F8       MOV DWORD PTR SS:[EBP-8],ECX
00490018  |.  8BF2          MOV ESI,EDX
0049001A  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
0049001D  |.  33C0          XOR EAX,EAX
0049001F  |.  55            PUSH EBP
00490020  |.  68 3E014900   PUSH MouseSta.0049013E
00490025  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
00490028  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
0049002B  |.  8D45 F0       LEA EAX,DWORD PTR SS:[EBP-10]
0049002E  |.  8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]
00490031  |.  E8 9E3CF7FF   CALL MouseSta.00403CD4
00490036  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]
00490039  |.  E8 5E3DF7FF   CALL MouseSta.00403D9C
0049003E  |.  8BD8          MOV EBX,EAX
00490040  |.  85DB          TEST EBX,EBX
00490042  |.  75 13         JNZ SHORT MouseSta.00490057
00490044  |.  8935 10CC4900 MOV DWORD PTR DS:[49CC10],ESI
0049004A  |.  6BC6 64       IMUL EAX,ESI,64
0049004D  |.  A3 14CC4900   MOV DWORD PTR DS:[49CC14],EAX
00490052  |.  E9 CC000000   JMP MouseSta.00490123
00490057  |>  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
0049005A  |.  E8 BD3AF7FF   CALL MouseSta.00403B1C
0049005F  |.  8BFB          MOV EDI,EBX
00490061  |.  4F            DEC EDI
00490062  |.  85FF          TEST EDI,EDI
00490064  |.  0F8C B9000000 JL MouseSta.00490123                        下面是第一次循环我做的注释
0049006A  |.  47            INC EDI
0049006B  |.  33F6          XOR ESI,ESI
0049006D  |>  8B45 FC       /MOV EAX,DWORD PTR SS:[EBP-4]            ;  把用户名大写字母+DELPHI2005放到eax中
00490070  |.  8A0430        |MOV AL,BYTE PTR DS:[EAX+ESI]            ;  逐个取字符到AL
00490073  |.  3C 20         |CMP AL,20                               ;  和20比较,低于20则跳
00490075  |.  0F82 A0000000 |JB MouseSta.0049011B
0049007B  |.  3C 7E         |CMP AL,7E                               ;  和7E比较,高于7E则跳
0049007D  |.  0F87 98000000 |JA MouseSta.0049011B                    ;  
00490083  |.  8B15 10CC4900 |MOV EDX,DWORD PTR DS:[49CC10]           ;  固定值2C19
00490089  |.  81E2 FFFFFF1F |AND EDX,1FFFFFFF
0049008F  |.  8B0D 10CC4900 |MOV ECX,DWORD PTR DS:[49CC10]
00490095  |.  C1E9 1D       |SHR ECX,1D
00490098  |.  83E1 31       |AND ECX,31
0049009B  |.  33D1          |XOR EDX,ECX
0049009D  |.  8915 10CC4900 |MOV DWORD PTR DS:[49CC10],EDX           ;  
004900A3  |.  8845 F7       |MOV BYTE PTR SS:[EBP-9],AL
004900A6  |.  A1 10CC4900   |MOV EAX,DWORD PTR DS:[49CC10]           ;  2C19给eax
004900AB  |.  B9 5F000000   |MOV ECX,5F                              ;  除数5F
004900B0  |.  99            |CDQ                                     ;  
004900B1  |.  F7F9          |IDIV ECX                                ;  除法运算,商放到eax中,
004900B3  |.  33D2          |XOR EDX,EDX                             ;  商为76
004900B5  |.  8A55 F7       |MOV DL,BYTE PTR SS:[EBP-9]              ;  取用户名第一个字符到DL
004900B8  |.  83EA 20       |SUB EDX,20                              ;  用户名第一个字符的十六进制数-20
004900BB  |.  2BC2          |SUB EAX,EDX                             ;  商-(第一个字符的十六进制数-20)
004900BD  |.  E8 32FEFFFF   |CALL MouseSta.0048FEF4
004900C2  |.  8BD8          |MOV EBX,EAX
004900C4  |.  80C3 20       |ADD BL,20                               ;  !!!!49010D这个call就是取的这个BL的值,
004900C7  |.  FF05 14CC4900 |INC DWORD PTR DS:[49CC14]               ;  49CC14(值为7)+1
004900CD  |.  813D 14CC4900>|CMP DWORD PTR DS:[49CC14],5179
004900D7  |.  7C 07         |JL SHORT MouseSta.004900E0
004900D9  |.  33C0          |XOR EAX,EAX
004900DB  |.  A3 14CC4900   |MOV DWORD PTR DS:[49CC14],EAX
004900E0  |>  8A45 F7       |MOV AL,BYTE PTR SS:[EBP-9]              ;  取第一位字符给AL
004900E3  |.  32C3          |XOR AL,BL                               ;  al和bl异或
004900E5  |.  25 FF000000   |AND EAX,0FF
004900EA  |.  8B15 10CC4900 |MOV EDX,DWORD PTR DS:[49CC10]           ;  2C19给EDX
004900F0  |.  0315 10CC4900 |ADD EDX,DWORD PTR DS:[49CC10]           ;  两个2C19相加得5832
004900F6  |.  03C2          |ADD EAX,EDX
004900F8  |.  0305 14CC4900 |ADD EAX,DWORD PTR DS:[49CC14]
004900FE  |.  A3 10CC4900   |MOV DWORD PTR DS:[49CC10],EAX
00490103  |.  8D45 EC       |LEA EAX,DWORD PTR SS:[EBP-14]
00490106  |.  8BD3          |MOV EDX,EBX
00490108  |.  E8 B73BF7FF   |CALL MouseSta.00403CC4                  
0049010D  |.  8B55 EC       |MOV EDX,DWORD PTR SS:[EBP-14]
00490110  |.  8B45 F8       |MOV EAX,DWORD PTR SS:[EBP-8]
00490113  |.  E8 8C3CF7FF   |CALL MouseSta.00403DA4
00490118  |.  8B45 F8       |MOV EAX,DWORD PTR SS:[EBP-8]
0049011B  |>  46            |INC ESI                                 ;  esi+1
0049011C  |.  4F            |DEC EDI                                 ;  edi-1
0049011D  |.^ 0F85 4AFFFFFF \JNZ MouseSta.0049006D                   ;  循环
00490123  |>  33C0          XOR EAX,EAX
00490125  |.  5A            POP EDX
00490126  |.  59            POP ECX
00490127  |.  59            POP ECX
00490128  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
0049012B  |.  68 45014900   PUSH MouseSta.00490145
00490130  |>  8D45 EC       LEA EAX,DWORD PTR SS:[EBP-14]
00490133  |.  BA 02000000   MOV EDX,2
00490138  |.  E8 033AF7FF   CALL MouseSta.00403B40
0049013D  \.  C3            RETN
0049013E   .^ E9 ED33F7FF   JMP MouseSta.00403530
00490143   .^ EB EB         JMP SHORT MouseSta.00490130
00490145   .  5F            POP EDI
00490146   .  5E            POP ESI
00490147   .  5B            POP EBX
00490148   .  8BE5          MOV ESP,EBP
0049014A   .  5D            POP EBP
0049014B   .  C3            RETN
这一段循环主要的意思是:
把大写的用户名和DELPHI2005连接起来进行计算
第一:取固定值(被除数)2C19/(除数)5F=(商)
第二步:取大写的用户名的第一位换算过的16进制数-20
第三步:(商)-(取大写的用户名的第一位换算过的16进制数-20)+20
第四步:49CC14(值为7)+1=8  【每次循环要加1】
第五步:第三步得出的数和取大写的用户名的第一个转换过的16进制数  xor
第六步:固定值(2C19)+固定值(2C19)=和(5832)
第七步:把第六步和第五步得出的数相加
第八步:第七步和第四步的数相加
第九步:第八步得出的值就成了第一步的固定值(被除数),但是除数还是没有变
然后循环,我的用户名是:QIANJIANGYUE+DELPHI2005=QIANJIANGYUEDELPHI2005 ,就是要循环22次。
重点:这里我们主要是要得到我们的用户名+DELPHI2005得出来的最后一次循环过后算出的第八步的数值。

因为这个call被调用了两次,下次被调用的时候我们要用到最后一次循环到第八步的数值。

当我们单步走到:0048FFC7  |.  E8 38000000   CALL MouseSta.00490004  这个call,我们单步跟进去,还是调用00490004这个

call.            

00490004  /$  55            PUSH EBP
00490005  |.  8BEC          MOV EBP,ESP
00490007  |.  83C4 EC       ADD ESP,-14
0049000A  |.  53            PUSH EBX
0049000B  |.  56            PUSH ESI
0049000C  |.  57            PUSH EDI
0049000D  |.  33DB          XOR EBX,EBX
0049000F  |.  895D EC       MOV DWORD PTR SS:[EBP-14],EBX
00490012  |.  895D F0       MOV DWORD PTR SS:[EBP-10],EBX
00490015  |.  894D F8       MOV DWORD PTR SS:[EBP-8],ECX
00490018  |.  8BF2          MOV ESI,EDX
0049001A  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
0049001D  |.  33C0          XOR EAX,EAX
0049001F  |.  55            PUSH EBP
00490020  |.  68 3E014900   PUSH MouseSta.0049013E
00490025  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
00490028  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
0049002B  |.  8D45 F0       LEA EAX,DWORD PTR SS:[EBP-10]
0049002E  |.  8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]
00490031  |.  E8 9E3CF7FF   CALL MouseSta.00403CD4
00490036  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]
00490039  |.  E8 5E3DF7FF   CALL MouseSta.00403D9C
0049003E  |.  8BD8          MOV EBX,EAX
00490040  |.  85DB          TEST EBX,EBX
00490042  |.  75 13         JNZ SHORT MouseSta.00490057
00490044  |.  8935 10CC4900 MOV DWORD PTR DS:[49CC10],ESI
0049004A  |.  6BC6 64       IMUL EAX,ESI,64
0049004D  |.  A3 14CC4900   MOV DWORD PTR DS:[49CC14],EAX
00490052  |.  E9 CC000000   JMP MouseSta.00490123
00490057  |>  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
0049005A  |.  E8 BD3AF7FF   CALL MouseSta.00403B1C
0049005F  |.  8BFB          MOV EDI,EBX
00490061  |.  4F            DEC EDI
00490062  |.  85FF          TEST EDI,EDI
00490064  |.  0F8C B9000000 JL MouseSta.00490123
0049006A  |.  47            INC EDI
0049006B  |.  33F6          XOR ESI,ESI
0049006D  |>  8B45 FC       /MOV EAX,DWORD PTR SS:[EBP-4]            ;  MagicUtils2005放到eax中
00490070  |.  8A0430        |MOV AL,BYTE PTR DS:[EAX+ESI]            ;  按位取字符到AL
00490073  |.  3C 20         |CMP AL,20                               ;  和20比较,低于20则跳
00490075  |.  0F82 A0000000 |JB MouseSta.0049011B
0049007B  |.  3C 7E         |CMP AL,7E                               ;  和7E比较,高于7E则跳
0049007D  |.  0F87 98000000 |JA MouseSta.0049011B
00490083  |.  8B15 10CC4900 |MOV EDX,DWORD PTR DS:[49CC10]           ;  因为上次也是调用的这个call,所以上次循环最后

一次的值(180FC3D5)就是这一次的固定值
00490089  |.  81E2 FFFFFF1F |AND EDX,1FFFFFFF
0049008F  |.  8B0D 10CC4900 |MOV ECX,DWORD PTR DS:[49CC10]
00490095  |.  C1E9 1D       |SHR ECX,1D
00490098  |.  83E1 31       |AND ECX,31
0049009B  |.  33D1          |XOR EDX,ECX
0049009D  |.  8915 10CC4900 |MOV DWORD PTR DS:[49CC10],EDX
004900A3  |.  8845 F7       |MOV BYTE PTR SS:[EBP-9],AL
004900A6  |.  A1 10CC4900   |MOV EAX,DWORD PTR DS:[49CC10]           ;  取上次循环最后一次的值(180FC3D5)给eax
004900AB  |.  B9 5F000000   |MOV ECX,5F                              ;  除数5F
004900B0  |.  99            |CDQ
004900B1  |.  F7F9          |IDIV ECX                                ;  除法运算,商放到eax中,
004900B3  |.  33D2          |XOR EDX,EDX
004900B5  |.  8A55 F7       |MOV DL,BYTE PTR SS:[EBP-9]              ;  取第一个字符到DL
004900B8  |.  83EA 20       |SUB EDX,20                              ;  第一个字符的十六进制数-20
004900BB  |.  2BC2          |SUB EAX,EDX                             ;  商-(第一个字符的十六进制数-20)
004900BD  |.  E8 32FEFFFF   |CALL MouseSta.0048FEF4
004900C2  |.  8BD8          |MOV EBX,EAX
004900C4  |.  80C3 20       |ADD BL,20                               ;  取第二次循环到这里BL的值,转换成字符,这一次

大的循环我们主要是需要这个BL循环过后转换的字符,一共需要循环14次,但是我们从第二次循环到BL开始取结果,一共取13次
004900C7  |.  FF05 14CC4900 |INC DWORD PTR DS:[49CC14]               ;  49CC14值(为上次初始值+循环次数)+1
004900CD  |.  813D 14CC4900>|CMP DWORD PTR DS:[49CC14],5179
004900D7  |.  7C 07         |JL SHORT MouseSta.004900E0
004900D9  |.  33C0          |XOR EAX,EAX
004900DB  |.  A3 14CC4900   |MOV DWORD PTR DS:[49CC14],EAX
004900E0  |>  8A45 F7       |MOV AL,BYTE PTR SS:[EBP-9]              ;  取第一位字符给AL
004900E3  |.  32C3          |XOR AL,BL                               ;  al和bl异或
004900E5  |.  25 FF000000   |AND EAX,0FF
004900EA  |.  8B15 10CC4900 |MOV EDX,DWORD PTR DS:[49CC10]           ;  上次循环最后的结果(180FC3D5)给EDX
004900F0  |.  0315 10CC4900 |ADD EDX,DWORD PTR DS:[49CC10]           ;  上次循环最后的结果*2
004900F6  |.  03C2          |ADD EAX,EDX
004900F8  |.  0305 14CC4900 |ADD EAX,DWORD PTR DS:[49CC14]
004900FE  |.  A3 10CC4900   |MOV DWORD PTR DS:[49CC10],EAX
00490103  |.  8D45 EC       |LEA EAX,DWORD PTR SS:[EBP-14]
00490106  |.  8BD3          |MOV EDX,EBX
00490108  |.  E8 B73BF7FF   |CALL MouseSta.00403CC4
0049010D  |.  8B55 EC       |MOV EDX,DWORD PTR SS:[EBP-14]
00490110  |.  8B45 F8       |MOV EAX,DWORD PTR SS:[EBP-8]
00490113  |.  E8 8C3CF7FF   |CALL MouseSta.00403DA4
00490118  |.  8B45 F8       |MOV EAX,DWORD PTR SS:[EBP-8]
0049011B  |>  46            |INC ESI                                 ;  esi+1
0049011C  |.  4F            |DEC EDI                                 ;  edi-1
0049011D  |.^ 0F85 4AFFFFFF \JNZ MouseSta.0049006D                   ;  循环
00490123  |>  33C0          XOR EAX,EAX
00490125  |.  5A            POP EDX
00490126  |.  59            POP ECX
00490127  |.  59            POP ECX
00490128  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
0049012B  |.  68 45014900   PUSH MouseSta.00490145
00490130  |>  8D45 EC       LEA EAX,DWORD PTR SS:[EBP-14]
00490133  |.  BA 02000000   MOV EDX,2
00490138  |.  E8 033AF7FF   CALL MouseSta.00403B40
0049013D  \.  C3            RETN
0049013E   .^ E9 ED33F7FF   JMP MouseSta.00403530
00490143   .^ EB EB         JMP SHORT MouseSta.00490130
00490145   .  5F            POP EDI
00490146   .  5E            POP ESI
00490147   .  5B            POP EBX
00490148   .  8BE5          MOV ESP,EBP
0049014A   .  5D            POP EBP
0049014B   .  C3            RETN

这一段循环主要的意思是:
用这个固定的字符串MagicUtils2005来进行计算,
004900C4  |.  80C3 20       |ADD BL,20                               ;  ,这一次的循环我们主要是需要这个循环过后这个

地址BL的数值转换成字符,一共需要循环14次,但是我们从第二次循环到BL时开始取结果,一共取13次,也就得出13位的字符。

从这个call里取完了字符串后我们返回到

004901AF  |.  E8 80FDFFFF   CALL MouseSta.0048FF34                   ;  算重要字符串,此call一定要跟进
004901B4  |.  FF75 EC       PUSH DWORD PTR SS:[EBP-14]
004901B7  |.  8D45 F0       LEA EAX,DWORD PTR SS:[EBP-10]
004901BA  |.  BA 05000000   MOV EDX,5
004901BF  |.  E8 983CF7FF   CALL MouseSta.00403E5C                   ;  把上面出现的一些字符串连接起来,关键算法

call2
004901C4  |.  8B55 08       MOV EDX,DWORD PTR SS:[EBP+8]
004901C7  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]
004901CA  |.  E8 31000000   CALL MouseSta.00490200                   ;  注册码算法call,跟进
004901CF  |.  33C0          XOR EAX,EAX
004901D1  |.  5A            POP EDX
004901D2  |.  59            POP ECX
004901D3  |.  59            POP ECX
004901D4  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
004901D7  |.  68 F9014900   PUSH MouseSta.004901F9
004901DC  |>  8D45 EC       LEA EAX,DWORD PTR SS:[EBP-14]
004901DF  |.  BA 05000000   MOV EDX,5
004901E4  |.  E8 5739F7FF   CALL MouseSta.00403B40
004901E9  |.  8D45 0C       LEA EAX,DWORD PTR SS:[EBP+C]
004901EC  |.  E8 2B39F7FF   CALL MouseSta.00403B1C
004901F1  \.  C3            RETN

下面这个004901BF  |.  E8 983CF7FF   CALL MouseSta.00403E5C                 它的意思就是把上面出现的一些字符串连接起

来,我经过上两次计算过后注册的用户名连接起来的字符串就是:
QIANJIANGYUEDELPHI2005MagicUtils2005zhiyuan3.55>n3.-.T+~dv|$,   这一些了,一共是61位。

我们接着跟进到真正的注册码算法call里去:
004901CA  |.  E8 31000000   CALL MouseSta.00490200                   ;  注册码算法call,跟进


00490200  /$  55            PUSH EBP
00490201  |.  8BEC          MOV EBP,ESP
00490203  |.  83C4 F4       ADD ESP,-0C
00490206  |.  53            PUSH EBX
00490207  |.  56            PUSH ESI
00490208  |.  33C9          XOR ECX,ECX
0049020A  |.  894D F4       MOV DWORD PTR SS:[EBP-C],ECX
0049020D  |.  8955 F8       MOV DWORD PTR SS:[EBP-8],EDX
00490210  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
00490213  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
00490216  |.  E8 353DF7FF   CALL MouseSta.00403F50
0049021B  |.  33C0          XOR EAX,EAX
0049021D  |.  55            PUSH EBP
0049021E  |.  68 9F024900   PUSH MouseSta.0049029F
00490223  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
00490226  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
00490229  |.  33DB          XOR EBX,EBX
0049022B  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
0049022E  |.  E8 693BF7FF   CALL MouseSta.00403D9C
00490233  |.  85C0          TEST EAX,EAX
00490235  |.  7E 2C         JLE SHORT MouseSta.00490263
00490237  |.  BE 01000000   MOV ESI,1
0049023C  |>  8B55 FC       /MOV EDX,DWORD PTR SS:[EBP-4]            ;  把连接起来的字符串给edx
0049023F  |.  8A5432 FF     |MOV DL,BYTE PTR DS:[EDX+ESI-1]          ;  按位取字符给dl
00490243  |.  32D3          |XOR DL,BL                               ;  和BL异或
00490245  |.  81E2 FF000000 |AND EDX,0FF
0049024B  |.  8B1495 74B649>|MOV EDX,DWORD PTR DS:[EDX*4+49B674]     ;  
00490252  |.  C1EB 08       |SHR EBX,8
00490255  |.  81E3 FFFFFF00 |AND EBX,0FFFFFF
0049025B  |.  33D3          |XOR EDX,EBX
0049025D  |.  8BDA          |MOV EBX,EDX
0049025F  |.  46            |INC ESI                                 ;  esi+1,准备取第二位字符
00490260  |.  48            |DEC EAX                                 ;  eax-1,位数减一
00490261  |.^ 75 D9         \JNZ SHORT MouseSta.0049023C             ; 循环【最后取的就是EDX里的值进行注册码的运算】
00490263  |>  8BC3          MOV EAX,EBX
00490265  |.  33D2          XOR EDX,EDX


这一段循环代码最后取的edx的值就是我们最后注册码需要的关键值。


00490267  |.  52            PUSH EDX                                 ; /Arg2 => 00000000
00490268  |.  50            PUSH EAX                                 ; |Arg1
00490269  |.  8D55 F4       LEA EDX,DWORD PTR SS:[EBP-C]             ; |
0049026C  |.  B8 08000000   MOV EAX,8                                ; |
00490271  |.  E8 C67EF7FF   CALL MouseSta.0040813C                   ; \MouseSta.0040813C
00490276  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]
00490279  |.  8B55 F8       MOV EDX,DWORD PTR SS:[EBP-8]
0049027C  |.  E8 037CF7FF   CALL MouseSta.00407E84                        最后的注册码就在这里运算
  

我们跟进:
00407E84  /$  53            PUSH EBX
00407E85  |.  56            PUSH ESI
00407E86  |.  57            PUSH EDI
00407E87  |.  8BFA          MOV EDI,EDX
00407E89  |.  8BF0          MOV ESI,EAX
00407E8B  |.  8BC6          MOV EAX,ESI
00407E8D  |.  E8 0ABFFFFF   CALL MouseSta.00403D9C
00407E92  |.  8BD8          MOV EBX,EAX
00407E94  |.  8BC7          MOV EAX,EDI
00407E96  |.  8BD3          MOV EDX,EBX
00407E98  |.  E8 33C2FFFF   CALL MouseSta.004040D0
00407E9D  |.  8BD6          MOV EDX,ESI
00407E9F  |.  8B37          MOV ESI,DWORD PTR DS:[EDI]
00407EA1  |.  85DB          TEST EBX,EBX
00407EA3  |.  74 15         JE SHORT MouseSta.00407EBA
00407EA5  |>  8A02          /MOV AL,BYTE PTR DS:[EDX]                ;  把上面一个最后算出来的EDX的值逐位取给al
00407EA7  |.  3C 41         |CMP AL,41                               ;  然后和41比较
00407EA9  |.  72 06         |JB SHORT MouseSta.00407EB1              ;  小于41跳走
00407EAB  |.  3C 5A         |CMP AL,5A                               ;  和5A比较
00407EAD  |.  77 02         |JA SHORT MouseSta.00407EB1              ;  大于5A跳走
00407EAF  |.  04 20         |ADD AL,20                               ;  和20相加
00407EB1  |>  8806          |MOV BYTE PTR DS:[ESI],AL                ;  放到ESI中
00407EB3  |.  42            |INC EDX                                 ;  edx取第二位
00407EB4  |.  46            |INC ESI                                 ;  esi加1,第二位
00407EB5  |.  4B            |DEC EBX                                 ;  位数减1
00407EB6  |.  85DB          |TEST EBX,EBX
00407EB8  |.^ 75 EB         \JNZ SHORT MouseSta.00407EA5             ;  循环
00407EBA  |>  5F            POP EDI
00407EBB  |.  5E            POP ESI
00407EBC  |.  5B            POP EBX
00407EBD  \.  C3            RETN

这一段的意思就是把上面一个最后算出来的EDX的值逐位比较,看是不是大写字母,如果是大写字母就改成小写,如果是别的就不动



现在我们重新分析一下:
第一步:首先把改成大写的用户名和DELPHI2005字符连接起来进行计算,得到一个值。
第二步:接着再用MagicUtils2005这个字符串和上面得到的值进行相关的运算,重新得到一个13位的字符串。
第三步:然后用【大写的用户名 + DELPHI2005 + MagicUtils2005 + zhiyuan + 3.55> + 第二步得到的字符串】一起连接起来
第四步:再用第三步得到的长字符串进行相关的运算,算出的值放到EDX中。
第五步:把第四步得到的值逐位比较,看是不是大写字母,如果是大写字母就改成小写,如果是别的字符就不动。
我的用户名qianjiangyue最后得出的第四步的值是:C8C8414E,那么我的注册码就是c8c8414e


由于是第一次真正的进行算法的分析,可能有些地方说的不是很清楚,请大家谅解,但是大部分我都做了注释。其实和我一样的朋友

只要大家多动手,多练习,就一定能够进步。这个软件其实爆破和追码都比较简单,但是分析起来和我一样的菜鸟朋友可能就有点麻

烦,大家可以下一个回去自己试一下。















-251C-3B6-5F

评分

参与人数 1威望 +40 飘云币 +80 收起 理由
Luckly + 40 + 80 加精鼓励!很不错!

查看全部评分

PYG19周年生日快乐!

该用户从未签到

发表于 2009-4-10 02:19:56 | 显示全部楼层
真够详细的,呵呵,累吧,这个好像是明码比较吧:loveliness:
PYG19周年生日快乐!
  • TA的每日心情
    开心
    2016-4-29 07:52
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2009-4-10 11:24:34 | 显示全部楼层
    不错不错
    很详细
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2009-4-10 11:37:58 | 显示全部楼层
    呵呵,是有明码的,主要是学习算法部分。这个软件给我的感觉是建了一座高大的城堡,但是留了一个空门让我们直接进入。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-4-10 21:45:53 | 显示全部楼层
    详细了。可以作为以后的参考资料了
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-4-10 23:50:32 | 显示全部楼层
    明码比较比较简单的,不过写得比较详细
    PYG19周年生日快乐!
  • TA的每日心情
    郁闷
    2021-10-2 23:26
  • 签到天数: 46 天

    [LV.5]常住居民I

    发表于 2009-4-10 23:57:00 | 显示全部楼层
    有算法就好!/:good /:good /:good
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    前天 21:10
  • 签到天数: 1209 天

    [LV.10]以坛为家III

    发表于 2009-4-13 19:16:44 | 显示全部楼层
    有明码就好!
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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