飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 12302|回复: 16

[原创] 一字节爆破QQ2009密码监控器6.6,附其它方法。

[复制链接]

该用户从未签到

发表于 2010-1-5 16:30:36 | 显示全部楼层 |阅读模式
最近闲着没事,就试着在天空软件站随便下了个软件练一下手,本人也是新手。希望和大家一起交流,一起学习。软件地址 :http://shareware.skycn.com/soft/27680.htm
好进入正题。首先用PEID查壳,无壳是用VC写的东西,心中窃喜,少了好多麻烦,
OD载入,记得一定要隐藏OD,我看了一下,里面有反调试代码。
F9直接运行一次,点软件注册,会提示注册码和订单号,输入后确定,提示重启验证,说明是重启验证类的,无非就是写文件或注册表了。
Ctrl+F2重新载入,右键查找当前模块中的名称,会显示出所有调用API,发现有
  1. 名称位于 QQ2009密, 条目 159
  2. 地址=0043829C
  3. 区段=.rdata
  4. 类型=输入    (已知)
  5. 名称=KERNEL32.GetProfileStringA
复制代码
GetProfileStringA这个函数,是关键了,用BP GetProfileStringA下断,然后按F9两次查看堆栈处
  1. 0012F1CC   0040D02C  /CALL 到 GetProfileStringA 来自 QQ2009密.0040D02A
  2. 0012F1D0   02236E98  |Section = "DDLook"
  3. 0012F1D4   00447464  |Key = "notetext"
  4. 0012F1D8   00449834  |Default = ""
  5. 0012F1DC   0012F1F0  |ReturnBuffer = 0012F1F0
  6. 0012F1E0   00000100  \BufSize = 100 (256.)
复制代码
没有文件名说明是读写的win.ini文件位于c:\windows中,打开这个文件查看尾部
  1. [fileopr]
  2. C:\WINDOWS\system32\ddinfo.db=1
  3. [DDLook]
  4. version=1021
  5. auto=0
  6. notetext=manbug
  7. noteid=123123
  8. update=0
复制代码
取消断点,F9直接运行后,点击设置登陆密码会提示“只有注册用户才能设置密码”,这就是关键了点确定后,用OD查找字符串。
  1. Ultra String Reference, 条目 214
  2. Address=00409852
  3. Disassembly=push    offset <aVSZSI>
  4. Text String=只有注册用户才能设置登录密码!
