Nisy 发表于 2007-8-12 01:28:46

QQ聊天记录专家(QQ - TM) 2007 算法分析

QQ聊天记录专家(QQ - TM) 2007

软件大小:1581KB
软件类别:国产软件/QQ 专区
下载次数:96683
软件授权:共享版
软件语言:简体中文
运行环境:Win9x/Me/NT/2000/XP/2003
更新时间:2007-7-18 16:58:10
华军下载:http://bj.onlinedown.net/soft/49479.htm

今日无事,下了几个软件测试。软件无壳,反OD,但算法难度一般,并且使用了明码比较,无机器码,所以KEY通用,可以认为这类假密强度的软件基本上就是间接让破解者来做宣传的免费软件。建议该软件加壳来保护,算法上梢做修改即可,不建议采用明码。By:Nisy 07.19



004143D0   .6A FF         PUSH -1                                       ;注册部分从这里开始,我们在这里下断;
004143D2   .68 20D84D00   PUSH QQMsg.004DD820
004143D7   .64:A1 0000000>MOV EAX,DWORD PTR FS:
004143DD   .50            PUSH EAX
004143DE   .83EC 28       SUB ESP,28
004143E1   .53            PUSH EBX
004143E2   .55            PUSH EBP
004143E3   .56            PUSH ESI
004143E4   .57            PUSH EDI
………………
………………
//中间代码省略,主要过程就是将KEY1、KEY2、KEY3、KEY4连接成一个32位的字符串
………………
………………
004146F5   > \8D5424 14   LEA EDX,DWORD PTR SS:
004146F9   .8D4C24 38   LEA ECX,DWORD PTR SS:
004146FD   .E8 9E7FFFFF   CALL QQMsg.0040C6A0                               ;这里是算法CALL,我们跟进;

//跟进算法CALL 0040C6A0:

