Skip to content
KitploitKITPLOIT
ツールブログ
Log in
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
unidbg — Androidネイティブライブラリのエミュレートと、実験的なiOSエミュレーションを可能にします。 | Kitploit
ツール/GitHubGitHub/zhkl0228/unidbg
Androidセキュリティ動的分析 (サンドボックス)iOSセキュリティリバースエンジニアリングデバッガバイナリ解析学習と教育AI支援リバースエンジニアリング
GitHubzhkl0228/unidbg

unidbg

Androidネイティブライブラリのエミュレートと、実験的なiOSエミュレーションを可能にします。

リポジトリを見る
5.1k1.2k3623日前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

unidbg

Androidネイティブライブラリと、実験的なiOSエミュレーションをエミュレートできます。

これは、ELF/MachOファイル形式とARMアセンブリを学ぶための教育用プロジェクトです。

自己責任で使用してください!

機能

  • MCP (Model Context Protocol) に対応し、CursorなどのAIツールによるAI支援デバッグをサポート。
  • JNI_OnLoad を呼び出せるようにする JNI Invocation API のエミュレーション。
  • JavaVM、JNIEnv をサポート。
  • syscall命令のエミュレーション。
  • ARM32 と ARM64 をサポート。
  • インラインフック。 Dobby に感謝。
  • Androidインポートフック。 xHook に感謝。
  • iOS fishhook と substrate と whale フック。
  • unicorn バックエンドは、シンプルなコンソールデバッガ、gdbスタブ、命令トレース、メモリ読み書きトレースをサポート。
  • iOSの objc と Swift ランタイムをサポート。
  • 高速バックエンド dynarmic をサポート。
  • 最速のARM64バックエンドである Apple M1 ハイパーバイザーをサポート。
  • Raspberry Pi B4 による Linux KVM バックエンドをサポート。
  • エミュレートされたネイティブコードのメモリリーク検出(ゲストバックトレースとホストスタックトレース付き)。

MCPデバッガ (AI統合)

unidbgは Model Context Protocol (MCP) に対応しており、AI支援デバッグが可能です。デバッガがアクティブなときにコンソールで mcp と入力するとMCPサーバーが起動し、AIツール(例: Cursor)が接続できます。

クイックスタート

unidbg MCP には2つの動作モードがあります:

モード1: ブレークポイントデバッグ — デバッガをアタッチしてコードを実行します。ブレークポイントにヒットすると、Breaker.debug() がエミュレータを一時停止します。コンソールで mcp と入力するとMCPサーバーが起動し、AIが解析を支援します。レジスタ、メモリ、逆アセンブル、ステップ実行、トレースなど、すべてのデバッグツールが利用できます。再開後、別のブレークポイントにヒットすると、デバッガは再び一時停止します。ブレークポイントにヒットせずに実行が完了すると、プロセスは終了しMCPもシャットダウンします。

Debugger debugger = emulator.attach();
debugger.addBreakPoint(address);
// run your emulation logic — debugger pauses when breakpoint is hit

モード2: カスタムツール(繰り返し可能) — McpToolkit を使用してカスタムツールを登録し、AIが異なるパラメータで対象関数を再実行できるようにします。ネイティブライブラリは一度だけロードされ、各実行後もプロセスは生存し続け、MCPは次の実行のためにアクティブなままです。

McpToolkit toolkit = new McpToolkit();
toolkit.addTool(new McpTool() {
    @Override public String name() { return "encrypt"; }
    @Override public String description() { return "Run encryption"; }
    @Override public String[] paramNames() { return new String[]{"input"}; }
    @Override public void execute(String[] params) {
        String input = params.length > 0 ? params[0] : "default";
        // call encryption with input
    }
});
toolkit.run(emulator.attach());

デバッガが停止したら、コンソールで mcp と入力します(ポートを指定する場合は mcp 9239)。次に、Cursor の MCP 設定に追加します:

{
  "mcpServers": {
    "unidbg-mcp-server": {
      "url": "http://localhost:9239/sse"
    }
  }
}

利用可能なMCPツール

ステータスと情報

ツール説明
check_connectionエミュレータの状態: Family、アーキテクチャ、バックエンド機能、isRunning、ロード済みモジュール
list_modules / get_module_infoロード済みモジュールの一覧を取得し、エクスポートされたシンボル数や依存関係を含む詳細を取得
list_exportsオプションのフィルタとC++デマングル付きで、モジュールのエクスポート/動的シンボルを一覧表示
find_symbol名前でシンボルを検索するか、アドレスから最も近いシンボルを検索
get_threadsエミュレータ内のすべてのスレッド/タスクを一覧表示

レジスタと逆アセンブル

ツール説明
get_registers / get_register / set_registerCPUレジスタの読み書き
disassemble指定アドレスの命令を逆アセンブル(分岐先はシンボル名で自動注釈)
assemble命令テキストをマシンコードにアセンブル
get_callstack現在のコールスタック(バックトレース)を取得

メモリ

