Дизассемблер с графическим редактором блок-схем. Версия 0.1.2a
Лицензия: GPL v3 или более поздняя

Системные требования:


Дизассемблер: ОС Linux, платформа x86
Редактор: Java 1.6 и выше

Поддерживаются файлы PE и ELF для архитектуры x86 (пока только 32 бит)

Назначение:


Пакет предназначен для дизассемблирования исполняемых файлов и представления их кода в форме, удобной для понимания человеком. В качестве такой формы выбран язык блок-схем. Такая форма представления позволяет сразу увидеть общий вид алгоритма функции, наличие циклов, ветвлений. Также отображение в виде блок-схемы позволяет абстрагироваться от конкретного размещения участков кода в теле функции и удалить команды безусловного перехода по метке. Полученные блок-схемы можно редактировать, и сохранять в виде файлов ассемблера. Все необходимые команды безусловного перехода будут расставлены автоматически.

Описание:


Состоит из 3-х модулей:

dissector - распаковщик/анализатор структуры файла. Подготавливает файл к дизассемблированию. Разделяет файл на секции (и распаковывает секцию ресурсов для PE), записывает информацию об адресах секций и адрес точки входа в файл cfg.bin, загружаемый дизассемблером. Информация о импортируемых функциях записывается в файл idata.bin, а об экспортируемых - в edata.bin. Файл распаковывается в каталог с именем файла, с добавлением суффикса "_dissected", туда же записываются файлы конфигурации. Можно принудительно задать выходной каталог ключом -d. Лог распаковщика записывается в файл report.txt.

disasm - дизассемблер. Загружает секции согласно файлу конфигурации, и выполняет дизассемблирование, начиная с точки входа. Добавляет 2 файла в каталог с распакованным файлом: listing.txt, который содержит дизассемблированный код, и log.txt, куда записывается лог работы: дизассемблированные команды в порядке их обработки, информация об ошибках, и т.д. В конце log.txt записывается информация о начальном адресе и длине последовательностей команд. Можно добавить адреса команд, а также запретить переход на определённый адрес, используя файл addr.txt, куда следует записать строки "+ 0xHHHHHHHH" и "- 0xHHHHHHHH" соответственно. Количество строк не ограничено. Если надо чтобы декомпиляция добавленных адресов была произведена после основной, перед строками адресов следует вставить команду "go". Количество таких команд также не ограничено. В результате при встрече каждой команды go дизассемблер будет продолжать дизассемблирование для вновь добавленных адресов.

AsmBlockEdit - редактор блок-схем. Загружает файл на языке ассемблера и отображает процедуры в виде блок-схем.
Команды условного перехода отображаются в виде блоков ветвления красного цвета, команды ret и jmp по содержимому регистров - блоками завершения серого цвета, прочие команды - блоками жёлтого цвета.
Всякая блок-схема имеет одно начало, отображаемое специальным блоком 0, и 0 или больше выходов. Полученые схемы можно редактировать, и сохранять в виде файлов ассемблера. Язык блок-схем расширен добавлением модуля, который может содержать вложенную блок-схему, что позволяет создавать вложенные схемы (Модуль зелёного цвета, InnerModul в меню редактирования - реализовано не полностью).
Блок-схему также можно сохранить в виде файла PNG.
При загрузке в редактор результатов дизассемблирования происходит анализ кода с целью распознавания последовательностей команд и нахождения границ процедур. При этом процедуры, имеющие переходы за пределы своего кода отбрасываются как некорректные, о чём выводится сообщение в System.err. Эта проблема будет решена в следующих версиях.
В AsmBlockEdit используется загрузчик меню из библиотеки com.porty.swing, www.IPsoftware.ru
Поэтому меню можно заменять: для этого запустите редактор с указанием файла меню:

java -jar AsmBlockEdit.jar -m menu-ru-utf8.xml

Файлы меню можно найти в архиве с исходными текстами.
Я надеюсь что процесс редактирования блок-схемы будет интуитивно понятен, потому не описываю. Если это окажется не так - пишите.

Пример использования:



dissector sample.exe
disasm sample.exe_dissected

После чего открыть в AsmBlockEdit файл sample.exe_dissected/listing.txt

dissector & disasm в odasm.tar.bz2 (исходники) и в odasm_bin.tar.bz2 (bin)
AsmBlockEdit в AsmBlockEdit.tar.bz2 (исходники) и в AsmBlockEdit.jar

Скриншоты:


Две процедуры на панели блок-схем:



Панель процедур (открывается после открытия файла)
Красным обозначены блоки данных, синим - процедуры:


Меню редактирования команды (вызывается из меню edit блока):


Что пока не реализовано:

disasm - Поддерживаются не все команды процессора.
AsmBlockEdit - Не сохраняется информация о вложенных модулях в asm-файлах.
Цель install для make (думаю пока рано)
SourceForge.net