
ret-sync — это набор плагинов, который помогает синхронизировать сеанс отладки (WinDbg/GDB/LLDB/OllyDbg2/x64dbg) с дизассемблерами IDA/Ghidra/Binary Ninja.
ret-sync расшифровывается как Reverse-Engineering Tools SYNChronization. Это набор плагинов, которые помогают синхронизировать сеанс отладки (WinDbg/GDB/LLDB/OllyDbg/OllyDbg2/x64dbg) с дизассемблером (IDA/Ghidra/Binary Ninja). Основная идея проста: взять лучшее из двух миров (статического и динамического анализа).
Отладчики и динамический анализ дают нам:
!peb, !drvobj,
!address и т.д.)Дизассемблеры и статический анализ дают нам:
Ключевые возможности:
ret-sync является форком qb-sync, который я разрабатывал и поддерживал во время работы в Quarkslab.
Плагины отладчиков:
ext_windbg/sync: исходные файлы расширения WinDbg, после сборки: sync.dllext_gdb/sync.py: плагин GDBext_lldb/sync.py: плагин LLDBext_olly1: плагин OllyDbg 1.10ext_olly2: плагин OllyDbg v2ext_x64dbg: плагин x64dbgПлагины дизассемблеров:
ext_ida/SyncPlugin.pyext_ghidra/dist/ghidra_*_retsync.zip: плагин Ghidraext_bn/retsync: плагин Binary NinjaИ библиотечный плагин:
ext_lib/sync.py: автономная библиотека PythonПлагины IDA и GDB требуют корректной установки Python. Поддерживаются Python 2 (>=2.7) и Python 3.
Предварительно собранные двоичные файлы для отладчиков WinDbg/OllyDbg/OllyDbg2/x64dbg предоставляются
через конвейер Azure DevOps:
Выберите последнюю сборку и проверьте артефакты в разделе Related: 6 published.

Предварительно собранный архив плагина Ghidra находится в ext_ghidra/dist.
ret-sync должен работать «из коробки» для большинства пользователей с типичной установкой: отладчик и дизассемблер(ы) на одном хосте, имена модулей совпадают.
Тем не менее, в некоторых сценариях может потребоваться специальная конфигурация. Для этого
расширения и плагины проверяют наличие необязательного глобального конфигурационного файла
.sync в домашнем каталоге пользователя. Он должен быть файлом в формате .INI.
Кроме того, плагины IDA и Ghidra также сначала ищут конфигурационный файл
в каталоге IDB или проекта (<project>.rep), чтобы разрешить локальные,
настройки для конкретного IDB/проекта. Если локальный конфигурационный файл присутствует,
глобальный конфигурационный файл игнорируется.
Значения, объявленные в этих конфигурационных файлах, переопределяют значения по умолчанию. Пожалуйста,
обратите внимание, что файл .sync не создаётся по умолчанию.
Ниже мы подробно описываем три распространённых сценария, где конфигурационный файл полезен/необходим:
Раздел [INTERFACE] используется для настройки сетевых параметров.
Предположим, нужно синхронизировать IDA с отладчиком, работающим внутри
виртуальной машины (или просто на другом хосте) — типичный сценарий удалённой отладки ядра.
Просто создайте два файла .sync:
Это указывает плагину **ret-sync** ``IDA`` прослушивать интерфейс
``192.168.128.1`` с портом ``9234``. Само собой разумеется, что этот
интерфейс должен быть доступен с удаленного хоста или виртуальной машины.
* один на машине, где выполняется отладчик, в домашнем каталоге пользователя:```
[INTERFACE]
host=192.168.128.1
port=9234
Он указывает плагину отладчика ret-sync подключаться к плагину ret-sync IDA
настроенному ранее на прослушивание этого интерфейса.
ПРИМЕЧАНИЕ: Здесь необходимо указать реальный IP-адрес, а не использовать 0.0.0.0. Это
связано с тем, что переменная используется несколькими источниками как для привязки, так и для
подключения, поэтому использование 0.0.0.0 приведет к странным ошибкам.
[ALIASES] ntoskrnl_vuln.exe=ntkrnlmp.exe
Раздел ``[ALIASES]`` используется для настройки имени, которое используется дизассемблером (IDA/Ghidra) для регистрации модуля в его диспетчере/менеджере программ.
По умолчанию плагины дизассемблера используют имя входного файла. Однако файл мог быть переименован заранее, и его имя больше не соответствует имени реального процесса или загруженного модуля, видимого отладчиком.
Здесь мы просто указываем диспетчеру использовать имя `ntkrnlmp.exe` (настоящее имя) вместо `ntoskrnl_vuln.exe` (имя IDB).
## gdb с интерфейсом отладки Qt Creator
Интерфейс отладки Qt Creator изменяет способ ведения журнала вывода команд gdb. Поскольку это может мешать синхронизации, существует опция для использования необработанного вывода gdb для синхронизации вместо временного файла. В файле конфигурации .sync используйте```
[GENERAL]
use_tmp_logging_file=false
если вы хотите использовать графический интерфейс отладки Qt для целевого устройства.
/proc/<pid>/mapsВ некоторых сценариях, таких как отладка встраиваемых устройств через последовательный порт или «сырой» прошивки в QEMU, gdb не знает о PID и не может получить доступ к /proc/<pid>/maps.