
Ein Multi-Arch-Assembly-REPL und Emulator für deine Kommandozeile.
scare ist ein Multi-Architektur-Assembly-REPL und -Emulator für deine Kommandozeile.
Es gibt nicht viele moderne Assembly-REPLs. Die wenigen, die es gibt, sind entweder undurchsichtige Web-Apps oder an eine bestimmte Architektur/Plattform gebunden. scare wurde für Leute gebaut, die Assembly-Code testen, experimentieren oder anderweitig mit ihm herumspielen möchten. Der gesamte assemblierte Code wird in einem Emulator ausgeführt, der nur den Code ausführt, den du ihm gibst. Das Multi-Architektur-Design der zugrunde liegenden scarelib-Bibliothek ist modular aufgebaut, sodass schnell neue Architekturen hinzugefügt werden können.
Version 0.3.0 ist die erste öffentliche Veröffentlichung von scare.
Kernfunktionen
Derzeit unterstützte Architekturen
Voraussetzungen
Rufe scare von der Kommandozeile mit der gewünschten Architektur auf. Dadurch wird eine REPL-Instanz mit den Standardeinstellungen erstellt.
python3 scare.py -a x64
Hilfe
[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
Rückwärts in der Assembly-Liste gehen
mov eax, 0x5555
mov ebx, 0xaaaa
xor eax, ebx
/l
/back 2
mov ecx, 0xbbbb
add eax, ecx
Datei laden, Datei speichern
/load examples/x64/test.asm
/l
/run
/read $rsp 32
pop rdx
/save test2.asm
Export als Binärdatei: Hier erhältst du eine elf64 namens exit55.elf, die sich beim Ausführen beendet.
mov eax, 0x3c
mov edi, 55
syscall
/export elf64 exit55.elf
Konfigurationsoptionen verwenden
not rax
/c x86/xmm 1
movq xmm4, rax
movaps xmm5, xmm4
Decodieren von Shellcode:

Code in eine elf64 exportieren und ausführen:

Es gibt viele Dinge, die in Zukunft großartig wären: mehr Architekturen (sowohl bekannte als auch obskure), mehr CPU-Modi, bessere Umgebungsemulation, Hot-Swapping zwischen Emu/Asm/Dis-Bibliotheken usw. Dafür zu sorgen, dass Emulator, Assembler und Disassembler gut zusammenspielen, ist nicht immer einfach.
Einige Funktionen werden derzeit möglicherweise nicht unterstützt, da Entscheidungen zur Konfiguration des Emulators getroffen werden müssen. Das Ziel dieses Projekts ist es, eine generische REPL- und Emulatorlösung für eine Zielarchitektur zu sein. Infolgedessen wird die Entwicklungs-Roadmap darin bestehen, „Dinge hinzuzufügen, die Leute ansprechen", während das Projekt einfach zu bedienen und weiterzuentwickeln bleibt.
Wenn du Ideen hast, erstelle gerne einen PR.
Wenn du einen Fehler findest, melde gerne ein Issue.
Danke und viel Spaß!
~ netspooky
Shout-out an die haunted Crew