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
看看,支持下!不懂啊! 谢谢你给的提示!!! 看看,支持下!不懂啊! 谢谢分享,学习一下 来看看!不太懂!学习一下! 还行,QQ聊天记录一般 还行,谢谢楼主了,我学习学习.... 算法,难/:L /:L
页:
[1]