0040C6A0   $6A FF         PUSH -1
0040C6A2   .68 D8D54D00   PUSH QQMsg.004DD5D8
0040C6A7   .64:A1 0000000>MOV EAX,DWORD PTR FS:
0040C6AD   .50            PUSH EAX
0040C6AE   .81EC BC000000 SUB ESP,0BC
0040C6B4   .A1 A0445000   MOV EAX,DWORD PTR DS:
0040C6B9   .33C4          XOR EAX,ESP
0040C6BB   .898424 B80000>MOV DWORD PTR SS:,EAX
0040C6C2   .53            PUSH EBX
0040C6C3   .55            PUSH EBP
0040C6C4   .56            PUSH ESI
0040C6C5   .57            PUSH EDI
0040C6C6   .A1 A0445000   MOV EAX,DWORD PTR DS:
0040C6CB   .33C4          XOR EAX,ESP
0040C6CD   .50            PUSH EAX
0040C6CE   .8D8424 D00000>LEA EAX,DWORD PTR SS:
0040C6D5   .64:A3 0000000>MOV DWORD PTR FS:,EAX
0040C6DB   .8BF9          MOV EDI,ECX
0040C6DD   .33DB          XOR EBX,EBX
0040C6DF   .68 2D674F00   PUSH QQMsg.004F672D
0040C6E4   .8D4C24 1C   LEA ECX,DWORD PTR SS:
0040C6E8   .897C24 24   MOV DWORD PTR SS:,EDI
0040C6EC   .8BF2          MOV ESI,EDX
0040C6EE   .895C24 20   MOV DWORD PTR SS:,EBX
0040C6F2   .E8 A952FFFF   CALL QQMsg.004019A0
0040C6F7   .BD 01000000   MOV EBP,1
0040C6FC   .89AC24 D80000>MOV DWORD PTR SS:,EBP
0040C703   .8B36          MOV ESI,DWORD PTR DS:                        ;取用户名
0040C705   .395E F4       CMP DWORD PTR DS:,EBX
0040C708   .75 47         JNZ SHORT QQMsg.0040C751                        ;用户名不能为空
0040C70A   .8B4424 18   MOV EAX,DWORD PTR SS:
0040C70E   .83C0 F0       ADD EAX,-10
0040C711   .50            PUSH EAX
0040C712   .E8 D94EFFFF   CALL QQMsg.004015F0
0040C717   .83C0 10       ADD EAX,10
0040C71A   .83C4 04       ADD ESP,4
0040C71D   .8907          MOV DWORD PTR DS:,EAX
0040C71F   .889C24 D80000>MOV BYTE PTR SS:,BL
0040C726   .8B4424 18   MOV EAX,DWORD PTR SS:
0040C72A   .83C0 F0       ADD EAX,-10
0040C72D   .896C24 1C   MOV DWORD PTR SS:,EBP
0040C731   .8D48 0C       LEA ECX,DWORD PTR DS:
0040C734   .83CA FF       OR EDX,FFFFFFFF
0040C737   .F0:0FC111   LOCK XADD DWORD PTR DS:,EDX                  ;LOCK 前缀
0040C73B   .4A            DEC EDX
0040C73C   .85D2          TEST EDX,EDX
0040C73E   .7F 0A         JG SHORT QQMsg.0040C74A
0040C740   .8B08          MOV ECX,DWORD PTR DS:
0040C742   .8B11          MOV EDX,DWORD PTR DS:
0040C744   .50            PUSH EAX
0040C745   .8B42 04       MOV EAX,DWORD PTR DS:
0040C748   .FFD0          CALL EAX
0040C74A   >8BC7          MOV EAX,EDI
0040C74C   .E9 38020000   JMP QQMsg.0040C989
0040C751   >C74424 24 986>MOV DWORD PTR SS:,QQMsg.004F6E98
0040C759   .E8 42CAFFFF   CALL QQMsg.004091A0
0040C75E   .894424 2C   MOV DWORD PTR SS:,EAX
0040C762   .895C24 30   MOV DWORD PTR SS:,EBX
0040C766   .C68424 D80000>MOV BYTE PTR SS:,2
0040C76E   .8BC6          MOV EAX,ESI                                       ;用户名放EAX
0040C770   .889C24 9C0000>MOV BYTE PTR SS:,BL
0040C777   .895C24 44   MOV DWORD PTR SS:,EBX
0040C77B   .895C24 48   MOV DWORD PTR SS:,EBX
0040C77F   .C74424 34 012>MOV DWORD PTR SS:,67452301
0040C787   .C74424 38 89A>MOV DWORD PTR SS:,EFCDAB89
0040C78F   .C74424 3C FED>MOV DWORD PTR SS:,98BADCFE
0040C797   .C74424 40 765>MOV DWORD PTR SS:,10325476
0040C79F   .8D50 01       LEA EDX,DWORD PTR DS:
0040C7A2   >8A08          MOV CL,BYTE PTR DS:
0040C7A4   .83C0 01       ADD EAX,1
0040C7A7   .3ACB          CMP CL,BL
0040C7A9   .^ 75 F7         JNZ SHORT QQMsg.0040C7A2
0040C7AB   .2BC2          SUB EAX,EDX                                       ;计算用户名的位数
0040C7AD   .56            PUSH ESI
0040C7AE   .8D4C24 28   LEA ECX,DWORD PTR SS:
0040C7B2   .E8 E9BEFFFF   CALL QQMsg.004086A0
0040C7B7   .8D7424 24   LEA ESI,DWORD PTR SS:
0040C7BB   .E8 A0BFFFFF   CALL QQMsg.00408760                               ;该CALL 移动了 16位数据
0040C7C0   .8BCE          MOV ECX,ESI
0040C7C2   .51            PUSH ECX
0040C7C3   .E8 28C1FFFF   CALL QQMsg.004088F0                               ;这里都已经将数据计算完毕
0040C7C8   .8BE8          MOV EBP,EAX                                       ;得新数值为用户名的MD5(小写)
0040C7CA   .33FF          XOR EDI,EDI
0040C7CC   .8D50 01       LEA EDX,DWORD PTR DS:
0040C7CF   .90            NOP
0040C7D0   >8A08          MOV CL,BYTE PTR DS:
0040C7D2   .83C0 01       ADD EAX,1
0040C7D5   .3ACB          CMP CL,BL
0040C7D7   .^ 75 F7         JNZ SHORT QQMsg.0040C7D0
0040C7D9   .2BC2          SUB EAX,EDX
0040C7DB   .8D70 FF       LEA ESI,DWORD PTR DS:
0040C7DE   .83FE FF       CMP ESI,-1
0040C7E1   .7E 39         JLE SHORT QQMsg.0040C81C
0040C7E3   >0FBE142E      MOVSX EDX,BYTE PTR DS:                   ;从这里开始计算结果 倒取MD5数值送EDX
0040C7E7   .52            PUSH EDX
0040C7E8   .E8 E16D0200   CALL QQMsg.004335CE                               ;将小写变大写,跟进看一下
//跟进CALL 004335CE
004335CE/$833D 48805000>CMP DWORD PTR DS:,0
004335D5|.75 10         JNZ SHORT QQMsg.004335E7
004335D7|.8B4424 04   MOV EAX,DWORD PTR SS:                      ;把数据送EAX
004335DB|.8D48 9F       LEA ECX,DWORD PTR DS:                     ;的数值-61
004335DE|.83F9 19       CMP ECX,19                                        ;看MD5值是否是小写字母
004335E1|.77 11         JA SHORT QQMsg.004335F4                           ;小于19H说明是小写字母 大于则跳走
004335E3|.83C0 E0       ADD EAX,-20                                       ;EAX-20变为大写
004335E6|.C3            RETN
004335E7|>6A 00         PUSH 0
004335E9|.FF7424 08   PUSH DWORD PTR SS:
004335ED|.E8 C4FEFFFF   CALL QQMsg.004334B6
004335F2|.59            POP ECX
004335F3|.59            POP ECX
004335F4\>C3            RETN
//退出CALL 004335CE
0040C7ED   .8AC8          MOV CL,AL
0040C7EF   .80E9 31       SUB CL,31
0040C7F2   .83C4 04       ADD ESP,4
0040C7F5   .80F9 07       CMP CL,7
0040C7F8   .77 04         JA SHORT QQMsg.0040C7FE                           ;看AL是否 > 38
0040C7FA   .04 01         ADD AL,1                                          ;   < 38 则+1
0040C7FC   .EB 0C         JMP SHORT QQMsg.0040C80A
0040C7FE   >8AD0          MOV DL,AL
0040C800   .80EA 42       SUB DL,42
0040C803   .80FA 03       CMP DL,3                                          ;看AL是否 > 45
0040C806   .77 02         JA SHORT QQMsg.0040C80A
0040C808   .04 07         ADD AL,7                                          ;若 38<AL<45 则 AL+7
0040C80A   >88843C A40000>MOV BYTE PTR SS:,AL                   ;AL 放到这里
0040C811   .83EE 01       SUB ESI,1
0040C814   .83C7 01       ADD EDI,1
0040C817   .83FE FF       CMP ESI,-1
0040C81A   .^ 7F C7         JG SHORT QQMsg.0040C7E3                           ;这里就得出了计算结果
0040C81C   >889C3C A40000>MOV BYTE PTR SS:,BL                   ;从这里开始调换数据
0040C823   .8A8424 A40000>MOV AL,BYTE PTR SS:                     ;取第一位 是字符串首位地址
0040C82A   .0FB68C24 AB00>MOVZX ECX,BYTE PTR SS:                  ;取第八位
0040C832   .0FB69424 B900>MOVZX EDX,BYTE PTR SS:                  ;取第22位
0040C83A   .888424 AB0000>MOV BYTE PTR SS:,AL                     ;第一位放到第八位
0040C841   .8A8424 A70000>MOV AL,BYTE PTR SS:                     ;取第四位
0040C848   .888424 B90000>MOV BYTE PTR SS:,AL                     ;第四位放到第22位
0040C84F   .8A8424 AE0000>MOV AL,BYTE PTR SS:                     ;取第11位
0040C856   .888C24 A40000>MOV BYTE PTR SS:,CL                     ;第八位放第一位
0040C85D   .0FB68C24 C300>MOVZX ECX,BYTE PTR SS:                  ;取第32位
0040C865   .888424 C30000>MOV BYTE PTR SS:,AL                     ;第11位放第32位
0040C86C   .8A8424 BF0000>MOV AL,BYTE PTR SS:                     ;取第28位
0040C873   .889424 A70000>MOV BYTE PTR SS:,DL                     ;第22位放第四位
0040C87A   .0FB69424 C200>MOVZX EDX,BYTE PTR SS:                  ;取第31位
0040C882   .888C24 AE0000>MOV BYTE PTR SS:,CL                     ;第32位放第11位
0040C889   .0FB68C24 B600>MOVZX ECX,BYTE PTR SS:                  ;取第19位
0040C891   .888424 C20000>MOV BYTE PTR SS:,AL                     ;第28位送31位
0040C898   .8A8424 BA0000>MOV AL,BYTE PTR SS:                     ;取第23位
0040C89F   .888424 B60000>MOV BYTE PTR SS:,AL                     ;第23位放第19位
0040C8A6   .8D8424 A40000>LEA EAX,DWORD PTR SS:                     ;数据地址送EAX
0040C8AD   .888C24 BA0000>MOV BYTE PTR SS:,CL                     ;第19位送23位
0040C8B4   .889424 BF0000>MOV BYTE PTR SS:,DL                     ;第31位送28位
0040C8BB   .8D48 01       LEA ECX,DWORD PTR DS:
0040C8BE   .8BFF          MOV EDI,EDI
0040C8C0   >8A10          MOV DL,BYTE PTR DS:
0040C8C2   .83C0 01       ADD EAX,1
0040C8C5   .3AD3          CMP DL,BL
0040C8C7   .^ 75 F7         JNZ SHORT QQMsg.0040C8C0
0040C8C9   .2BC1          SUB EAX,ECX                                       ;计算位数
0040C8CB   .50            PUSH EAX
0040C8CC   .8D9424 A80000>LEA EDX,DWORD PTR SS:
0040C8D3   .52            PUSH EDX
0040C8D4   .8D4C24 20   LEA ECX,DWORD PTR SS:
0040C8D8   .E8 A34FFFFF   CALL QQMsg.00401880
0040C8DD   .8B7424 18   MOV ESI,DWORD PTR SS:
0040C8E1   .8B4E F0       MOV ECX,DWORD PTR DS:
0040C8E4   .8B01          MOV EAX,DWORD PTR DS:
0040C8E6   .8B50 10       MOV EDX,DWORD PTR DS:
0040C8E9   .83C6 F0       ADD ESI,-10
0040C8EC   .FFD2          CALL EDX
0040C8EE   .395E 0C       CMP DWORD PTR DS:,EBX
0040C8F1   .8D4E 0C       LEA ECX,DWORD PTR DS:
0040C8F4   .7C 11         JL SHORT QQMsg.0040C907
0040C8F6   .3B06          CMP EAX,DWORD PTR DS:
0040C8F8   .75 0D         JNZ SHORT QQMsg.0040C907
0040C8FA   .8BFE          MOV EDI,ESI
0040C8FC   .B8 01000000   MOV EAX,1
0040C901   .F0:0FC101   LOCK XADD DWORD PTR DS:,EAX                  ;LOCK 前缀
0040C905   .EB 37         JMP SHORT QQMsg.0040C93E
0040C907   >8B4E 04       MOV ECX,DWORD PTR DS:
0040C90A   .8B10          MOV EDX,DWORD PTR DS:
0040C90C   .8B12          MOV EDX,DWORD PTR DS:
0040C90E   .6A 01         PUSH 1
0040C910   .51            PUSH ECX
0040C911   .8BC8          MOV ECX,EAX
0040C913   .FFD2          CALL EDX
0040C915   .8BF8          MOV EDI,EAX
0040C917   .3BFB          CMP EDI,EBX
0040C919   .75 05         JNZ SHORT QQMsg.0040C920
0040C91B   .^ E9 404DFFFF   JMP QQMsg.00401660
0040C920   >8B46 04       MOV EAX,DWORD PTR DS:
0040C923   .8947 04       MOV DWORD PTR DS:,EAX
0040C926   .8B46 04       MOV EAX,DWORD PTR DS:
0040C929   .83C0 01       ADD EAX,1
0040C92C   .50            PUSH EAX
0040C92D   .83C6 10       ADD ESI,10
0040C930   .56            PUSH ESI
0040C931   .50            PUSH EAX
0040C932   .8D4F 10       LEA ECX,DWORD PTR DS:
0040C935   .51            PUSH ECX
0040C936   .E8 EE530200   CALL QQMsg.00431D29
0040C93B   .83C4 10       ADD ESP,10
0040C93E   >8B7424 20   MOV ESI,DWORD PTR SS:
0040C942   .83C7 10       ADD EDI,10
0040C945   .8D4C24 24   LEA ECX,DWORD PTR SS:
0040C949   .893E          MOV DWORD PTR DS:,EDI
0040C94B   .C74424 1C 010>MOV DWORD PTR SS:,1
0040C953   .C68424 D80000>MOV BYTE PTR SS:,1
0040C95B   .E8 D0BEFFFF   CALL QQMsg.00408830
0040C960   .889C24 D80000>MOV BYTE PTR SS:,BL
0040C967   .8B4424 18   MOV EAX,DWORD PTR SS:
0040C96B   .83C0 F0       ADD EAX,-10
0040C96E   .8D50 0C       LEA EDX,DWORD PTR DS:
0040C971   .83C9 FF       OR ECX,FFFFFFFF
0040C974   .F0:0FC10A   LOCK XADD DWORD PTR DS:,ECX                  ;LOCK 前缀
0040C978   .49            DEC ECX
0040C979   .85C9          TEST ECX,ECX
0040C97B   .7F 0A         JG SHORT QQMsg.0040C987
0040C97D   .8B08          MOV ECX,DWORD PTR DS:
0040C97F   .8B11          MOV EDX,DWORD PTR DS:
0040C981   .50            PUSH EAX
0040C982   .8B42 04       MOV EAX,DWORD PTR DS:
0040C985   .FFD0          CALL EAX
0040C987   >8BC6          MOV EAX,ESI
0040C989   >8B8C24 D00000>MOV ECX,DWORD PTR SS:
0040C990   .64:890D 00000>MOV DWORD PTR FS:,ECX
0040C997   .59            POP ECX
0040C998   .5F            POP EDI
0040C999   .5E            POP ESI
0040C99A   .5D            POP EBP
0040C99B   .5B            POP EBX
0040C99C   .8B8C24 B80000>MOV ECX,DWORD PTR SS:
0040C9A3   .33CC          XOR ECX,ESP
0040C9A5   .E8 15530200   CALL QQMsg.00431CBF
0040C9AA   .81C4 C8000000 ADD ESP,0C8
0040C9B0   .C3            RETN


