- UID
- 64991
注册时间2010-1-1
阅读权限20
最后登录1970-1-1
以武会友
该用户从未签到
|
【破文标题】QQ密码监控器邮箱版 3.5 完全注册分析
【破文作者】manbug
【作者邮箱】
【作者主页】
【破解工具】peid,od
【破解平台】xp
【软件名称】QQ密码监控器邮箱版 3.5
【软件大小】
【原版下载】http://zhongyuantech.com.cn/src/EmailDDLook/index.html
【保护方式】本地验证加网络验证
【软件简介】QQ密码监控器邮箱版
QQ密码监控器邮箱版 又名 QQ密码监控器 QQ密码记录器 和 QQ密码键盘记录器
可以监控QQ2009和QQ2008所有版本的QQ密码,用户只要登录了QQ,密码马上就会被软件记录.
并且可以将记录发送到你设置的邮箱地址.
未注册用户限制:
软件里面只显示 部分密码,并且不能设置上报邮箱地址
提示: 软件打开一次,以后后台监视器会自动运行,并自动记录。
严重声明:请不要将本软件用于非法用途,否则后果自负!
【破解声明】
------------------------------------------------------------------------
【破解过程】首先peid查壳,Microsoft Visual C++ 6.0 ,无壳,无壳相对简单些啦。先直接跑一遍程序,了解一下程序注册流程。点一下设置密码,提示未注册,会弹出注册框,这个注册和以前注册不一样了,有机器码了,随便输入注册码和订单号。点确定,是重启验证的。以前说过,重启验证无非就是写注册表或文件了。
od载入程序,查找当前模块中的名称,找到- 名称位于 QQ2009密, 条目 1915
- 地址=0043C2AC
- 区段=.rdata
- 类型=输入 (已知)
- 名称=KERNEL32.GetProfileStringA
复制代码 右键在每个参考上设置断点。F9运行程序,第一次会断在- 004037D2 |. FF15 ACC24300 call near dword ptr [<&KERNEL32.GetPr>; \GetProfileStringA
复制代码 向上观察一下,好像是读取密码之类的,这个不是我们所要的,F2取消这个断点,F9继续 会断在下面- 0040E930 |. 8B2D ACC24300 mov ebp, dword ptr [<&KERNEL32.GetPr>; kernel32.GetProfileStringA
- 0040E936 |. 68 00010000 push 100 ; /BufSize = 100 (256.)
- 0040E93B |. F3:AB rep stos dword ptr es:[edi] ; |
- 0040E93D |. 8D4C24 18 lea ecx, dword ptr [esp+18] ; |
- 0040E941 |. 51 push ecx ; |ReturnBuffer
- 0040E942 |. 68 7CED4400 push offset ; |Default = ""
- 0040E947 |. 68 84C64400 push offset ; |notetext
- 0040E94C |. 52 push edx ; |Section
- 0040E94D |. FFD5 call near ebp ; \GetProfileStringA
复制代码 以上是读取注册码,F8单步向下走- 0040E98B |. 68 00010000 push 100
- 0040E990 |. 51 push ecx
- 0040E991 |. 68 7CED4400 push offset
- 0040E996 |. 68 7CC64400 push offset ; noteid
- 0040E99B |. 52 push edx
- 0040E99C |. FFD5 call near ebp
复制代码 以上是读取订单号。一直F8,- 0040E9DA |. E8 718CFFFF call ; 得到机器码函数
复制代码 以上这个call是读取硬盘相关的东西。大家可能会问,我怎么知道的,呵呵,单步跟出来的结果,单步跟时要注意观察OD各个窗口的变化。一直F8,因为程序读取了注册码之后一定会验证的,所以我们单步跟- 00409066 |. 51 push ecx
- 00409067 |. 8BCC mov ecx, esp
- 00409069 |. 896424 14 mov dword ptr [esp+14], esp
- 0040906D |. 68 6CED4400 push offset
- 00409072 |. E8 301B0200 call
- 00409077 |. B9 10ED4400 mov ecx, offset
- 0040907C |. E8 DF5C0000 call
复制代码 到0040907c这个call之后一定要F7跟进,然后F8单步来到- 0040EDC4 |. 896424 28 mov dword ptr [esp+28], esp
- 0040EDC8 |. 52 push edx
- 0040EDC9 |. E8 D9BD0100 call
- 0040EDCE |. 8BCD mov ecx, ebp
- 0040EDD0 |. E8 7BFDFFFF call ; 此处为验证处了
复制代码 到40EDD0还是F7跟进。就是算法过程了- 0040EB50 >/$ 6A FF push -1 ; sub_40EB50
- 0040EB52 |. 68 C0A54300 push ; SE 处理程序安装
- 0040EB57 |. 64:A1 0000000>mov eax, dword ptr fs:[0]
- 0040EB5D |. 50 push eax
- 0040EB5E |. 64:8925 00000>mov dword ptr fs:[0], esp
- 0040EB65 |. 83EC 10 sub esp, 10
- 0040EB68 |. 53 push ebx
- 0040EB69 |. 55 push ebp
- 0040EB6A |. 56 push esi
- 0040EB6B |. 57 push edi
- 0040EB6C |. 8BD9 mov ebx, ecx
- 0040EB6E |. 8D6B 20 lea ebp, dword ptr [ebx+20]
- 0040EB71 |. 68 7CED4400 push offset
- 0040EB76 |. 8BCD mov ecx, ebp
- 0040EB78 |. C74424 2C 000>mov dword ptr [esp+2C], 0
- 0040EB80 |. 896C24 20 mov dword ptr [esp+20], ebp
- 0040EB84 |. E8 32C40100 call
- 0040EB89 |. 8D43 0C lea eax, dword ptr [ebx+C]
- 0040EB8C |. 8D4C24 10 lea ecx, dword ptr [esp+10]
- 0040EB90 |. 50 push eax
- 0040EB91 |. E8 11C00100 call
- 0040EB96 |. C64424 28 01 mov byte ptr [esp+28], 1
- 0040EB9B |. 8B4B 24 mov ecx, dword ptr [ebx+24]
- 0040EB9E |. 8B41 F8 mov eax, dword ptr [ecx-8]
- 0040EBA1 |. 83F8 0A cmp eax, 0A
- 0040EBA4 |. 7D 26 jge short
- 0040EBA6 |. 8D4C24 10 lea ecx, dword ptr [esp+10]
- 0040EBAA |. C64424 28 00 mov byte ptr [esp+28], 0
- 0040EBAF |. E8 7EC20100 call
- 0040EBB4 |. 8D4C24 30 lea ecx, dword ptr [esp+30]
- 0040EBB8 |. C74424 28 FFF>mov dword ptr [esp+28], -1
- 0040EBC0 |. E8 6DC20100 call
- 0040EBC5 |. 33C0 xor eax, eax
- 0040EBC7 |. E9 7F010000 jmp
- 0040EBCC >|> 8B5424 10 mov edx, dword ptr [esp+10] ; 用户名送edx
- 0040EBD0 |. 837A F8 0A cmp dword ptr [edx-8], 0A ; 比较用户名长度是不是为0x0A
- 0040EBD4 |. 7D 26 jge short ; 小于0x0a则跳出
- 0040EBD6 |. 8D4C24 10 lea ecx, dword ptr [esp+10]
- 0040EBDA |. C64424 28 00 mov byte ptr [esp+28], 0
- 0040EBDF |. E8 4EC20100 call
- 0040EBE4 |. 8D4C24 30 lea ecx, dword ptr [esp+30]
- 0040EBE8 |. C74424 28 FFF>mov dword ptr [esp+28], -1
- 0040EBF0 |. E8 3DC20100 call
- 0040EBF5 |. 33C0 xor eax, eax
- 0040EBF7 |. E9 4F010000 jmp
- 0040EBFC >|> 68 7CED4400 push offset ; loc_40EBFC
- 0040EC01 |. 8D4C24 1C lea ecx, dword ptr [esp+1C]
- 0040EC05 |. E8 96C20100 call
- 0040EC0A |. 68 7CED4400 push offset
- 0040EC0F |. 8D4C24 18 lea ecx, dword ptr [esp+18]
- 0040EC13 |. C64424 2C 02 mov byte ptr [esp+2C], 2
- 0040EC18 |. E8 83C20100 call
- 0040EC1D |. C64424 28 03 mov byte ptr [esp+28], 3
- 0040EC22 |. 8B4B 24 mov ecx, dword ptr [ebx+24]
- 0040EC25 |. 33C0 xor eax, eax
- 0040EC27 |. 8B51 F8 mov edx, dword ptr [ecx-8] ; 机器码长度送edx
- 0040EC2A |. 85D2 test edx, edx
- 0040EC2C |. 7E 55 jle short
- 0040EC2E >|> 0FBE2C08 /movsx ebp, byte ptr [eax+ecx] ; 将机器码逐个送ebp
- 0040EC32 |. 8D78 01 |lea edi, dword ptr [eax+1]
- 0040EC35 |. BE 68000000 |mov esi, 68
- 0040EC3A |. 3BFA |cmp edi, edx ; 如果edi>=机器码长度跳
- 0040EC3C |. 7D 07 |jge short
- 0040EC3E |. 0FBE7408 01 |movsx esi, byte ptr [eax+ecx+1] ; 将机器码下一位送esi
- 0040EC43 |. 03F5 |add esi, ebp ; esi+=ebp
- 0040EC45 >|> 8D45 05 |lea eax, dword ptr [ebp+5] ; eax=ebp+5
- 0040EC48 |. B9 0A000000 |mov ecx, 0A ; ecx=0xA
- 0040EC4D |. 0BC6 |or eax, esi ; eax|=esi
- 0040EC4F |. 99 |cdq
- 0040EC50 |. F7F9 |idiv ecx ; eax/0xA
- 0040EC52 |. 52 |push edx
- 0040EC53 |. 8D5424 18 |lea edx, dword ptr [esp+18]
- 0040EC57 |. 68 14BE4400 |push offset ; %d
- 0040EC5C |. 52 |push edx
- 0040EC5D |. E8 FEA50100 |call ; 余数送给一个字符串[esp+0x18]
- 0040EC62 |. 83C4 0C |add esp, 0C
- 0040EC65 |. 8D4424 14 |lea eax, dword ptr [esp+14]
- 0040EC69 |. 8D4C24 18 |lea ecx, dword ptr [esp+18]
- 0040EC6D |. 50 |push eax
- 0040EC6E |. E8 D7C50100 |call ; 合并字符串
- 0040EC73 |. 8B4B 24 |mov ecx, dword ptr [ebx+24] ; 机器码送ecx
- 0040EC76 |. 8BC7 |mov eax, edi ; eax=edi
- 0040EC78 |. 8B51 F8 |mov edx, dword ptr [ecx-8] ; 机器码长度送edx
- 0040EC7B |. 3BC2 |cmp eax, edx
- 0040EC7D |.^ 7C AF \jl short
- 0040EC7F |. 8B6C24 1C mov ebp, dword ptr [esp+1C]
- 0040EC83 >|> 8B4C24 10 mov ecx, dword ptr [esp+10] ; loc_40EC83
- 0040EC87 |. 8B5424 18 mov edx, dword ptr [esp+18]
- 0040EC8B |. 51 push ecx
- 0040EC8C |. 52 push edx
- 0040EC8D |. E8 68B80000 call <__mbscmp> ; 本地验证,比较输入的注册码是否正确
- 0040EC92 |. 83C4 08 add esp, 8
- 0040EC95 |. 85C0 test eax, eax
- 0040EC97 |. 74 3F je short ; 本地验证失败则跳了
- 0040EC99 |. 8D4C24 14 lea ecx, dword ptr [esp+14]
- 0040EC9D |. C64424 28 02 mov byte ptr [esp+28], 2
- 0040ECA2 |. E8 8BC10100 call
- 0040ECA7 |. 8D4C24 18 lea ecx, dword ptr [esp+18]
- 0040ECAB |. C64424 28 01 mov byte ptr [esp+28], 1
- 0040ECB0 |. E8 7DC10100 call
- 0040ECB5 |. 8D4C24 10 lea ecx, dword ptr [esp+10]
- 0040ECB9 |. C64424 28 00 mov byte ptr [esp+28], 0
- 0040ECBE |. E8 6FC10100 call
- 0040ECC3 |. 8D4C24 30 lea ecx, dword ptr [esp+30]
- 0040ECC7 |. C74424 28 FFF>mov dword ptr [esp+28], -1
- 0040ECCF |. E8 5EC10100 call
- 0040ECD4 |. 33C0 xor eax, eax
- 0040ECD6 |. EB 73 jmp short
- 0040ECD8 >|> C743 14 01000>mov dword ptr [ebx+14], 1 ; loc_40ECD8
- 0040ECDF |. 8B3D C8C24300 mov edi, dword ptr [<&KERNEL32.Sleep>; kernel32.Sleep
- 0040ECE5 |. 33F6 xor esi, esi
- 0040ECE7 >|> 8BCB /mov ecx, ebx ; loc_40ECE7
- 0040ECE9 |. E8 32FDFFFF |call ; 此处为网络验证了
- 0040ECEE |. 85C0 |test eax, eax
- 0040ECF0 |. 75 0D |jnz short
- 0040ECF2 |. 68 E8030000 |push 3E8
- 0040ECF7 |. FFD7 |call near edi
- 0040ECF9 |. 46 |inc esi
- 0040ECFA |. 83FE 03 |cmp esi, 3
- 0040ECFD |.^ 7C E8 \jl short
- 0040ECFF >|> 68 E0C64400 push offset ; loc_40ECFF
- 0040ED04 |. 8BCD mov ecx, ebp
- 0040ED06 |. E8 B0C20100 call
- 0040ED0B |. 8D4C24 14 lea ecx, dword ptr [esp+14]
- 0040ED0F |. C64424 28 02 mov byte ptr [esp+28], 2
- 0040ED14 |. E8 19C10100 call
- 0040ED19 |. 8D4C24 18 lea ecx, dword ptr [esp+18]
- 0040ED1D |. C64424 28 01 mov byte ptr [esp+28], 1
- 0040ED22 |. E8 0BC10100 call
- 0040ED27 |. 8D4C24 10 lea ecx, dword ptr [esp+10]
- 0040ED2B |. C64424 28 00 mov byte ptr [esp+28], 0
- 0040ED30 |. E8 FDC00100 call
- 0040ED35 |. 8D4C24 30 lea ecx, dword ptr [esp+30]
- 0040ED39 |. C74424 28 FFF>mov dword ptr [esp+28], -1
- 0040ED41 |. E8 ECC00100 call
- 0040ED46 |. B8 01000000 mov eax, 1
- 0040ED4B >|> 8B4C24 20 mov ecx, dword ptr [esp+20] ; loc_40ED4B
- 0040ED4F |. 5F pop edi
- 0040ED50 |. 5E pop esi
- 0040ED51 |. 5D pop ebp
- 0040ED52 |. 5B pop ebx
- 0040ED53 |. 64:890D 00000>mov dword ptr fs:[0], ecx
- 0040ED5A |. 83C4 1C add esp, 1C
- 0040ED5D \. C2 0400 retn 4
复制代码 我已经写成了注册机了,源代码如下:
如果有什么问题请指正!
------------------------------------------------------------------------
【破解总结】由于是MFC写的程序,一些类搞得有点头痛,关键在于反复调试,就会找到关键算法部分。本地验证就解决了,网络验证还是利用了网站存在的漏洞,好像一直没有补过,呵呵!
------------------------------------------------------------------------
【版权声明】本文只在于研究算法和破解思路,请不要用于非法用途。 |
评分
-
查看全部评分
|