
Un REPL ed emulatore assembly multi-architettura per la tua riga di comando.
scare è un REPL e un emulatore assembly multi-architettura per la tua riga di comando.
Non ci sono molti REPL assembly moderni in giro. Quelli che esistono sono o webapp opache, oppure legati a una specifica architettura/piattaforma. scare è stato creato per chi vuole testare, sperimentare o semplicemente giocare con il codice assembly. Tutto il codice assemblato viene eseguito in un emulatore, che esegue solo il codice che gli fornisci. Il design multi-architettura della libreria sottostante scarelib è pensato per essere modulare, consentendo di aggiungere rapidamente nuove architetture.
La versione 0.3.0 è la prima release pubblica di scare.
Funzionalità principali
Architetture attualmente supportate
Requisiti
Invoca scare dalla riga di comando con l'architettura desiderata. Questo creerà un'istanza REPL con le impostazioni predefinite.
python3 scare.py -a x64
File di aiuto
[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
Andare indietro nel listing assembly
mov eax, 0x5555
mov ebx, 0xaaaa
xor eax, ebx
/l
/back 2
mov ecx, 0xbbbb
add eax, ecx
Caricare un file, salvare un file
/load examples/x64/test.asm
/l
/run
/read $rsp 32
pop rdx
/save test2.asm
Esporta come binario: qui dovresti ottenere un elf64 chiamato exit55.elf che termina quando viene eseguito.
mov eax, 0x3c
mov edi, 55
syscall
/export elf64 exit55.elf
Utilizzare le opzioni di configurazione
not rax
/c x86/xmm 1
movq xmm4, rax
movaps xmm5, xmm4
Decodifica dello shellcode:

Esportazione del codice in un elf64 ed esecuzione:

Ci sono molte cose che sarebbe fantastico aggiungere in futuro: più architetture (sia note che oscure), più modalità della CPU, una migliore emulazione dell'ambiente, hot swapping tra le librerie emu/asm/dis, ecc. Far funzionare bene insieme emulatore, assembler e disassembler non è sempre semplice.
Alcune funzionalità potrebbero non essere supportate al momento perché richiedono decisioni sulla configurazione dell'emulatore. L'obiettivo di questo progetto è essere una soluzione generica di REPL ed emulatore per un'architettura target. Di conseguenza, la roadmap di sviluppo sarà "aggiungere cose che le persone segnalano", mantenendo il tutto facile da usare e da sviluppare.
Se hai idee, sentiti libero di aprire una PR.
Se trovi un bug, sentiti libero di aprire una issue.
Grazie e divertiti!
~ netspooky
Un ringraziamento alla haunted crew