
Мультиархитектурный REPL и эмулятор ассемблера для вашей командной строки.
scare — это мультиархитектурная REPL-среда и эмулятор ассемблера для вашей командной строки.
Современных REPL-сред для ассемблера не так уж много. Существующие — это либо непрозрачные веб-приложения, либо привязанные к конкретной архитектуре/платформе. scare создан для тех, кто хочет тестировать, экспериментировать или иным образом играться с кодом на ассемблере. Весь собранный код выполняется в эмуляторе, который запускает только тот код, который вы ему передаёте. Мультиархитектурная конструкция базовой библиотеки scarelib задумана модульной, что позволяет быстро добавлять новые архитектуры.
Версия 0.3.0 — это первый публичный выпуск scare.
Основные возможности
Поддерживаемые архитектуры
Требования
Запустите scare из командной строки с нужной архитектурой. Это создаст экземпляр REPL с настройками по умолчанию.
python3 scare.py -a x64
Справка
[x64]400000> /
scare Help
/ /? /help -- Open help menu
/x /exit /q /quit -- Quit the program
/back n -- Go back n number of lines
/dis {0xaddress|$register} NUM -- Disassemble NUM bytes from 0xaddress or $register
/export FILETYPE FILENAME -- Export machine code as FILETYPE to the FILENAME
FILETYPE List:
- bin
- elf64
- pe32
/info -- Info about the emulator state
/l /list -- List the current program
/load file.asm -- Load listing from file.asm (overwrites current program)
/read {0xaddress|$register} NUM -- Read NUM bytes from 0xaddress or $register
/reset -- Reset the emulator to a clean state
/run -- Run the current program
/save file.asm -- Save assembly output to file.asm
[[: Config Commands :]] (Use /c or /config)
NOTE: Run /reset if you are changing emu/* options, otherwise the emulator may not start!
/c -- Print all config options
/c emu/arch -- Print Arch Value
/c emu/arch x64 -- Set Arch to x64
/c x86/xmm 1 -- Enable x86/xmm
Перемещение назад по листингу ассемблера
mov eax, 0x5555
mov ebx, 0xaaaa
xor eax, ebx
/l
/back 2
mov ecx, 0xbbbb
add eax, ecx
Загрузка файла, сохранение файла
/load examples/x64/test.asm
/l
/run
/read $rsp 32
pop rdx
/save test2.asm
Экспорт в бинарный файл: здесь вы должны получить elf64 с именем exit55.elf, который завершается при запуске.
mov eax, 0x3c
mov edi, 55
syscall
/export elf64 exit55.elf
Использование параметров конфигурации
not rax
/c x86/xmm 1
movq xmm4, rax
movaps xmm5, xmm4
Декодирование шелл-кода:

Экспорт кода в elf64 и его запуск:

В будущем можно добавить много всего интересного: больше архитектур (как известных, так и малоизвестных), больше режимов процессора, лучшее эмулирование окружения, горячую замену библиотек emu/asm/dis и т.д. Заставить эмулятор, ассемблер и дизассемблер хорошо работать вместе не всегда просто.
Некоторые функции в данный момент могут быть не поддержаны, поскольку требуют принятия решений по конфигурации эмулятора. Цель проекта — быть универсальным решением REPL и эмулятора для целевой архитектуры. Поэтому дорожная карта развития будет строиться на «добавлении того, о чём просят люди», сохраняя при этом простоту использования и разработки.
Если у вас есть идеи — смело создавайте PR.
Если вы нашли ошибку — смело открывайте issue.
Спасибо и приятного времяпрепровождения!
~ netspooky
Отдельное спасибо команде haunted