复制代码
双击此行会来到代码处
  1. 00409827   . /0F84 AF000000 je      <loc_4098DC>
  2. 0040982D   . |8D4C24 6C     lea     ecx, dword ptr [esp+6C]
  3. 00409831   . |E8 3A350000   call    <sub_40CD70>
  4. 00409836   . |68 E06E4400   push    offset <aVSS>                    ;  未注册提示
  5. 0040983B   . |8D8C24 040100>lea     ecx, dword ptr [esp+104]
  6. 00409842   . |C78424 140100>mov     dword ptr [esp+114], 0
  7. 0040984D   . |E8 F6DD0100   call    <CString::operator=(char const *>
  8. 00409852   . |68 D0704400   push    offset <aVSZSI>                  ;  只有注册用户才能设置登录密码!
  9. 00409857   . |8D8C24 080100>lea     ecx, dword ptr [esp+108]
  10. 0040985E   . |E8 E5DD0100   call    <CString::operator=(char const *>
  11. 00409863   . |8D4C24 68     lea     ecx, dword ptr [esp+68]
  12. 00409867   . |E8 A82F0200   call    <CDialog::DoModal(void)>
  13. 0040986C   . |8D8C24 040100>lea     ecx, dword ptr [esp+104]
复制代码
看到代码上面的je没有,这就是关键点,当然改此处是没有作用的,我们继续向上看。
  1. 00409800   .  64:A1 0000000>mov     eax, dword ptr fs:[0]    大家可以在这里下断分析
  2. 00409806   .  6A FF         push    -1
  3. 00409808   .  68 B7604300   push    <unknown_libname_159>
  4. 0040980D   .  50            push    eax
  5. 0040980E   .  A1 E4974400   mov     eax, dword ptr [<dword_4497E4>]   将4497E4的值送eax,那么4497e4就是关键点了,估计是个全局变量或静态变量了
  6. 00409813   .  64:8925 00000>mov     dword ptr fs:[0], esp
  7. 0040981A   .  81EC 04010000 sub     esp, 104
  8. 00409820   .  85C0          test    eax, eax              这是比较eax是否为0,如果为0就已经注册了否则未注册
  9. 00409822   .  56            push    esi
  10. 00409823   .  8BF1          mov     esi, ecx
  11. 00409825   .  6A 00         push    0
  12. 00409827   .  0F84 AF000000 je      <loc_4098DC>
  13. 0040982D   .  8D4C24 6C     lea     ecx, dword ptr [esp+6C]
  14. 00409831   .  E8 3A350000   call    <sub_40CD70>
  15. 00409836   .  68 E06E4400   push    offset <aVSS>                    ;  未注册提示
  16. 0040983B   .  8D8C24 040100>lea     ecx, dword ptr [esp+104]
  17. 00409842   .  C78424 140100>mov     dword ptr [esp+114], 0
  18. 0040984D   .  E8 F6DD0100   call    <CString::operator=(char const *>
  19. 00409852   .  68 D0704400   push    offset <aVSZSI>                  ;  只有注册用户才能设置登录密码!
复制代码
我们直接用命令 d 4497E4 会看到值为02,在此处下硬件访问断点,删除以前所有断点。Ctrl+F2重新载入程序,F9运行程序,发生硬件中断
  1. 0040CEE6  |.  C746 14 02000>mov     dword ptr [esi+14], 2          此处为给 4497e4赋值2 只要将2直接改为0就算爆破了
  2. 0040CEED  |.  E8 56A70100   call    <CString::operator=(char const *>
复制代码
我也跟了他的注册算法,很简单的,大家可以跟进去看一下。注册码是本地验证然后网络验证的。
  1. 00407B27  |.  B9 D0974400   mov     ecx, offset <unk_4497D0>
  2. 00407B2C  |.  E8 DF560000   call    <算法部分。。。>                        ;  这里面就是算法了,跟进
  3. 00407B31  |.  A1 28984400   mov     eax, dword ptr [<dword_449828>]
复制代码
其实还有一种不用爆破的方法更为简单,当然就要用到算法了,我已经算出来了一组:
  1. 注册码:man5Rx3hG3aG
  2. 订单号:123'or'='or'
复制代码
注册码是可以算出来的,单是订单号是服务器上的。其实如果知道注入的朋友一定会对'or'='or'不陌生吧。呵呵,因为我找到了他的网站有注入漏洞,所以。。。嘿嘿
上面的注册码和订单号应该哪里都可以用吧,没有机器限制的。

归纳一下这次破解过程:
1.这个程序有一定的反调试能力,所以没有加壳,但是现在一些反调试对于OD N多牛人写的插件来说的话约等于无了。
2.软件作者就用一个全局变量来判断软件是否注册,实在是有点失策,写了那多反调试代码和算法。为什么能一字节破解呢?唉。
3.作为一个共享软件,服务器的判断地址居然还有注入漏洞,实在不该。

好了,就写到这了!本文目的在于交流,请不要用这个软件用于非法用途!

评分

参与人数 1威望 +40 飘云币 +80 收起 理由
Nisy + 40 + 80 您的贴子很精彩,希望能再次分享!

查看全部评分

PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-3 23:07
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-1-5 18:36:13 | 显示全部楼层
    进来学习下,
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-1-5 18:59:05 | 显示全部楼层
    不错哈,楼主加油!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-8-15 13:22
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2010-1-5 19:35:55 | 显示全部楼层
    支持一下,今天上午就玩的这个软件/:017
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-1-5 20:58:59 | 显示全部楼层
    好像有人求这个的破解呢/:014 刚刚才看到一个帖子
    PYG19周年生日快乐!
  • TA的每日心情

    2017-6-17 16:59
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2010-1-5 22:06:22 | 显示全部楼层
    呵呵,。,。不错,,又学到新知识了
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-1-6 20:49:17 | 显示全部楼层
    楼主对API真的很熟悉,佩服
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2025-1-4 11:46
  • 签到天数: 1861 天

    [LV.Master]伴坛终老

    发表于 2010-1-8 08:52:35 | 显示全部楼层
    学习一下楼主的方法,多谢分享。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-1-8 11:07:37 | 显示全部楼层
    水平真高,最需要这样详细有破文。感谢
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-11-26 22:00
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2010-1-8 13:14:18 | 显示全部楼层
    真牛,向你学习,什么时候也把算法经我们分析一下啊。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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