BE: Binary Editor
Анотація
Є цілий клас бінарних редакторів, серед яких 010 Editor, beye, hiew, Binary Ninja, WinHex, що мають окрім HEX режиму — режим дизасемблера. Такі програми зручно використовати для дослідження ROM файлів, прошивок дронів, GPU карточок, телефонів, BIOS, у якості систем накладання патчів, створення map-файлу бінарного образу за допомогою текстових анотацій, а також для візуального аналізу об`єктного коду. Фактично це objdump, але з можливістю зберігання та візуального редагування.
У цій статті презентується концепт сучасного нового представника цієї когорти редакторів — BE (Binary Editor) InfoSec Hex Editor, який має наступні характеристики:
— Без залежностей, потрібно тільки C99/POSIX які є стандартом
— Без використання ncurses та S-Lang, тільки termios
— Модальність редагування HEX з варіативною довижиною рядка
— Модальність редагування ASM об`єктного коду з відображенням дизасемблера
— 16, 32, 64 бітні режими процесора
— Маркування редагованих байтів перед збереженням
— Анотація регіонів
— Пошук байтової послідовності
— Побітове редагування
— Редагування секторів дисків (LBA)
— Створення та накладення патчів з анотованих регіонів
— Повна підтримка x86 архітектури та її розширень у дизасемблері
— vi-подібна система команд та режимів
— Компактне ядро з підтримкою Maс та Linux
— Підтримка контейнерів обʼєктного коду ELF, Mach-O, PE/COFF
— Перша лінія дизасемблерів: EM64T, RISC-V, AArch64
— Друга лінія дизасемблерів: M68K, PowerPC, MIPS, SuperH-4
— Третя лінія дизасемблерів: PDP-11, 8080/8085/Z80/MSX, 6502
— Четверта лінія дизасемблерів: CLR, JVM, BEAM, EFI Byte Code
Параметри
Цей редактор можна також використовувати у якості вправи яка може замінити написання консольних ігор типу Тетріса, Ксонікса, Арканоїда. Головним чином це сцена яка обмежена адресним простором файлу, а дійство вібувається у вікні терміналу, два рядки якого виділені під титул та статуси. Так як сучасні процесори використовують 64-бітний обʼєктний код, то мінімальну ширину терміналу для комфорного використання визначено у 120 колонок, це 24-байти (192-біти) на рядок.
У якості стартер пака використано шістнадцятковий редактор HX Кевіна Порса та його система команд. У якості бібіліотеки дизасемблера використаний дизасемблер з дистрибутива NASM.
Верхній рядок
У верхньому рядку зображається логотип програми, назва процесору на якому запущено програму, бітність обʼєктного коду, режим дизасемблера чи шістнадцятковий, адреса курсору у файлі, розмір файлу, та відношення поточного курсору до розміру файлу.
Шістнадцяткова модальність
У шістнадцятковій модальності дозволяється робити PAGE UP та PAGE DOWN, а також робити навігацію в межах вікна.
Модальність дизасемблера
У модальності дизасемблера можна здійснювати навігацію лише в межах вікна. При поверненні в шістнадцятковий режим, зберігається позиція курсору яка була там до переходу в режим дизасемблера.
Режим команд
Режим команд нагадує vi, дозволяє зробити перехід на певну позицію в файлі, та виставити бітність процесорра та ширину рядка для дампу, а також шукати бінарну послідовність.
Режими редагування
Існує 2 режими радагування які сумісні з редактором HX: INSERT та REPLACE, у HEX модальності доступна також можливість редагування ASCII. Для переходу в ці режими використовуються наступні літери:
Для зміни бітності процесора використовуються наступні літери:
Для зміни модальностей використовуються наступні літери:
Код
Репозиторій проекту github.com/5HT/be опубліковано під DHARMA ліценцією, яка забороняє використання BE InfoSec Editor для росіян та всіх хто з ними повʼязаний. Для всіх інших це не відрізняється від ISC ліцензії.