BE: Bit Edits
Анотація
Є цілий клас бінарних редакторів, серед яких 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-біти) на рядок.
$ ./be
Error: filename is expected.
usage: be [-vhdboa]
Options:
-v Get version information
-h Print usage info and exits
-d Launch ASM view by default
-b bitness CPU Bitness
-a arch 1:EM64T, 2:ARM64, 3:RISC-V, 4:PPC, 5:SH-4, 6:M68K, 7:MIPS, 8:PDP-11
-o octets Octets per screen for HEX view
У якості стартер пака використано шістнадцятковий редактор HX Кевіна Порса та його система команд. У якості бібіліотеки дизасемблера використаний дизасемблер з дистрибутива NASM.
Верхній рядок
У верхньому рядку зображається логотип програми, назва процесору на якому запущено програму, бітність обʼєктного коду, режим дизасемблера чи шістнадцятковий, адреса курсору у файлі, розмір файлу, та відношення поточного курсору до розміру файлу.
Шістнадцяткова модальність
У шістнадцятковій модальності дозволяється робити PAGE UP та PAGE DOWN, а також робити навігацію в межах вікна.

Модальність дизасемблера
У модальності дизасемблера можна здійснювати навігацію лише в межах вікна. При поверненні в шістнадцятковий режим, зберігається позиція курсору яка була там до переходу в режим дизасемблера.

Режим команд
Режим команд нагадує vi, дозволяє зробити перехід на певну позицію в файлі,
та виставити бітність процесорра та ширину рядка для дампу, а також шукати
бінарну послідовність.
:0x1000
:w
:q!
:help
:set octets=16
:set bitness=32
/F0 A1 20
Режими редагування
Існує 2 режими радагування які сумісні з редактором HX: INSERT та REPLACE, у HEX модальності доступна також можливість редагування ASCII. Для переходу в ці режими використовуються наступні літери:
[i] INSERT
[I] INSERT ASCII
[r] REPLACE
[R] REPLACE ASCII
Для зміни бітності процесора використовуються наступні літери:
[2] 16-bit
[3] 32-bit
[4] 64-bit
Для зміни модальностей використовуються наступні літери:
[d] Disassembler
[x] Hex
Код
Репозиторій проекту github.com/BitEdits/be опубліковано під DHARMA ліценцією, яка забороняє використання BE InfoSec Editor для росіян та всіх хто з ними повʼязаний. Для всіх інших це не відрізняється від ISC ліцензії.