ツール説明
read_memory / write_memory生のメモリバイトを読み書き
read_string / read_std_stringC文字列またはC++ std::stringを読み取り(SSO検出付き)
read_pointerシンボル解決付きでポインタチェーンを読み取り
read_typedメモリを型付き値(int8–int64、float、double、pointer)として読み取り
search_memoryスコープ/権限フィルタ付きでメモリ内のバイトパターンを検索
list_memory_map権限付きで全メモリマッピングを一覧表示
allocate_memory / free_memory / list_allocationsオプションの初期データ付きでメモリブロックを確保(malloc/mmap)し、解放、追跡
patchアセンブル済みの命令をメモリに書き込む

ブレークポイントと実行

ツール説明
add_breakpoint / add_breakpoint_by_symbol / add_breakpoint_by_offsetアドレス、シンボル、またはモジュール+オフセットでブレークポイントを追加
remove_breakpoint / list_breakpointsブレークポイントの削除または一覧表示(逆アセンブル付き)
continue_execution実行を再開します。poll_events を使用して breakpoint_hit または execution_completed を待機します
step_over / step_into / step_outステップオーバー、ステップイン(N命令)、または関数からのステップアウト
next_block次の基本ブロックで停止(Unicornのみ)
step_until_mnemonicニーモニックに一致する次の命令で停止。例: bl、ret(Unicornのみ)
poll_eventsbreakpoint_hit、execution_completed、トレースイベントをポーリング

トレース

ツール説明
trace_codeレジスタ読み書き値(regs_read、prev_write)付きで命令をトレース
trace_read / trace_writeアドレス範囲内のメモリ読み書きをトレース

関数呼び出し

ツール説明
call_function型付き引数(hex、string、bytes、null)でアドレス指定のネイティブ関数を呼び出します。シンボル解決とメモリプレビュー付きの値を返します
call_symbolモジュール + シンボル名でエクスポートされた関数を呼び出します。例: libc.so + malloc

iOSのみ (Family=iOS の場合に利用可能)

ツール説明
inspect_objc_msgobjc_msgSend呼び出しを検査: レシーバのクラス名とセレクタを表示。例: -[NSString length]
get_objc_class_name指定されたアドレスのオブジェクトのObjCクラス名を取得(純粋なメモリ解析で、状態は変更しません)
dump_objc_classObjCクラス定義(プロパティ、メソッド、プロトコル、ivars)をダンプ
dump_gpb_protobufGPB protobufメッセージスキーマを.proto形式でダンプ(64ビットのみ)

カスタムMCPツール

McpToolkit を使用して、それぞれが McpTool インターフェースを実装するカスタムツールを登録します。これにより、手動のif-else分岐が、クリーンで自己完結型のツールクラスに置き換わります。この時点でネイティブライブラリは完全にロードされており(JNI_OnLoad / エントリポイントは既に実行済み)、各ツールの execute() 内のコードが解析対象の関数ロジックになります。AIはカスタムツールを起動する前にブレークポイントやトレースを設定でき、プロセスを再起動することなく異なる入力に対する実行結果を検査できます。

Androidの例 — カスタムMCPツールを使用したAndroid JNIの例については、Utilities64.java を参照してください:

DalvikModule dm = vm.loadLibrary(new File("libtmessages.29.so"), true);
dm.callJNI_OnLoad(emulator);
cUtilities = vm.resolveClass("org/telegram/messenger/Utilities");

McpToolkit toolkit = new McpToolkit();
toolkit.addTool(new McpTool() {
    @Override public String name() { return "aesCbc"; }
    @Override public String description() { return "Run AES-CBC encryption on input data"; }
    @Override public String[] paramNames() { return new String[]{"input"}; }
    @Override public void execute(String[] params) {
        byte[] input = params.length > 0 ? params[0].getBytes() : new byte[16];
        aesCbcEncryptionByteArray(input);
    }
});
toolkit.addTool(new McpTool() {
    @Override public String name() { return "aesCtr"; }
    @Override public String description() { return "Run AES-CTR decryption on input data"; }
    @Override public String[] paramNames() { return new String[]{"input"}; }
    @Override public void execute(String[] params) {
        byte[] input = params.length > 0 ? params[0].getBytes() : new byte[16];
        aesCtrDecryptionByteArray(input);
    }
});
toolkit.addTool(new McpTool() {
    @Override public String name() { return "pbkdf2"; }
    @Override public String description() { return "Run PBKDF2 key derivation"; }
    @Override public String[] paramNames() { return new String[]{"password", "iterations"}; }
    @Override public void execute(String[] params) {
        String password = params.length > 0 ? params[0] : "123456";
        int iterations = params.length > 1 ? Integer.parseInt(params[1]) : 100000;
        pbkdf2(password.getBytes(), iterations);
    }
});
toolkit.run(emulator.attach());

iOSの例 — カスタムMCPツールを使用したiOS IPAロードの例については、IpaLoaderTest.java を参照してください:

IpaLoader ipaLoader = new IpaLoader64(ipa, new File("target/rootfs/ipa"));
LoadedIpa loader = ipaLoader.load(this);
emulator = loader.getEmulator();
loader.callEntry();
module = loader.getExecutable();
ツールをダウンロード