Voltron — это расширяемый набор инструментов пользовательского интерфейса отладчика, написанный на Python. Он направлен на улучшение пользовательского опыта различных отладчиков (LLDB, GDB, VDB и WinDbg), позволяя подключать служебные представления, которые могут получать и отображать данные с хоста отладчика. Запустив эти представления в других TTY, вы можете создать индивидуальный пользовательский интерфейс отладчика, отвечающий вашим потребностям.
Вольтрон не стремится быть всем для всех. Это не полная замена CLI вашего отладчика. Скорее, он призван дополнить вашу существующую настройку и позволить вам расширить ваш отладчик CLI настолько, насколько вам хочется. Если вам просто нужно просмотреть содержимое регистра в окне рядом с отладчиком, вы можете это сделать. Если вы хотите сделать все возможное и получить что-то, больше похожее на OllyDbg, вы тоже можете это сделать.
Встроенные представления предусмотрены для:
Схема автора выглядит примерно так:
Любую команду отладчика можно разделить на представление и выделить с помощью указанного лексера Pygments:
Больше скриншотов здесь.
Voltron поддерживает LLDB, GDB, VDB и WinDbg/CDB (через PyKD) и работает на macOS, Linux и Windows.
Поддержка WinDbg все еще довольно новая, пожалуйста, откройте вопрос, если у вас возникнут проблемы.
Поддерживаются следующие архитектуры:
lldb | БДБ | ВДБ | ветербг | |
---|---|---|---|---|
х86 | ✓ | ✓ | ✓ | ✓ |
x86_64 | ✓ | ✓ | ✓ | ✓ |
рука | ✓ | ✓ | ✓ | ✗ |
рука64 | ✓ | ✗ | ✗ | ✗ |
PowerPC | ✗ | ✓ | ✗ | ✗ |
Примечание. Сценарий установки полностью поддерживает только производные версии macOS и Debian. Надеемся, что в других дистрибутивах Linux он не выйдет из строя, но он не будет пытаться установить зависимости пакетов. Если вы используете другой дистрибутив, просмотрите install.sh
чтобы определить, какие зависимости вам может потребоваться установить перед его запуском.
Загрузите исходный код и запустите скрипт установки:
$ git clone https://github.com/snare/voltron
$ cd voltron
$ ./install.sh
По умолчанию сценарий установки будет установлен в каталог site-packages
пользователя. Если вы хотите установить в систему site-packages
, используйте флаг -s
:
$ ./install.sh -s
Вы также можете установить в виртуальную среду (только для LLDB) следующим образом:
$ ./install.sh -v /path/to/venv -b lldb
Если вы используете Windows без оболочки, у вас возникли проблемы с установкой или вы предпочитаете установить вручную, ознакомьтесь с документацией по ручной установке.
Если у вашего отладчика есть сценарий инициализации ( .lldbinit
для LLDB или .gdbinit
для GDB), настройте его на загрузку Voltron при запуске, используя сценарий точки входа entry.py
. Полный путь будет внутри пакета voltron
. Например, в macOS это может быть /Library/Python/2.7/site-packages/voltron/entry.py . Скрипт install.sh
автоматически добавит это в ваш файл .gdbinit
или .lldbinit
если обнаружит GDB или LLDB на вашем пути.
ЛЛБД:
command script import /path/to/voltron/entry.py
ГББ:
source /path/to/voltron/entry.py
Запустите отладчик и при необходимости инициализируйте Voltron вручную.
В последних версиях LLDB вам не нужно инициализировать Voltron вручную:
$ lldb target_binary
В более старых версиях LLDB вам нужно вызвать voltron init
после загрузки подчиненного:
$ lldb target_binary
(lldb) voltron init
ГББ:
$ gdb target_binary
ВДБ:
$ ./vdbbin target_binary
> script /path/to/voltron/entry.py
WinDbg/CDB поддерживается только при запуске через Bash с пользовательской средой Linux. Автор тестирует с помощью Git Bash и ConEmu. PyKD и Voltron можно загрузить одной командой при запуске отладчика:
$ cdb -c '.load C:pathtopykd.pyd ; !py --global C:pathtovoltronentry.py' target_binary
В другом терминале (я использую панели iTerm) запустите одно из представлений пользовательского интерфейса. В LLDB, WinDbg и GDB представления обновятся немедленно. В VDB они не будут обновляться до тех пор, пока подчиненный не остановится (в точке останова, после шага и т. д.):
$ voltron view register
$ voltron view stack
$ voltron view disasm
$ voltron view backtrace
Установите точку останова и запустите свой подчиненный.
(*db) b main
(*db) run
Когда отладчик достигает точки останова, представления будут обновлены, чтобы отразить текущее состояние регистров, стека, памяти и т. д. Представления обновляются после выполнения каждой команды в интерфейсе командной строки отладчика с использованием механизма остановки отладчика. Таким образом, каждый раз, когда вы делаете шаг или продолжаете работу и достигаете точки останова, представления будут обновляться.
Посмотрите вики на github.
Вопрос. Почему я получаю сообщение ImportError
при загрузке Voltron?
О. Возможно, у вас установлено несколько версий Python, и вы установили Voltron с использованием неправильной версии. Смотрите более подробную инструкцию по установке.
Вопрос: ГЭФ? ПЕДА? PwnDbg? gdbinit fG?
О. Все отличные расширения для GDB. Эти инструменты в первую очередь предоставляют наборы дополнительных команд для задач эксплуатации, но каждый из них также обеспечивает «контекстное» отображение регистров, стека, кода и т. д., как, например, Voltron. Эти инструменты отображают свой контекст в консоли отладчика каждый раз, когда отладчик останавливается. Voltron использует другой подход, встраивая имплантат RPC-сервера в отладчик и позволяя прикреплять представления из других терминалов (или даже веб-браузеров, или теперь синхронизировать с Binary Ninja), что позволяет пользователю создать более понятный многооконный интерфейс для их отладчик. Voltron отлично работает вместе со всеми этими инструментами. Вы можете просто отключить отображение контекста в выбранном вами расширении GDB и подключить некоторые представления Voltron, сохраняя при этом все преимущества полезных команд, добавленных этими инструментами.
Дополнительную информацию или сообщение о проблемах можно найти в системе отслеживания проблем на github.
Если при загрузке Voltron вы столкнулись ImportError
, убедитесь, что вы следовали инструкциям по установке для вашей платформы.
В более старых версиях LLDB команду voltron init
необходимо запускать вручную после загрузки цели отладки, поскольку цель должна быть загружена до того, как можно будет установить перехватчики Voltron. Voltron попытается автоматически зарегистрировать свой обработчик событий и сообщит пользователю, требуется ли voltron init
.
Дополнительную информацию о поддержке WinDbg/CDB можно найти здесь.
Авторы в основном используют Voltron с самой последней версией LLDB для macOS. Мы постараемся протестировать все на как можно большем количестве платформ и архитектур перед выпуском, но LLDB/macOS/x64 будет, безусловно, наиболее часто используемой комбинацией. Надеюсь, Вольтрон не подожжет ваших питомцев, а YMMV.
См. файл ЛИЦЕНЗИИ.
Если вы используете это и не ненавидите, купите мне пива как-нибудь на конференции. Эта лицензия также распространяется на других участников — Richo определенно заслуживает нескольких кружек пива за свой вклад.
Спасибо моим бывшим работодателям Assurance и Azimuth Security за то, что дали мне время поработать над этим.
Респект Ричо за весь его вклад в Вольтрон.
gdbinit от fG! послужил источником вдохновения для этого проекта.
Спасибо Willi за реализацию поддержки VDB.
Voltron теперь использует Capstone для дизассемблирования, а также внутренний механизм дизассемблирования хостов отладчика. Capstone — это мощный мультиархитектурный дизассемблер с открытым исходным кодом, на основе которого создаются инструменты обратного проектирования и отладки следующего поколения. Проверьте это.
Спасибо grazfather за постоянный вклад.