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-біти) на рядок.

$ ./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/5HT/be опубліковано під DHARMA ліценцією, яка забороняє використання BE InfoSec Editor для росіян та всіх хто з ними повʼязаний. Для всіх інших це не відрізняється від ISC ліцензії.


˙