心血来潮想到做crackme来练练手,只借助IDA吧,很难跟踪程序运行过程中的数据;只借助windbg吧,没法修改变量名。开着IDA边改函数名,边根据代码偏移在windbg中定位实在很低效,所以我想有没有什么办法能把两者结合起来?最后在hex-ray.com上找到了解决方案:<Debugging Windows Applications with IDA Windbg Plugin>。
这篇文章介绍了4种调试情景,具体操作步骤完全可以参考这篇文章。本文对文中提到的设置调试Win32 App所需的步骤做一点简化:IDA的"windbg plugin"依赖于windbg目录下的dbgeng.dll,hex-ray.com建议修改IDA安装目录下cfg/ida.cfg中的DBGTOOLS的路径,使他指向windbg.exe所在的目录。作为替代方案,可以把windbg.exe所在目录添加到环境变量PATH中。如下:
设置环境变量后在IDA中选择调试器:Debugger-“Select a debugger”,选择windbg:
完成后IDA中F9(运行),启动调试界面,红框中输入windbg命令,不过部分元命令(如 .cls)好像没什么用:
需要注意的是调试时用到的快捷键是IDA的快捷键,如下断点是F2,而不是windbg的F9;单步分别是F7,F8,而不是windbg的F10/F11。
最后的Tips:
按IDA的说法idb代码数据库文件可以在不同机器间传输,供其他人逆向分析。我在实际调试过程中发现,调试时,最好把逆向的程序放到c:\之类跟用户名无关的目录下,比如我把逆向的程序放在c:\studio下。为什么这么做?.idb文件好像记录了IDA加载的exe文件的路径。如果IDA在A机器上的d:\studio下加载并生成1.idb文件,当把1.idb文件拷贝到B机器c:\studio下并打开进行调试,IDA会一直报错:找不到目标,哪怕把1.exe拷贝到B机器c:\studio下,仍然无法调试。唯一的解决方案是在不同机器间,用相同的路径名存放idb文件