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会跟进?
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法