飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 29616|回复: 114

[原创] QQ密码监控器邮箱版 3.5 完全注册分析

  [复制链接]

该用户从未签到

发表于 2010-3-2 10:31:12 | 显示全部楼层 |阅读模式
【破文标题】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载入程序,查找当前模块中的名称,找到
  1. 名称位于 QQ2009密, 条目 1915
  2. 地址=0043C2AC
  3. 区段=.rdata
  4. 类型=输入    (已知)
  5. 名称=KERNEL32.GetProfileStringA
复制代码
右键在每个参考上设置断点。F9运行程序,第一次会断在
  1. 004037D2  |.  FF15 ACC24300 call    near dword ptr [<&KERNEL32.GetPr>; \GetProfileStringA
复制代码
向上观察一下,好像是读取密码之类的,这个不是我们所要的,F2取消这个断点,F9继续 会断在下面
  1. 0040E930  |.  8B2D ACC24300 mov     ebp, dword ptr [<&KERNEL32.GetPr>;  kernel32.GetProfileStringA
  2. 0040E936  |.  68 00010000   push    100                              ; /BufSize = 100 (256.)
  3. 0040E93B  |.  F3:AB         rep     stos dword ptr es:[edi]          ; |
  4. 0040E93D  |.  8D4C24 18     lea     ecx, dword ptr [esp+18]          ; |
  5. 0040E941  |.  51            push    ecx                              ; |ReturnBuffer
  6. 0040E942  |.  68 7CED4400   push    offset                      ; |Default = ""
  7. 0040E947  |.  68 84C64400   push    offset                ; |notetext
  8. 0040E94C  |.  52            push    edx                              ; |Section
  9. 0040E94D  |.  FFD5          call    near ebp                         ; \GetProfileStringA
复制代码
以上是读取注册码,F8单步向下走
  1. 0040E98B  |.  68 00010000   push    100
  2. 0040E990  |.  51            push    ecx
  3. 0040E991  |.  68 7CED4400   push    offset
  4. 0040E996  |.  68 7CC64400   push    offset                  ;  noteid
  5. 0040E99B  |.  52            push    edx
  6. 0040E99C  |.  FFD5          call    near ebp
复制代码
以上是读取订单号。一直F8,
  1. 0040E9DA  |.  E8 718CFFFF   call                         ;  得到机器码函数
复制代码
以上这个call是读取硬盘相关的东西。大家可能会问,我怎么知道的,呵呵,单步跟出来的结果,单步跟时要注意观察OD各个窗口的变化。一直F8,因为程序读取了注册码之后一定会验证的,所以我们单步跟
  1. 00409066  |.  51            push    ecx
  2. 00409067  |.  8BCC          mov     ecx, esp
  3. 00409069  |.  896424 14     mov     dword ptr [esp+14], esp
  4. 0040906D  |.  68 6CED4400   push    offset
  5. 00409072  |.  E8 301B0200   call   
  6. 00409077  |.  B9 10ED4400   mov     ecx, offset
  7. 0040907C  |.  E8 DF5C0000   call  
复制代码
到0040907c这个call之后一定要F7跟进,然后F8单步来到
  1. 0040EDC4  |.  896424 28     mov     dword ptr [esp+28], esp
  2. 0040EDC8  |.  52            push    edx
  3. 0040EDC9  |.  E8 D9BD0100   call   
  4. 0040EDCE  |.  8BCD          mov     ecx, ebp
  5. 0040EDD0  |.  E8 7BFDFFFF   call                         ;  此处为验证处了
复制代码
到40EDD0还是F7跟进。就是算法过程了
  1. 0040EB50 >/$  6A FF         push    -1                               ;  sub_40EB50
  2. 0040EB52  |.  68 C0A54300   push                 ;  SE 处理程序安装
  3. 0040EB57  |.  64:A1 0000000>mov     eax, dword ptr fs:[0]
  4. 0040EB5D  |.  50            push    eax
  5. 0040EB5E  |.  64:8925 00000>mov     dword ptr fs:[0], esp
  6. 0040EB65  |.  83EC 10       sub     esp, 10
  7. 0040EB68  |.  53            push    ebx
  8. 0040EB69  |.  55            push    ebp
  9. 0040EB6A  |.  56            push    esi
  10. 0040EB6B  |.  57            push    edi
  11. 0040EB6C  |.  8BD9          mov     ebx, ecx
  12. 0040EB6E  |.  8D6B 20       lea     ebp, dword ptr [ebx+20]
  13. 0040EB71  |.  68 7CED4400   push    offset
  14. 0040EB76  |.  8BCD          mov     ecx, ebp
  15. 0040EB78  |.  C74424 2C 000>mov     dword ptr [esp+2C], 0
  16. 0040EB80  |.  896C24 20     mov     dword ptr [esp+20], ebp
  17. 0040EB84  |.  E8 32C40100   call   
  18. 0040EB89  |.  8D43 0C       lea     eax, dword ptr [ebx+C]
  19. 0040EB8C  |.  8D4C24 10     lea     ecx, dword ptr [esp+10]
  20. 0040EB90  |.  50            push    eax
  21. 0040EB91  |.  E8 11C00100   call   
  22. 0040EB96  |.  C64424 28 01  mov     byte ptr [esp+28], 1
  23. 0040EB9B  |.  8B4B 24       mov     ecx, dword ptr [ebx+24]
  24. 0040EB9E  |.  8B41 F8       mov     eax, dword ptr [ecx-8]
  25. 0040EBA1  |.  83F8 0A       cmp     eax, 0A
  26. 0040EBA4  |.  7D 26         jge     short
  27. 0040EBA6  |.  8D4C24 10     lea     ecx, dword ptr [esp+10]
  28. 0040EBAA  |.  C64424 28 00  mov     byte ptr [esp+28], 0
  29. 0040EBAF  |.  E8 7EC20100   call   
  30. 0040EBB4  |.  8D4C24 30     lea     ecx, dword ptr [esp+30]
  31. 0040EBB8  |.  C74424 28 FFF>mov     dword ptr [esp+28], -1
  32. 0040EBC0  |.  E8 6DC20100   call   
  33. 0040EBC5  |.  33C0          xor     eax, eax
  34. 0040EBC7  |.  E9 7F010000   jmp     
  35. 0040EBCC >|>  8B5424 10     mov     edx, dword ptr [esp+10]          ;  用户名送edx
  36. 0040EBD0  |.  837A F8 0A    cmp     dword ptr [edx-8], 0A            ;  比较用户名长度是不是为0x0A
  37. 0040EBD4  |.  7D 26         jge     short                ;  小于0x0a则跳出
  38. 0040EBD6  |.  8D4C24 10     lea     ecx, dword ptr [esp+10]
  39. 0040EBDA  |.  C64424 28 00  mov     byte ptr [esp+28], 0
  40. 0040EBDF  |.  E8 4EC20100   call   
  41. 0040EBE4  |.  8D4C24 30     lea     ecx, dword ptr [esp+30]
  42. 0040EBE8  |.  C74424 28 FFF>mov     dword ptr [esp+28], -1
  43. 0040EBF0  |.  E8 3DC20100   call   
  44. 0040EBF5  |.  33C0          xor     eax, eax
  45. 0040EBF7  |.  E9 4F010000   jmp     
  46. 0040EBFC >|>  68 7CED4400   push    offset                      ;  loc_40EBFC
  47. 0040EC01  |.  8D4C24 1C     lea     ecx, dword ptr [esp+1C]
  48. 0040EC05  |.  E8 96C20100   call   
  49. 0040EC0A  |.  68 7CED4400   push    offset
  50. 0040EC0F  |.  8D4C24 18     lea     ecx, dword ptr [esp+18]
  51. 0040EC13  |.  C64424 2C 02  mov     byte ptr [esp+2C], 2
  52. 0040EC18  |.  E8 83C20100   call   
  53. 0040EC1D  |.  C64424 28 03  mov     byte ptr [esp+28], 3
  54. 0040EC22  |.  8B4B 24       mov     ecx, dword ptr [ebx+24]
  55. 0040EC25  |.  33C0          xor     eax, eax
  56. 0040EC27  |.  8B51 F8       mov     edx, dword ptr [ecx-8]           ;  机器码长度送edx
  57. 0040EC2A  |.  85D2          test    edx, edx
  58. 0040EC2C  |.  7E 55         jle     short
  59. 0040EC2E >|>  0FBE2C08      /movsx   ebp, byte ptr [eax+ecx]         ;  将机器码逐个送ebp
  60. 0040EC32  |.  8D78 01       |lea     edi, dword ptr [eax+1]
  61. 0040EC35  |.  BE 68000000   |mov     esi, 68
  62. 0040EC3A  |.  3BFA          |cmp     edi, edx                        ;  如果edi>=机器码长度跳
  63. 0040EC3C  |.  7D 07         |jge     short
  64. 0040EC3E  |.  0FBE7408 01   |movsx   esi, byte ptr [eax+ecx+1]       ;  将机器码下一位送esi
  65. 0040EC43  |.  03F5          |add     esi, ebp                        ;  esi+=ebp
  66. 0040EC45 >|>  8D45 05       |lea     eax, dword ptr [ebp+5]          ;  eax=ebp+5
  67. 0040EC48  |.  B9 0A000000   |mov     ecx, 0A                         ;  ecx=0xA
  68. 0040EC4D  |.  0BC6          |or      eax, esi                        ;  eax|=esi
  69. 0040EC4F  |.  99            |cdq
  70. 0040EC50  |.  F7F9          |idiv    ecx                             ;  eax/0xA
  71. 0040EC52  |.  52            |push    edx
  72. 0040EC53  |.  8D5424 18     |lea     edx, dword ptr [esp+18]
  73. 0040EC57  |.  68 14BE4400   |push    offset                      ;  %d
  74. 0040EC5C  |.  52            |push    edx
  75. 0040EC5D  |.  E8 FEA50100   |call    ;  余数送给一个字符串[esp+0x18]
  76. 0040EC62  |.  83C4 0C       |add     esp, 0C
  77. 0040EC65  |.  8D4424 14     |lea     eax, dword ptr [esp+14]
  78. 0040EC69  |.  8D4C24 18     |lea     ecx, dword ptr [esp+18]
  79. 0040EC6D  |.  50            |push    eax
  80. 0040EC6E  |.  E8 D7C50100   |call    ;  合并字符串
  81. 0040EC73  |.  8B4B 24       |mov     ecx, dword ptr [ebx+24]         ;  机器码送ecx
  82. 0040EC76  |.  8BC7          |mov     eax, edi                        ;  eax=edi
  83. 0040EC78  |.  8B51 F8       |mov     edx, dword ptr [ecx-8]          ;  机器码长度送edx
  84. 0040EC7B  |.  3BC2          |cmp     eax, edx
  85. 0040EC7D  |.^ 7C AF         \jl      short
  86. 0040EC7F  |.  8B6C24 1C     mov     ebp, dword ptr [esp+1C]
  87. 0040EC83 >|>  8B4C24 10     mov     ecx, dword ptr [esp+10]          ;  loc_40EC83
  88. 0040EC87  |.  8B5424 18     mov     edx, dword ptr [esp+18]
  89. 0040EC8B  |.  51            push    ecx
  90. 0040EC8C  |.  52            push    edx
  91. 0040EC8D  |.  E8 68B80000   call    <__mbscmp>                       ;  本地验证,比较输入的注册码是否正确
  92. 0040EC92  |.  83C4 08       add     esp, 8
  93. 0040EC95  |.  85C0          test    eax, eax
  94. 0040EC97  |.  74 3F         je      short                ;  本地验证失败则跳了
  95. 0040EC99  |.  8D4C24 14     lea     ecx, dword ptr [esp+14]
  96. 0040EC9D  |.  C64424 28 02  mov     byte ptr [esp+28], 2
  97. 0040ECA2  |.  E8 8BC10100   call   
  98. 0040ECA7  |.  8D4C24 18     lea     ecx, dword ptr [esp+18]
  99. 0040ECAB  |.  C64424 28 01  mov     byte ptr [esp+28], 1
  100. 0040ECB0  |.  E8 7DC10100   call   
  101. 0040ECB5  |.  8D4C24 10     lea     ecx, dword ptr [esp+10]
  102. 0040ECB9  |.  C64424 28 00  mov     byte ptr [esp+28], 0
  103. 0040ECBE  |.  E8 6FC10100   call   
  104. 0040ECC3  |.  8D4C24 30     lea     ecx, dword ptr [esp+30]
  105. 0040ECC7  |.  C74424 28 FFF>mov     dword ptr [esp+28], -1
  106. 0040ECCF  |.  E8 5EC10100   call   
  107. 0040ECD4  |.  33C0          xor     eax, eax
  108. 0040ECD6  |.  EB 73         jmp     short
  109. 0040ECD8 >|>  C743 14 01000>mov     dword ptr [ebx+14], 1            ;  loc_40ECD8
  110. 0040ECDF  |.  8B3D C8C24300 mov     edi, dword ptr [<&KERNEL32.Sleep>;  kernel32.Sleep
  111. 0040ECE5  |.  33F6          xor     esi, esi
  112. 0040ECE7 >|>  8BCB          /mov     ecx, ebx                        ;  loc_40ECE7
  113. 0040ECE9  |.  E8 32FDFFFF   |call                        ;  此处为网络验证了
  114. 0040ECEE  |.  85C0          |test    eax, eax
  115. 0040ECF0  |.  75 0D         |jnz     short
  116. 0040ECF2  |.  68 E8030000   |push    3E8
  117. 0040ECF7  |.  FFD7          |call    near edi
  118. 0040ECF9  |.  46            |inc     esi
  119. 0040ECFA  |.  83FE 03       |cmp     esi, 3
  120. 0040ECFD  |.^ 7C E8         \jl      short
  121. 0040ECFF >|>  68 E0C64400   push    offset                      ;  loc_40ECFF
  122. 0040ED04  |.  8BCD          mov     ecx, ebp
  123. 0040ED06  |.  E8 B0C20100   call   
  124. 0040ED0B  |.  8D4C24 14     lea     ecx, dword ptr [esp+14]
  125. 0040ED0F  |.  C64424 28 02  mov     byte ptr [esp+28], 2
  126. 0040ED14  |.  E8 19C10100   call   
  127. 0040ED19  |.  8D4C24 18     lea     ecx, dword ptr [esp+18]
  128. 0040ED1D  |.  C64424 28 01  mov     byte ptr [esp+28], 1
  129. 0040ED22  |.  E8 0BC10100   call   
  130. 0040ED27  |.  8D4C24 10     lea     ecx, dword ptr [esp+10]
  131. 0040ED2B  |.  C64424 28 00  mov     byte ptr [esp+28], 0
  132. 0040ED30  |.  E8 FDC00100   call   
  133. 0040ED35  |.  8D4C24 30     lea     ecx, dword ptr [esp+30]
  134. 0040ED39  |.  C74424 28 FFF>mov     dword ptr [esp+28], -1
  135. 0040ED41  |.  E8 ECC00100   call   
  136. 0040ED46  |.  B8 01000000   mov     eax, 1
  137. 0040ED4B >|>  8B4C24 20     mov     ecx, dword ptr [esp+20]          ;  loc_40ED4B
  138. 0040ED4F  |.  5F            pop     edi
  139. 0040ED50  |.  5E            pop     esi
  140. 0040ED51  |.  5D            pop     ebp
  141. 0040ED52  |.  5B            pop     ebx
  142. 0040ED53  |.  64:890D 00000>mov     dword ptr fs:[0], ecx
  143. 0040ED5A  |.  83C4 1C       add     esp, 1C
  144. 0040ED5D  \.  C2 0400       retn    4
复制代码
我已经写成了注册机了,源代码如下:



游客,如果您要查看本帖隐藏内容请回复

如果有什么问题请指正!


------------------------------------------------------------------------
【破解总结】由于是MFC写的程序,一些类搞得有点头痛,关键在于反复调试,就会找到关键算法部分。本地验证就解决了,网络验证还是利用了网站存在的漏洞,好像一直没有补过,呵呵!
------------------------------------------------------------------------
【版权声明】本文只在于研究算法和破解思路,请不要用于非法用途。

评分

参与人数 1威望 +40 飘云币 +40 收起 理由
月之精灵 + 40 + 40 PYG有你更精彩!

查看全部评分

PYG19周年生日快乐!

该用户从未签到

发表于 2010-3-2 18:34:01 | 显示全部楼层
网络验证还是利用了网站存在的漏洞/:L
PYG19周年生日快乐!

该用户从未签到

发表于 2010-3-2 21:51:54 | 显示全部楼层
太棒了高手我才把他破成注册版后来一打开邮箱设置过一会邮箱设置就自动关了
PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2024-3-9 08:52
  • 签到天数: 78 天

    [LV.6]常住居民II

    发表于 2010-3-2 23:12:00 | 显示全部楼层
    我也自己玩试试看
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2023-4-25 22:00
  • 签到天数: 933 天

    [LV.10]以坛为家III

    发表于 2010-3-3 09:46:20 | 显示全部楼层
    不知道还有没暗桩呢?
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2024-2-18 08:34
  • 签到天数: 185 天

    [LV.7]常住居民III

    发表于 2010-3-3 11:29:54 | 显示全部楼层
    应该还有暗桩没解决吧
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-3-3 13:01:57 | 显示全部楼层
    大家注意了,他这个软件的接收邮箱可能用的是他服务器里面的邮箱地址发出的,谨防泄漏!因为这个软件上没有设置发送邮箱的地址!/:L
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    20 小时前
  • 签到天数: 833 天

    [LV.10]以坛为家III

    发表于 2010-3-3 13:55:57 | 显示全部楼层
    谢谢分享,看看
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    1 小时前
  • 签到天数: 613 天

    [LV.9]以坛为家II

    发表于 2010-3-4 13:10:36 | 显示全部楼层
    看看效果如何!!!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2020-11-29 21:31
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-3-6 07:47:30 | 显示全部楼层
    楼主个个方面都很精通嘛。。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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