
Un REPL et émulateur d'assembleur multi-architecture pour votre ligne de commande.
scare est un REPL et émulateur d'assemblage multi-architecture pour votre ligne de commande.
Il n'existe pas beaucoup de REPL d'assemblage modernes. Ceux qui existent sont soit des applications web opaques, soit liés à une architecture/plateforme spécifique. scare a été conçu pour les personnes qui veulent tester, expérimenter ou simplement jouer avec du code assembleur. Tout le code assemblé est exécuté dans un émulateur, qui n'exécute que le code que vous lui donnez. La conception multi-architecture de la bibliothèque sous-jacente scarelib se veut modulaire, permettant d'ajouter rapidement de nouvelles architectures.
La version 0.3.0 est la première version publique de scare.
Fonctionnalités principales
Architectures actuellement supportées
Prérequis
Invoquez scare depuis la ligne de commande avec l'architecture souhaitée. Cela créera une instance REPL avec les paramètres par défaut.
python3 scare.py -a x64
Fichier d'aide
[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
Revenir en arrière dans le listing assembleur
mov eax, 0x5555
mov ebx, 0xaaaa
xor eax, ebx
/l
/back 2
mov ecx, 0xbbbb
add eax, ecx
Charger un fichier, enregistrer un fichier
/load examples/x64/test.asm
/l
/run
/read $rsp 32
pop rdx
/save test2.asm
Export en binaire : vous devriez obtenir ici un elf64 nommé exit55.elf qui se termine à l'exécution.
mov eax, 0x3c
mov edi, 55
syscall
/export elf64 exit55.elf
Utilisation des options de configuration
not rax
/c x86/xmm 1
movq xmm4, rax
movaps xmm5, xmm4
Décodage de shellcode :

Export de code vers un elf64 et exécution :

Il y a beaucoup de choses qui seraient géniales à ajouter à l'avenir : plus d'architectures (connues et obscures), plus de modes CPU, une meilleure émulation de l'environnement, l'échange à chaud entre les bibliothèques emu/asm/dis, etc. Faire en sorte que l'émulateur, l'assembleur et le désassembleur fonctionnent bien ensemble n'est pas toujours évident.
Certaines fonctionnalités peuvent ne pas être supportées actuellement car elles nécessitent des décisions sur la configuration de l'émulateur. L'objectif de ce projet est d'être une solution générique de REPL et d'émulateur pour une architecture cible. Par conséquent, la feuille de route de développement sera « ajouter ce que les gens remontent », tout en restant facile à utiliser et à développer.
Si vous avez des idées, n'hésitez pas à faire une PR.
Si vous trouvez un bug, n'hésitez pas à ouvrir une issue.
Merci et amusez-vous bien !
~ netspooky
Coup de chapeau à la haunted crew