
Un REPL y emulador de ensamblador multiarquitectura para tu línea de comandos.
scare es un REPL y emulador de ensamblador multiarquitectura para tu línea de comandos.
No hay muchos REPLs de ensamblador modernos disponibles. Los que existen son o aplicaciones web opacas, o están ligados a una arquitectura/plataforma específica. scare fue creado para personas que quieren probar, experimentar o jugar con código ensamblador. Todo el código ensamblado se ejecuta en un emulador, que ejecuta únicamente el código que le des. El diseño multiarquitectura de la biblioteca subyacente scarelib está pensado para ser modular, permitiendo añadir nuevas arquitecturas rápidamente.
La versión 0.3.0 es la primera versión pública de scare.
Características principales
Arquitecturas soportadas actualmente
Requisitos
Invoca scare desde la línea de comandos con la arquitectura deseada. Esto creará una instancia REPL con la configuración predeterminada.
python3 scare.py -a x64
Archivo de ayuda
[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
Retroceder en el listado de ensamblador
mov eax, 0x5555
mov ebx, 0xaaaa
xor eax, ebx
/l
/back 2
mov ecx, 0xbbbb
add eax, ecx
Cargar un archivo, guardar un archivo
/load examples/x64/test.asm
/l
/run
/read $rsp 32
pop rdx
/save test2.asm
Exportar como binario. Aquí deberías obtener un elf64 llamado exit55.elf que sale cuando se ejecuta.
mov eax, 0x3c
mov edi, 55
syscall
/export elf64 exit55.elf
Usando opciones de configuración
not rax
/c x86/xmm 1
movq xmm4, rax
movaps xmm5, xmm4
Decodificando shellcode:

Exportando código a un elf64 y ejecutándolo:

Hay muchas cosas que sería increíble añadir en el futuro: más arquitecturas (tanto conocidas como oscuras), más modos de CPU, mejor emulación del entorno, intercambio en caliente entre las bibliotecas emu/asm/dis, etc. Conseguir que el emulador, el ensamblador y el desensamblador funcionen bien juntos no siempre es sencillo.
Algunas características pueden no estar soportadas en este momento porque requieren decisiones sobre la configuración del emulador. El objetivo de este proyecto es ser una solución genérica de REPL y emulador para una arquitectura objetivo. Como resultado, la hoja de ruta de desarrollo va a ser "añadir cosas que la gente proponga", manteniéndolo fácil de usar y de desarrollar.
Si tienes ideas, no dudes en hacer un PR.
Si encuentras un bug, no dudes en abrir un issue.
¡Gracias y diviértete!
~ netspooky
Un saludo al equipo haunted.