
Извлечение меток из файлов IDA, Ghidra, Binary Ninja и Relyze и экспорт базы данных x64dbg. Включая главный адрес radare2.
Эта команда извлекает все метки, найденные в файле LST, который передаётся в качестве единственного аргумента. В текущем каталоге создаётся база данных x64dbg на основе извлечённых меток.
Файл LST можно сгенерировать в IDA через меню File: Produce file -> Create LST file...
$ lst2x64dbg sample.lst
Эта команда извлекает все метки, найденные в CSV-файле, который передаётся в качестве единственного аргумента. В текущем каталоге создаётся база данных x64dbg на основе извлечённых меток. Необходимо указать значение imagebase.
CSV-файл можно сгенерировать в Ghidra через меню Window, выбрав Symbol Table
В открывшемся окне символьной таблицы отсортируйте данные по столбцу Location. Затем выберите все символы, которые не являются внешними. Выделив нужные символы, щёлкните правой кнопкой мыши и выберите: Export -> Export to CSV...
ПРИМЕЧАНИЕ: Если случайно выбраны внешние символы, они будут проигнорированы.

Назовите этот файл <module_name>.csv
$ ghidra2x64dbg -i 400000 sample.csv
Значение imagebase можно найти в самом верху панели дизассемблирования в окне CodeBrowser. Оно является частью заголовка DOS.

В Ghidra есть одна опция анализа, отключённая по умолчанию, которая в определённых ситуациях может предоставить больше меток для кода в образце. Эта опция, WindowsPE x86 Propagate External Parameters, находится в окне «Анализ» (Analysis Options) при первом открытии образца в инструменте CodeBrowser.

Эта команда извлекает все метки, найденные в JSON-файле bnida из Binary Ninja, который передаётся в качестве единственного аргумента. В текущем каталоге создаётся база данных x64dbg на основе извлечённых меток. Необходимо указать значение imagebase.
Чтобы сгенерировать файл bnida из Binary Ninja, сначала установите плагин в соответствии с инструкциями:
https://zznop.github.io/bnida/
После загрузки исполняемого файла в Binary Ninja перейдите в меню Tools и выберите bnida: Export analysis data.

Назовите этот файл <module_name>.json
$ binja2x64dbg -i 400000 sample.json
Эта команда извлекает все метки, найденные в базе данных x64dbg, сгенерированной Relyze, которая передаётся в качестве единственного аргумента. В текущем каталоге создаётся база данных x64dbg на основе извлечённых меток.
Чтобы сгенерировать базу данных x64dbg в Relyze, просто откройте исполняемый файл и в представлении Code щёлкните правой кнопкой мыши и выберите экспорт.

Назовите этот файл <module_name>_relyze.dd32 или <module_name>_relyze.dd64
$ relyze2x64dbg sample_relyze.dd32
Обе команды теперь поддерживают включение местоположения main(), обнаруженного radare2. Просто добавьте -r или -main в любую команду, например:
$ lst2x64dbg -r 0x0040a53a sample.lst
Скопируйте и вставьте виртуальный адрес main из интерфейса Cutter или из командной строки radare2.

Каждый из этих инструментов проверяет текущий каталог на наличие базы данных x64dbg, созданной предыдущим запуском одного из инструментов. Любое смещение из этой базы данных, уже имеющее метку, не будет изменено последующим запуском любого из инструментов. Другими словами, каждый инструмент расширяет список меток, но не перезаписывает уже существующие.
Если вы создали метки вручную, рекомендуется создавать их только в одном дизассемблере. Кроме того, сделайте вывод этого дизассемблера первым обрабатываемым одним из вышеуказанных инструментов. Таким образом, все ваши пользовательские метки гарантированно будут присутствовать в новой базе данных x64dbg.
В будущих версиях этого программного обеспечения появится способ разрешения конфликтов на этапе слияния.