ida有不少主流调试器的扩展插件,如windbg/gdb等,可以在静态分析的基础上动态调试二进制文件。可是众多调试器扩展中没有兼顾ollydbg,难免觉得是一项缺憾。
最近在github上发现一个插件:ret-sync,不仅弥补了ida对ollydbg支持的空白,还额外支持x64dbg/lldb等调试器:
1.虽然作者建议使用vs2017生成插件,但由于vs2017的bug,建议换用其他低版本编译器。笔者发现vs2013亦能生成插件。
2.编译生成的windbg扩展,需要区分x86/x64版本。x86的dll放到C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\winext目录下;相应的,x64的dll放到C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\winext目录下。编译生成的ollydbg1扩展,放到ollydbg1菜单栏Options-Appearance-"UDD path"所指定的路径:
3.笔者使用的是IDA Pro 7.0 。由于IDA7.0内置了python2.7且支持x64位系统,因此,需要额外安装python2.7 x86-64版本,否则遇到诸如<总结IDA遇到的python问题>一文中提到的各种奇葩问题。
4.将ext_ida目录下的所有文件拷贝到IDA的plugins目录中:
1.首先在IDA中加载待调试的二进制,保存(Ctrl+W)生成idb文件。本文用Crackmes.cf中Level1的#ParadoxX做示例,加载AC1D.Materie.exe并保存,最终生成AC1D.Materie.idb,如图:
2.IDA中启动rer-sync插件,Edit-Plugins-"ret sync":
此时会弹出ret sync插件的窗口,如果前面的环境搭建正确,IDA的Output窗口会输出:
[sync] form create Note: FormToPyQtWidget: importing 'sip' module into <module '__main__' from ''> [sync] default idb name: AC1D.Materie.exe [*] sync enabled <----------------------------sync插件加载成功 [*] init_broker [*] cmdline: "C:\Python27\python.exe" -u "D:\Program Files\IDA ... [sync] name AC1D.Materie.exe [sync] module base 0x400000 [sync] hexrays #7.0.0.170914 found [sync] hexrays version >= 7.2 is needed [*] broker new state: Starting [*] broker new state: Running [*] broker started ... [*] << broker << dispatcher not found, trying to run it [*] << broker << dispatcher now runs with pid: 4464 [*] << broker << connected to dispatcher [*] << broker << listening on port 61085 <-----------sync开始侦听并等待调试器链接
3.看IDA的输出,感觉ret sync在IDA上运行的是个服务端插件;要正常工作,还需要客户端去连接。我们的客户端当然就是运行了ret sync扩展的windbg/ollydbg了。先用ollydbg演示一下。
4.在ollydbg中加载AC1D.Materie.exe
ollydbg加载完毕后,eip可能指向系统模块所在空间。需要设置初始中断的位置为
"Debugging options"-Events-Make first pause at"-"Entry point of main moudle"
为什么要这么设置?根据ret sync的作者解释,只有当调试器的Eip所在的模块与IDA生成的idb同名时,插件才开始工作! 根据od"Memory Map"模块图和CPU窗口可以确定,我的ollydbg目前满足使用插件的条件:
点击plugins-"ret sync plugin"-sync,此时IDA disassemly窗口对应的指令会变黄,同时输出窗口显示:
[*] << broker << dispatcher now runs with pid: 4464 [*] << broker << connected to dispatcher
在Ollydbg中按F7/F8使EIP向下运行,IDA中黄色高亮光标会跟着变化:
嗯,还真是个不错的插件,我喜欢