ScratchABit — это интерактивный инкрементальный дизассемблер с возможностями анализа данных/потоков управления. ScratchABit посвящен усилиям сообщества обратного проектирования OpenSource (обратное проектирование для создания драйверов/прошивок OpenSource для оборудования, которое не поддерживается должным образом поставщиками, для совместимости оборудования и программного обеспечения, для исследований безопасности).
ScratchABit поддерживает известный в сообществе IDAPython API для написания модулей дизассемблирования/расширения.
ScratchABit находится в стадии разработки, функции добавляются по мере необходимости, вклад приветствуется.
ScratchABit распространяется на условиях GNU General Public License v3 (GPLv3).
Не следует писать запутанным языком. К ним относятся слишком низкоуровневые языки, позволяющие обращаться к неинициализированным переменным, не различающие переменные и функции/процедуры, начинающие индексы массивов с произвольных чисел и т.д. и т.п. ScratchABit написан на Python ( современная версия Python3) для вашего удовольствия и здравомыслия.
Фреймворк пользовательского интерфейса должен обеспечивать взаимодействие пользователя на необходимом уровне, а не добавлять зависимости, раздувание, проблемы и несовместимости между версиями фреймворка. ScratchABit в настоящее время использует простой полноэкранный текстовый пользовательский интерфейс с использованием escape-последовательностей терминала ANSI/VT100 (да, даже библиотека проклятий была сочтена слишком раздутой зависимостью, чтобы навязывать ее пользователям).
Следует использовать простые в использовании текстовые форматы для хранения «базы данных», чтобы облегчить повторное использование, написание инструментов и хранение в системах контроля версий.
Чтобы использовать ScratchABit, вам необходим установленный Python3 (проверено с Python 3.3–3.7) и терминал VT100 (минимум) или XTerm (рекомендуется) или эмулятор терминала (любая система Unix должна быть совместима, например, Linux/BSD и т. д., см. раздел часто задаваемых вопросов ниже). более).
Клонируйте код, используя:
git clone --recursive https://github.com/pfalcon/ScratchABit
Если вы клонировали код без --recursive
, запустите git submodule update --init
в каталоге ScratchABit.
ScratchABit теперь поставляется с плагинами ЦП на базе Capstone Engine, которые обеспечивают доступ к ряду архитектур ЦП. Чтобы использовать его, необходимо установить последний модуль привязок Python для Capstone (вместо пакетов, поставляемых с дистрибутивами ОС, которые часто устаревают). Самый простой способ установить его — в каталог пользовательских пакетов Python:
pip3 install --no-cache-dir --user capstone
Альтернативой является установка его в виртуальную среду Python в каталоге ScratchABit:
python3 -m venv .venv
source .venv/bin/activate
pip3 install --no-cache-dir capstone
Всякий раз, когда вы открываете новый сеанс терминала для работы со ScratchABit, снова запускайте команду source .venv/bin/activate
чтобы активировать виртуальную среду.
Если ничего из вышеперечисленного не помогло, вы можете попробовать установить пакет capstone для всей системы (не рекомендуется):
sudo pip3 install --system capstone
Если вы хотите дизассемблировать файл в самоописывающемся исполняемом формате (например, ELF), просто передайте его в качестве аргумента ScratchABit.py
. Репозиторий включает в себя несколько файлов example-*.elf
для различных архитектур для быстрого старта. Например, чтобы попробовать 32-битную версию x86:
python3 ScratchABit.py example-x86_32.elf
Альтернативно, если вы хотите дизассемблировать необработанный двоичный файл, вам необходимо создать файл .def (определения), чтобы указать, какие области памяти определены для кода, по какому адресу загружать двоичный файл и т. д. (Примечание: файл . def может быть полезен и для .elf и подобных файлов.) Репозиторий включает в себя простой необработанный двоичный код x86_64 и соответствующий файл example-x86_64.def (описание доступных опций можно найти внутри):
python3 ScratchABit.py example-x86_64.def
Нажмите F9 для доступа к меню (мышь также работает в терминалах, совместимых с XTerm). Нажмите F1, чтобы получить справку о привязках клавиш (большинство действий также доступны через меню). Рабочий процесс ScratchABit аналогичен другим интерактивным дизамблерам (может оказаться полезным некоторый предыдущий опыт или дополнительная информация).
Плагины процессора IDAPython можно загружать из любого места пути к модулю Python. Альтернативно, вы можете создать символическую ссылку или скопировать файл(ы) плагина .py
в подкаталог plugins/cpu/
.
После того, как плагин станет доступен, создайте новый файл определений на основе example-x86_64.def
, который задает имя модуля плагина (без расширения .py
) в строке cpu xxx
.
Очень простой пример использования внешнего плагина см. в этом файле esp8266.def, который работает с плагином xtensa.py из репозитория ida-xtensa2.
Вопрос: Какие процессоры/архитектуры поддерживаются?
О: ScratchABit сам по себе не поддерживает какие-либо процессорные архитектуры, его можно полностью перенацелить с помощью плагинов API IDAPython. Доступно множество плагинов, написать новый плагин легко. Чтобы пользователи могли протестировать ScratchABit, в дистрибутив включен простой плагин для процессора x86, использующий под капотом дизассемблер Pymsasid.
Начиная с версии 2.0, также включен плагин Capstone, обеспечивающий доступ к ряду архитектур, включая x86, ARM, MIPS, PowerPC, SPARC и т. д. (поддержка архитектур включается постепенно на основе пользовательского тестирования).
Вы можете прочитать о плагинах, поставляемых вместе со ScratchABit, в README для каталога plugins/cpu/
.
Вопрос: Отладчик?
О: ScratchABit предназначен для статического анализа и простой поддержки новых архитектур ЦП (просто напишите новый плагин ЦП на Python — вы сможете получить первые результаты через несколько часов). Динамический анализ не задумывался как основная функция, и в ближайшем будущем нет планов по его реализации. Хотя патчи приветствуются.
Вопрос: Декомпилятор?
О: Существует сопутствующий проект ScratchABlock для глубокого анализа, преобразования и декомпиляции программ. Ожидается, что по мере развития ScratchABlock некоторые его функции будут доступны в ScratchABit (возможно, через плагины).
В: Я не использую Linux, как мне запустить ScratchABit?
О: Установите Linux в эмулятор/ВМ в вашей системе и радуйтесь.
Вопрос: Обязательный скриншот?
А: Конечно: