ret-sync插件:windbg/ollydbg+ida逆向调试神器

    ida有不少主流调试器的扩展插件,如windbg/gdb等,可以在静态分析的基础上动态调试二进制文件。可是众多调试器扩展中没有兼顾ollydbg,难免觉得是一项缺憾。

    最近在github上发现一个插件:ret-sync,不仅弥补了ida对ollydbg支持的空白,还额外支持x64dbg/lldb等调试器:

ret-sync插件:windbg/ollydbg+ida逆向调试神器

使用插件前的准备工作

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"所指定的路径:

ret-sync插件:windbg/ollydbg+ida逆向调试神器

3.笔者使用的是IDA Pro 7.0 。由于IDA7.0内置了python2.7且支持x64位系统,因此,需要额外安装python2.7 x86-64版本,否则遇到诸如<总结IDA遇到的python问题>一文中提到的各种奇葩问题。

4.将ext_ida目录下的所有文件拷贝到IDA的plugins目录中:

ret-sync插件:windbg/ollydbg+ida逆向调试神器--->ret-sync插件:windbg/ollydbg+ida逆向调试神器

使用插件

1.首先在IDA中加载待调试的二进制,保存(Ctrl+W)生成idb文件。本文用Crackmes.cf中Level1的#ParadoxX做示例,加载AC1D.Materie.exe并保存,最终生成AC1D.Materie.idb,如图:

ret-sync插件:windbg/ollydbg+ida逆向调试神器

2.IDA中启动rer-sync插件,Edit-Plugins-"ret sync":

ret-sync插件:windbg/ollydbg+ida逆向调试神器

此时会弹出ret sync插件的窗口,如果前面的环境搭建正确,IDA的Output窗口会输出:

ret-sync插件:windbg/ollydbg+ida逆向调试神器

[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插件:windbg/ollydbg+ida逆向调试神器

为什么要这么设置?根据ret sync的作者解释,只有当调试器的Eip所在的模块与IDA生成的idb同名时,插件才开始工作! 根据od"Memory Map"模块图和CPU窗口可以确定,我的ollydbg目前满足使用插件的条件:

ret-sync插件:windbg/ollydbg+ida逆向调试神器

点击plugins-"ret sync plugin"-sync,此时IDA disassemly窗口对应的指令会变黄,同时输出窗口显示:

ret-sync插件:windbg/ollydbg+ida逆向调试神器

[*] << broker << dispatcher now runs with pid: 4464
[*] << broker << connected to dispatcher

在Ollydbg中按F7/F8使EIP向下运行,IDA中黄色高亮光标会跟着变化:

ret-sync插件:windbg/ollydbg+ida逆向调试神器

嗯,还真是个不错的插件,我喜欢

上一篇:c# – 使用ReaderWriterLockSlim调试死锁


下一篇:64位内核开发第六讲,Windbg调试ring3跟Ring0.一起调试