前言
前段时间重装了系统,然后上周准备用ida去分析NTQQ的文件修改检测;但是我发现ida在加载pdb文件时会保存崩溃或者卡死。
分析
其实,重装前是能正常使用的;但是,我不可能为了ida再去做一次重装系统。
我尝试去搜索引擎寻找资料并没有找到直接可用的解决方案;不过,有一篇解决IDA报错的博文给出了一个方法:使用ProcessMonitor去记录IDA的行为,根据行为判断异常点。
确定文件正常
我将ida软件扔到沙盒与虚拟机中,都能够正常运行使用;那说明要么我装的软件与它产生冲突,或者我系统坏了。
对比行为
我认为最快的方法就是记录程序在虚拟机的行为以及宿主中的行为,然后去比较行为记录,找到有问题的地方。
以下就是程序在宿主与虚拟机中的行为比对。可以发现,虚拟机中并没有特别多的行为,而是很快就进行pdb的读取;(我也在宿主中测试过,随便输个路径,报错是一样的;也就是还没到加载文件那一步就挂了)左边是宿主,进行了大量注册表读取。
往下翻,发现它跑去找VisualStudio玩了,太怪了。
又去看了一下崩溃前的行为,加载了VS的一个文件,然后挂掉;
于是,我严重怀疑是VS搞的鬼。
ida是通过注册表找到vs的,那我禁止它读取注册表中VS数据能不能阻止它去调用VS的文件呢。
解决1
应用火绒的配置后,重新使用ida去加载pdb文件,成功了。
解决2
在VS中安装C++组件,勾选“C++桌面开发”即可
使用VS的SDK加载的pdb结果会比自带的简洁明了。
总结
文章写的很顺利,其实中间我以为系统问题,还尝试使用修复命令,也怀疑系统组件有问题,想通过系统更新看有没有什么修复补丁;但实际上都没解决,都是盲目尝试。
在ProcessMonitor中看到VS时,我就觉得很可能是它的问题,因为我虚拟机没有VS;
为此,我还专门把VS卸载了,卸载后发现确实有用,然后才去想共存的方法,就是通过火绒去“隔断”它俩之间的联系。
在“解决”中可以看到 It appears that MS DIA SDK is not installed.
所以,深层原因应该是ida识别到VS,就以为DIA SDK已经安装了,就去加载,失败了;
实际上这个SDK需要在VS中安装C++组件,但是我没有装。