
Um REPL e emulador de assembly multi-arquitetura para a sua linha de comando.
scare é um REPL e emulador de assembly multi-arquitetura para sua linha de comando.
Não existem muitos REPLs de assembly modernos por aí. Os que existem são ou webapps opacas, ou estão vinculados a uma arquitetura/plataforma específica. scare foi feito para pessoas que querem testar, experimentar ou, de outra forma, brincar com código assembly. Todo o código montado é executado em um emulador, que executa apenas o código que você fornece. O design multi-arquitetura da biblioteca subjacente scarelib é pensado para ser modular, permitindo que novas arquiteturas sejam adicionadas rapidamente.
A versão 0.3.0 é a primeira versão pública do scare.
Recursos Principais
Arquiteturas Atualmente Suportadas
Requisitos
Invoque o scare a partir da linha de comando com a arquitetura desejada. Isso criará uma instância REPL com as configurações padrão.
python3 scare.py -a x64
Arquivo de ajuda
[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
Voltando para trás na listagem do assembly
mov eax, 0x5555
mov ebx, 0xaaaa
xor eax, ebx
/l
/back 2
mov ecx, 0xbbbb
add eax, ecx
Carregando um arquivo, salvando um arquivo
/load examples/x64/test.asm
/l
/run
/read $rsp 32
pop rdx
/save test2.asm
Exportar como binário: aqui você deve obter um elf64 chamado exit55.elf que sai quando executado.
mov eax, 0x3c
mov edi, 55
syscall
/export elf64 exit55.elf
Usando opções de configuração
not rax
/c x86/xmm 1
movq xmm4, rax
movaps xmm5, xmm4
Decodificando shellcode:

Exportando código para um elf64 e executando-o:

Há muitas coisas que seriam incríveis de adicionar no futuro: mais arquiteturas (tanto conhecidas quanto obscuras), mais modos de cpu, melhor emulação de ambiente, troca dinâmica entre bibliotecas emu/asm/dis, etc. Fazer o emulador, o montador e o desmontador funcionarem bem juntos nem sempre é simples.
Alguns recursos podem não ser suportados no momento por exigirem decisões sobre a configuração do emulador. O objetivo deste projeto é ser uma solução genérica de REPL e emulador para uma arquitetura alvo. Como resultado, o roteiro de desenvolvimento será "adicionar coisas que as pessoas levantarem", mantendo a facilidade de uso e de desenvolvimento.
Se você tiver ideias, sinta-se à vontade para abrir um PR.
Se você encontrar um bug, sinta-se à vontade para abrir uma issue.
Obrigado e divirta-se!
~ netspooky
Um salve para a haunted crew