//退出算法CALL:

004146F5   > \8D5424 14   LEA EDX,DWORD PTR SS:
004146F9   .8D4C24 38   LEA ECX,DWORD PTR SS:
004146FD   .E8 9E7FFFFF   CALL QQMsg.0040C6A0                               ;这里是算法CALL
00414702   .8B00          MOV EAX,DWORD PTR DS:                        ;真码送EAX,此处可做内存注册机//退出算法CALL后来到这里
00414704   .57            PUSH EDI                                          ;假码到EDI
00414705   .50            PUSH EAX
00414706   .E8 7CD90100   CALL QQMsg.00432087
0041470B   .83C4 08       ADD ESP,8
0041470E   .85C0          TEST EAX,EAX
00414710   .8B4424 38   MOV EAX,DWORD PTR SS:
00414714   .0F94C3      SETE BL
00414717   .83C0 F0       ADD EAX,-10
0041471A   .8D48 0C       LEA ECX,DWORD PTR DS:
0041471D   .83CA FF       OR EDX,FFFFFFFF
00414720   .F0:0FC111   LOCK XADD DWORD PTR DS:,EDX                  ;LOCK 前缀
00414724   .4A            DEC EDX
00414725   .85D2          TEST EDX,EDX
00414727   .7F 0A         JG SHORT QQMsg.00414733
00414729   .8B08          MOV ECX,DWORD PTR DS:
0041472B   .8B11          MOV EDX,DWORD PTR DS:
0041472D   .50            PUSH EAX
0041472E   .8B42 04       MOV EAX,DWORD PTR DS:
00414731   .FFD0          CALL EAX                                          ;保存
00414733   >84DB          TEST BL,BL
00414735   .74 46         JE SHORT QQMsg.0041477D                           ;跳向OVER!                        
00414737   .8B5424 14   MOV EDX,DWORD PTR SS:
0041473B   .8B4E 74       MOV ECX,DWORD PTR DS:
0041473E   .52            PUSH EDX
0041473F   .68 D0744F00   PUSH QQMsg.004F74D0                               ;ASCII "userid"
00414744   .68 B8744F00   PUSH QQMsg.004F74B8                               ;ASCII "register"
00414749   .E8 08D40000   CALL QQMsg.00421B56
0041474E   .8B4E 74       MOV ECX,DWORD PTR DS:
00414751   .57            PUSH EDI
00414752   .68 B0744F00   PUSH QQMsg.004F74B0                               ;ASCII "serial"
00414757   .68 B8744F00   PUSH QQMsg.004F74B8                               ;ASCII "register"
0041475C   .E8 F5D30000   CALL QQMsg.00421B56
00414761   .6A 00         PUSH 0
00414763   .6A 00         PUSH 0
00414765   .68 E4814F00   PUSH QQMsg.004F81E4
0041476A   .E8 A4810000   CALL QQMsg.0041C913
0041476F   .8B06          MOV EAX,DWORD PTR DS:
00414771   .8B90 50010000 MOV EDX,DWORD PTR DS:
00414777   .8BCE          MOV ECX,ESI
00414779   .FFD2          CALL EDX
0041477B   .EB 15         JMP SHORT QQMsg.00414792


