
Интерфейс на PyQt5 для плагина binjatron для Binary Ninja, включающий функции подсветки, призванные облегчить новичкам изучение реверс-инжиниринга.
Умение реверсировать x86-бинарные файлы — важный навык даже за пределами индустрии информационной безопасности. Однако, несмотря на обилие доступных учебных материалов, овладеть им по-прежнему сложно. Многие студенты выражали разочарование по поводу объёма фоновых знаний, необходимых даже для скромного прогресса в работе с простыми бинарными файлами.
Binary Ninja часто рекламируют для студентов благодаря относительно низкой цене, чистому интерфейсу и простоте использования. Промежуточные языки низкого и среднего уровня также дают простой способ понять, что делают инструкции. Этот проект направлен на то, чтобы сделать Binary Ninja ещё более удобным инструментом для новичков, упростив визуализацию выполнения бинарного файла.
Этот проект является результатом программы летней стажировки NCC Group 2017 года. Компоненты визуальной отладки можно считать духовным преемником Microcorruption — CTF по безопасности встраиваемых систем, созданного Matasano Security. Дальнейшие обновления будут отслеживаться на https://github.com/ehennenfent/binja_dynamics. NCC Group не несёт ответственности за любые дальнейшие изменения, внесённые в репозиторий после 18 августа 2017 года.
В вашей папке плагинов Binary Ninja выполните:
git clone https://github.com/ehennenfent/binja_dynamics.git
cd binja_dynamics
./install.sh
После загрузки бинарного файла нажмите пункт Enable Dynamic Analysis Tools в меню Tools. Появится окно отладчика, которым можно управлять с помощью кнопок на панели инструментов. По мере пошагового выполнения интерфейс будет обновляться в реальном времени, отражая состояние программы. Благодаря Binjatron текущая инструкция и все точки останова подсвечиваются в представлении бинарного файла. Для каждого адреса памяти и регистра значение подсвечивается оранжевым, если оно изменилось в результате предыдущей инструкции. Аналогичным образом верх и низ текущего кадра стека (а также предполагаемое расположение адреса возврата) подсвечиваются, чтобы новичкам было проще понять, на какие участки памяти стоит обращать внимание. Окно backtrace отображает обратную трассировку текущих кадров стека и предоставляет кнопку, которая автоматически переводит представление бинарного файла к адресу памяти, где плагин ожидает найти адрес возврата. В некоторых функциях кадр стека разрушается не так, как ожидает плагин, поэтому предсказанный адрес возврата не всегда может быть верным.

(На скриншоте выше базовый указатель показан оливково-зелёным)
Иногда может потребоваться обратиться к исходному коду, чтобы понять точное поведение интерфейсов. Предвидя это, многие проектные решения и детали реализации поясняются во встроенных комментариях.
Вики-страница пока ещё довольно скудная, но такие материалы, как список трудностей и журнал разработки, могут пригодиться при поиске решений проблем.
Рекомендуем ознакомиться с репозиторием binja_sensei — приведённые там примеры могут помочь вам начать работу.
За исключением Binary Ninja, install.sh установит все эти зависимости за вас.