首页
社区
课程
招聘
[原创]哎哟,QQ又崩溃了。当一回义工dbgger回忆录
发表于: 2012-4-17 15:35 15642

[原创]哎哟,QQ又崩溃了。当一回义工dbgger回忆录

2012-4-17 15:35
15642

QQ在我电脑崩溃的次数可以说非常少……记忆中几次崩溃的时间都非常偶然,很难重现。每次我都不让上传崩溃信息,因为我觉得qq用户群那么大,bug崩溃信息早有人上传过了。

昨天突然又发生了,印象中总是发生在登陆完qq要显示主界面的一刻挂了。我突然间怀疑,是不是个盗号木马有bug,插入qq在登陆完毕的时候打算做什么事情导致的崩溃。其实我仔细看过dmp里的已加载模块列表,没什么第三方的dll啊,但还是有点强迫症的要捉捉马才放心……

首先说明下环境:

QQ 2012 版本详细: 1.81.4280 (原版无开挂)
Win 7 32bit

分析dump:
--------------
    QQ每次崩溃都会有dump生成在%temp%\tencent。dmp直接vc2008打开启动调试可以模拟重现最后崩溃线程的进程信息。(图1)这样的崩溃点让调试人情何以堪啊。擦,栈信息没有任何有用信息。不知道来自哪个模块。蛋疼有木有!我不知道这样的dmp文件上传给他们工程师处理是不是也蛋疼呢有木有!……(或者你有什么分析dmp的经验请回帖分享撒)
    不过细心的想从栈看得起来……应该是一个刚开启的线程,刚要执行代码时,代码地址无效,尼玛是无效的内存。这只是猜…那会是谁起的线程这个信息在dmp的崩溃现场是没法找到的了,最蛋疼了有木有!没什么头绪的时候只能想办法重现现场……

重现崩溃现场:
--------------
    昨晚我开始的方法是这样的,我用伪代码描述:
    do{
           手动关QQ。
           手动再双击QQ按登录。
           sleep 15秒
           基本就登录成功了主界面显示出来了
           t ++;
    }while(没崩溃?);
居然死循环,苦力活啊(程序猿们有同感吗?有木有?),上面的t到某数值后我投降鸟。
然后把QQ设置为保存密码和自动登录,并把上面的伪代码写成了个简单程序 ,然后去睡觉……
第二天醒来……尼玛0崩溃,尼玛一晚的时间有木有!去%temp%\tencent找不到任何dmp。

我不断思索回忆曾经崩溃时可能和操作什么有关。。。一定得有个辅助触发条件……最后怀疑,我一般是登录一个QQ后再运行另一个QQ准备挂上去……难道因为多开个QQ这个盗号木马因为某逻辑混乱崩溃了?

    接下来的方法是这样的,我用伪代码描述:
    do{
           手动关掉全部QQ。
           手动再双击QQ按登录。
           然后不停双击启动出很多QQ的登录界面
           等那个登录成功了主界面显示出来了
           t ++;
    }while(没崩溃?);
尼玛机子好卡哦………t也不知道什么数字了,咦,突然崩溃了,哈哈……哈哈……虽然是无厘头的再现崩溃但还是好欣慰,打开dmp文件,擦,和图(1)几乎一样的,擦擦擦……(后来还有若干次崩溃的,都这样),发现地址呈现出来的规律XXXXB556。可能和dll随机基地址有关。
    这个地址规律不是偶然,XXXXB556会不会是新线程的入口地址呢?难说,但可以猜测是某个dll被free掉后eip执行到这里就挂了。也许还有点希望……

    我要想办法揪出创建线程的那个鬼。于是写了个msimg32.dll劫持的到qq目录,hook了CreateThread, 把创建的线程函数地址、线程id以及调用者的返回地址都记录下来。
    通过栈找到调用CreateThread后的返回地址,CreateThread的第一个参数是lpThreadAttributes ,  *(DWORD*)((char*)&lpThreadAttributes - 4)这样就得到返回地址,并把成功创建的新线程id给log下来。以便和dmp中的崩溃现场的线程id对证。

    接下来又是重复上面循环的苦力活…………
    ……………………最后又搜集了几个宝贵的dmp。

真正的现场 -_-!
-----------------------


    这下信心满满的,根据每个dmp中的崩溃线程id去log找是谁调用的CreateThread创建的,以及每个返回地址,发现地址都很有规律。我终于要找到这个地址所在的模块了……
