ret-sync是一组插件,用于同步WinDbg/GDB/LLDB/OllyDbg2/x64dbg 调试会话的插件。
ret-sync
ret-sync的英文全称是 Reverse-Engineering Tools SYNChronization(反向工程工具同步)。它是一组帮助调试会话(WinDbg/GDB/LLDB/OllyDbg/OllyDbg2/x64dbg)与反汇编程序(IDA/Ghidra)同步的插件。其基本思想很简单:从两个不同的状态(静态和动态分析)中获取最佳结果。
调试器和动态分析为我们提供:
1. 带有动态上下文(寄存器、内存等) 的本地视图;
2. 内置专门的功能或API,例如:WinDbg的!peb, !drvobj, !address等。
反汇编和静态分析为我们提供:
1. 模块宏视图;
2. 代码分析、签名、类型等;
3. 形象的图形视图;
4.反编译;
5.在IDB / GPR中持久存储知识。
主要功能:
1. 将图形和带有调试器状态的反编译视图同步;
2. 无需处理ASLR,可实时重新定位地址;
3. 将数据(注释、命令输出)从调试器传递到反汇编器;
4. 多个IDB / GPR可以同时同步,从而可以轻松地跟踪多个模块;
5. 反汇编器和调试器可以位于不同的主机或VM上。
ret-sync是我在Quarkslab期间开发和维护的一个qb-sync分支。
存储库介绍
调试器插件:
ext_windbg / sync:WinDbg扩展源文件,生成:sync.dll
ext_gdb / sync.py:GDB插件
ext_lldb / sync.py:LLDB插件
ext_olly1:OllyDbg 1.10插件
ext_olly2:OllyDbg v2插件
ext_x64dbg:x64dbg插件
以及反汇编程序插件:
ext_ida / SyncPlugin.py
ext_ghidra / dist / ghidra _ * _ retsync.zip:Ghidra插件
运行的前提条件
IDA和GDB插件需要一个有效的Python设置来支持python2和python3。还需要argparse模块,它默认包含在2.7和更高版本的Python标准库中。
二进制发行版
针对WinDbg/OllyDbg/OllyDbg2/x64dbg调试器的预构建二进制文件是通过Azure DevOps管道提出的:
选择最后一个版本,然后在“Related”部分6 published中进行检查。
在ext_ghidra/dist中提供了Ghidra插件的预构建文档
ret-sync配置
对于大多数使用典型设置的用户而言,ret-sync应该是开箱即用的:调试器和反汇编器位于相同的主机上,模块名称匹配。
在某些情况下,仍可以使用特定配置。为此,扩展程序和插件会在用户的主目录中检查名为.sync的可选全局配置文件,它必须是有效的.INI文件。
此外,IDA和Ghidra插件还将首先在IDB或项目目录( < project > .rep)中查找配置文件,以允许按IDB /项目进行本地设置。如果存在本地配置文件,则忽略全局配置文件。
在这些配置文件中声明的值将覆盖默认值,请注意,默认情况下不创建.sync文件。
下面我们详细介绍三个配置文件有用/需要的常见场景:
1. 远程调试;
2. 模块名称不匹配;
3. 缺失的PID。
远程调试:调试器和反汇编器位于不同的主机上
[INTERFACE]部分用于自定义与网络相关设置,让我们假设有人希望将IDA与运行在虚拟机或另一个主机中的调试器进行同步,这是常见的远程内核调试场景。
简单地创建两个.sync文件:
一个在安装了IDA的计算机上的IDB目录中:
它告诉ret-sync IDA插件使用端口9234在接口192.168.128.1上进行侦听,所以,该接口必须可以从远程主机或虚拟机访问。
另一个在执行调试器的计算机上,位于用户的主目录中:
它告诉ret-sync调试器插件连接到之前配置为在此接口中监听的ret-sync IDA插件。
注意:你必须在此处指定一个真实IP,而不要使用0.0.0.0。这是因为该变量同时被多个源用于绑定和连接,因此使用0.0.0.0将导致奇怪的错误。
IDB和调试器模块名称不同