
🪅 Windows & Linux ユーザースペースエミュレータ
Sogen は、実際のオペレーティングシステムなしで Windows および Linux プログラムを実行し、その動作をすべて確認・制御できます。
数千もの OS API を再実装する代わりに、Sogen は CPU およびシステムコールレベルでバイナリをエミュレートし、実際のシステム DLL を実行するため、動作は実際の OS とほぼ一致します。
すべての命令、メモリアクセス、API 呼び出しをフック、検査、書き換えでき、実行は完全に決定的で、エミュレータの状態全体をスナップショットして復元できます。
C++ で構築され、お好みの CPU バックエンドを搭載:
試してみる: sogen.dev
IDA Pro や GDB など、すでに使い慣れたツールで GDB プロトコル経由でデバッグするか、組み込みのブラウザ内デバッガを使用できます。
デバッガはプロセスの外部、エミュレータレベルで実行されるため、アンチデバッグチェックからは見えません。
ネイティブ GUI アプリが動作し、ウィンドウ、ダイアログ、コントロールが機能します。
GPU パラ仮想化により、実際の GPU 上で 3D アクセラレーションが可能になり、Hyper-V バックエンドは CPU 上でコードをネイティブに実行します。ゲームにも十分な速度です。
Direct3D 8/9/10/11 タイトルは DXVK を通じて実行され、GPU ブリッジ上で Direct3D を Vulkan に変換します。
スライドはこちらをクリック。
インストール:
pip install sogen
Python バインディングにはエミュレーションルートが必要です。既製のルートはこちらからダウンロードするか、wiki の手順に従って自分で作成できます。
例:
import sogen
emu = sogen.windows.create_application("c:/test-sample.exe", emulation_root="./root")
def on_module_load(module):
if module.name.lower() == "test-sample.exe":
emu.hooks.memory_execution_at(module.entry_point, lambda address: print(f"hit entry point: 0x{address:x}"))
emu.callbacks.on_module_load = on_module_load
emu.start()
print(emu.process.exit_status)
セットアップの詳細とより大きな例については、examples/python/README.md を参照してください。
Dart バインディング は別のリポジトリで利用できます。
[!TIP]
Windows、Linux、macOS などでエミュレータをビルド・実行する方法の詳細は、Wiki を確認してください。
1. コードをチェックアウト:
git clone --recurse-submodules https://github.com/momo5502/sogen.git
2. クローンしたディレクトリで x64 開発者コマンドプロンプトを開き、次のコマンドを実行:
cmake --preset=vs2022
3. build/vs2022/sogen.sln に生成されたソリューションをビルド
4. grab-registry.bat を管理者として実行してレジストリダンプを作成し、analyzer.exe の隣の artifacts フォルダに配置
5. 任意のプログラムを実行:
analyzer.exe C:\example.exe