算法总结:

1.取用户名的MD5(小写)记做A

2.后右向左取MD5数据,小写转大写,并判断每一位:
若   ASCII<38,则+1
若38<ASCII<45,则+7
得到新字符串记做B

3.将结果B中数据
第1、8位;第11、32位;第4、22位;第28、31位;第23、19位互换,的到新字符串记位C,KEY=C


提供一组可用KEY:
用户名:Nisy
注册码:AL070IJJ-563AI4K5-K99IAI89-J5JKA72K

注册信息保存到这里:HKEY_CURRENT_USER\Software\QQMsg\QQMsg\register

tzl 发表于 2007-8-25 14:40:24

看看,支持下!不懂啊!

gxkm 发表于 2007-8-29 22:13:00

谢谢你给的提示!!!

zxwbj 发表于 2007-9-9 19:17:32

看看,支持下!不懂啊!

心系彩云 发表于 2007-9-11 00:08:17

谢谢分享,学习一下

liyw2008 发表于 2007-9-13 20:50:36

来看看!不太懂!学习一下!

gaodao1 发表于 2007-9-30 10:22:32

还行,QQ聊天记录一般

shuotongjing 发表于 2007-9-30 22:56:23

还行,谢谢楼主了,我学习学习....

enjon 发表于 2007-10-3 14:26:05

算法,难/:L /:L
页: [1]
查看完整版本: QQ聊天记录专家(QQ - TM) 2007 算法分析