
コマンドライン用のマルチアーキテクチャ対応アセンブリREPL&エミュレータ。
scare は、コマンドライン向けのマルチアーキテクチャ対応アセンブリ REPL およびエミュレータです。
最新のアセンブリ REPL はそれほど多くありません。既存のものは、不透明な Web アプリであるか、特定のアーキテクチャ/プラットフォームに結び付けられています。scare は、アセンブリコードをテスト、実験、またはその他の方法で遊びたい人々のために作られました。アセンブルされたコードはすべてエミュレータ内で実行され、与えたコードのみが実行されます。基盤となる scarelib ライブラリのマルチアーキテクチャ設計はモジュール式を意図しており、新しいアーキテクチャをすばやく追加できるようになっています。
バージョン 0.3.0 は、scare の最初の公開リリースです。
コア機能
現在サポートされているアーキテクチャ
要件
コマンドラインで希望のアーキテクチャを指定して scare を起動します。これにより、デフォルト設定の REPL インスタンスが作成されます。
python3 scare.py -a x64
ヘルプ
[x64]400000> /
/x /? /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
アセンブリリストを逆方向に進む
mov eax, 0x5555
mov ebx, 0xaaaa
xor eax, ebx
/l
/back 2
mov ecx, 0xbbbb
add eax, ecx
ファイルの読み込み、ファイルの保存
/load examples/x64/test.asm
/l
/run
/read $rsp 32
pop rdx
/save test2.asm
バイナリとしてエクスポートします。ここでは、実行すると終了する exit55.elf という elf64 が得られるはずです。
mov eax, 0x3c
mov edi, 55
syscall
/export elf64 exit55.elf
設定オプションの使用
not rax
/c x86/xmm 1
movq xmm4, rax
movaps xmm5, xmm4
シェルコードのデコード:

コードをエクスポートして elf64 として実行しているスクリーンショット:

今後追加できたら素晴らしいことがたくさんあります。より多くのアーキテクチャ(有名なものも obscure なものも)、より多くの CPU モード、より優れた環境エミュレーション、emu/asm/dis ライブラリ間のホットスワップなどです。エミュレータ、アセンブラ、ディスアセンブラをうまく連携させることは、常に簡単であるとは限りません。
一部の機能は、エミュレータの設定に関する決定が必要なため、現時点ではサポートされていない場合があります。このプロジェクトの目標は、対象アーキテクチャのための汎用的な REPL およびエミュレータソリューションとなることです。その結果、開発ロードマップは、使いやすさと開発しやすさを維持しながら、「人々が持ち出したものを追加する」というものになる予定です。
アイデアがあれば、お気軽に PR を作成してください。
バグを見つけたら、お気軽に issue を報告してください。
ありがとうございました。それでは楽しんでください!
~ netspooky
haunted crew に敬意を表して