于是直接修改myCreateThread 的hook代码,根据地址规律卡住现场……
        if (((DWORD)lpStartAddress & 0xFFFF) == 0xb540)
        {
                DbgPrint(_T("this pid=%d this tid=%d, CreateThread(0x%.8x) ######## 0x%.8x\r\n"), GetCurrentProcessId(), GetCurrentThreadId(), lpStartAddress, *(DWORD*)((char*)&lpThreadAttributes - 4));
                while (1)
                        Sleep(1000);//卡住,接着是OD挂上去
        }




看到XXXXB556有没有,咋老在这里挂的…………

我的flash ocx版本11.1.102.63

最后
------------------
flash崩溃吧感觉情有可原……原因难说,
也放心了,不是什么木马,也不想追究原因了
想想这个调试过程吧很蛋疼。。。写出来吧也不知道有木有意义……想想或许QQ会跟进?


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
  • 1.jpg (54.05kb,1439次下载)
  • 2.jpg (19.23kb,1439次下载)
  • 3.jpg (26.24kb,1440次下载)
  • 4.jpg (30.37kb,1444次下载)
收藏
免费 6
支持
分享
最新回复 (24)
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
楼主太不淡定了。QQ崩溃立马强迫自己想是不是种了木马。难道楼主一起专门搞过这事情?(开玩笑而已。)
2012-4-17 16:10
0
雪    币: 128
活跃值: (27)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
捉马只是“剧情”需要。实际上并非如此,哈
2012-4-17 16:21
0
雪    币: 46
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我崩溃过很多次   基本上 是因为加群太多。。开消息 然后 就开始发送错误报告...
2012-4-17 18:44
0
雪    币: 220
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
崩溃得我不敢使用新版了,还是用个老版本安逸点
2012-4-17 20:10
0
雪    币: 357
活跃值: (3443)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
6
Flash64_11_2_202_233
2012-4-17 21:45
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我的qq崩溃好多次了
2012-4-17 22:17
0
雪    币: 2471
活跃值: (2140)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
有同样的情况,学习一下~~~
2012-4-18 00:51
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
精神可嘉,闲得蛋疼
2012-4-18 09:34
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
10
有意思,呵呵
2012-4-18 09:36
0
雪    币: 546
活跃值: (1667)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
11
推荐你用用这个。不错的,我喜欢便携式的,http://www.portableappc.com/internet/qq-international-portable/
2012-4-18 11:37
0
雪    币: 107
活跃值: (404)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
随便排查一下就知道不是木马拉,这么纠结..呵呵...

不过佩服楼主的恒心和毅力..慢慢玩出来了..
2012-4-18 13:23
0
雪    币: 639
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
楼主的循环太蛋疼了.....
2012-4-18 14:03
0
雪    币: 2503
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
一样的情况 我卸载了 从新安装!
2012-4-18 15:54
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
flash 11……
楼主精神可嘉……

我对QQ的一个方面有点好奇,就是它的拍拍的推荐那里用了HTTPS连接,搞的有次弹出警告说证书过期。
难道拍拍的账户可以直接付费?不像支付宝那样需要额外的支付密码?

msimg32.dll的那个hijacking我现在才知道还能用……我以为这个早补上了
刚刚试了下,我win7 SP1 32bit还是受影响
2012-4-18 16:31
0
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
flash最终会败给html5
2012-4-18 22:23
0
雪    币: 132
活跃值: (137)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
http://www.portableappc.com/internet/qq-international-portable/ 还不错哦
2012-4-18 23:40
0
雪    币: 563
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
有同感 加了100个群有时候会出错 用的是非官方 显示IP 的qq
2012-4-19 00:50
0
雪    币: 21
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
19
楼主遇到问题解决问题的思路有的参考,哈哈~
2012-4-19 10:44
0
雪    币: 261
活跃值: (83)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
20
可不可以把你提到那两个循环代码完整的贴出来,大家学习一下。
我觉得那部分是很不错的,而且我也喜欢你分析问题的方式,不过我不喜欢你用那么多的网络术语,显得太过溜汽!
2012-4-19 18:30
0
雪    币: 1847
活跃值: (1806)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
21
是的,一般就是消息很多的时候,打开群卡一会儿就挂了
2012-4-23 18:08
0
雪    币: 261
活跃值: (83)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
22
模拟QQ登陆的伪代码可否上传一份,大家学习一下。
2012-4-24 08:48
0
雪    币: 348
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
嗯!楼主的毅力惊人,不过也是学习过程了!
2012-4-26 19:29
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
直接用QQ国际版,快速无广告
2012-4-28 17:34
0
雪    币: 282
活跃值: (236)
能力值: ( LV3,RANK:37 )
在线值:
发帖
回帖
粉丝
25
分析的很好撒
2012-4-29 09:50
0
游客
登录 | 注册 方可回帖
返回
//