Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
AudioServer-Voip-Recorder — 🔬 libaudioflinger.soを動的にフックすることで、リアルタイムVoIP音声キャプチャ(アップリンク/ダウンリンク)を実現する高度なAndroid研究ツールです。Android 14上のWhatsApp、Signal、Telegramでテストおよび構築済みです。 | Kitploit
ツール/GitHubGitHub/nighthawkk/audioserver-voip-recorder
Androidセキュリティリバースエンジニアリングモバイルセキュリティ
GitHubnighthawkk/audioserver-voip-recorder

AudioServer-Voip-Recorder

🔬 libaudioflinger.soを動的にフックすることで、リアルタイムVoIP音声キャプチャ(アップリンク/ダウンリンク)を実現する高度なAndroid研究ツールです。Android 14上のWhatsApp、Signal、Telegramでテストおよび構築済みです。

リポジトリを見る

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
31991ヶ月前未レビュー

目標: Android の audioserver(具体的には libaudioflinger.so)をフックし、システムが 通信 モードのときにアップリンク(マイク)とダウンリンク(スピーカー)の PCM バッファを記録することで、VoIP ストリームキャプチャを実演します。

プロジェクト設計と方法論

アーキテクチャ:

  • コントローラーアプリ (Android)
    SELinux ポリシーの設定、ペイロード注入、データ移動、再生を管理する 9 つのボタンを備えた UI。

  • ペイロード (libaudiohook.so)
    Dobby を使用して内部の AudioFlinger メソッドをフックし、生の PCM バッファをセッションディレクトリに書き込む C++ 共有ライブラリ(アプリプロジェクトの一部としてビルド)。

  • 後処理
    追加ツール tools/audioparser.py は、生の .ac(ダウンリンク)/.bc(アップリンク)ファイルを WAV に変換します。アプリのファイルマネージャーでも変換およびアプリ内再生が可能です。

  • 調査ユーティリティ
    初期の関数トレースとオフセット発見のための Frida スクリプト。シンボル/オフセットやその他のスニペットの解析ファイル。

コントローラーアプリ

この Android アプリケーションは、audioserver を介して VoIP 録音を管理するためのグラフィカルインターフェースを提供します。Android オーディオスタックをフックして VoIP アプリケーションのマイク音声とスピーカー音声をキャプチャするネイティブペイロードと統合されています。

このアプリはコントロールセンターとして機能し、必要な SELinux ポリシーの注入、監視の開始/停止、録音データの管理、キャプチャした VoIP 音声ファイルの再生を行うことができます。

機能

メインアクティビティには 9 つのコントロールボタン があります:

  1. ポリシー注入
    audioserver とこのアプリが連携して動作するために必要な SELinux ポリシーを注入します。

  2. 監視開始
    audioserver に共有ライブラリのペイロードを注入し、RecordTrack と PlaybackTrack をフックして VoIP 音声キャプチャを有効にします。プロセス注入には AndKittyInjector を使用します。

  3. 監視停止
    audioserver プロセスを再起動し、監視を停止して注入されたフックを削除します。

  4. データコピー
    キャプチャした 生の PCM オーディオ を一時ディレクトリ /data/local/tmp/voip から /sdcard/voip にコピーします。

    • その後、一時ディレクトリをクリーンアップします。
  5. ログ表示
    注入、フック、録音ステータスに関するログを表示します。

  6. SELinux 有効化
    SELinux の enforcing モードを復元します。

  7. SELinux 無効化
    SELinux を permissive モードに設定します。注入したポリシーが失敗した場合に使用します。

  8. 音声再生
    カスタム VoIP ファイルマネージャー (/sdcard/voip/) を開きます:

    • 生の PCM ファイルをメモリ内で WAV 形式 に変換します。
    • 変換した音声をアプリ内で直接再生します。
  9. データ削除
    /data/local/tmp/voip と /sdcard/voip の両方からすべての音声データを削除します。 注: データ削除後、データを保存するためのディレクトリを作成するには、audioserver への再注入が必要です。

+----------------------+    
|                      |    
|   App MainActivity   |    
|                      |    
|                      |    
|(9 Control Buttons UI)|    
|                      |    
|                      |    
+----------+-----------+    
           |                
           |                
           |                
+----------v-----------+    
|                      |    
|       JNI Layer      |    
|                      |    
| Selinux, Process Inje|    
| ction,               |    
|                      |    
|                      |    
+----------------------+    

フックペイロード

この共有ライブラリは audioserver に注入され、AUDIO_MODE_IN_COMMUNICATION を検出し、事前定義されたパッケージ名のセットに対して Android オーディオスタックから直接 VoIP 音声ストリームをキャプチャします。

Dobby インラインフッキングフレームワークを使用して、libaudioflinger.so 内の重要なメソッドをインターセプトします。
アップリンク(マイク) と ダウンリンク(スピーカー) の両方の音声ストリームがキャプチャされ、後で処理するためにセッションファイルに書き込まれます。

フックポイント

このライブラリは、AudioFlinger および関連クラス内の以下の関数にフックをインストールします:

関数目的
AudioFlinger::setModeIN_COMMUNICATION モード(VoIP アクティブ)への移行/からの移行を追跡します。
RecordTrack::getNextBufferマイク(アップリンク)音声フレームをキャプチャします。
PlaybackThread::Track::getNextBufferスピーカー(ダウンリンク)音声フレームをキャプチャします。
Track::stopダウンリンクファイルを閉じて確定します。
RecordTrack::stopアップリンクファイルを閉じて確定します。

対象アプリケーション

このライブラリは、UID → パッケージマッピング に基づいてストリームをフィルタリングします。

現在監視中のアプリ:

  • com.whatsapp
  • com.whatsapp.w4b (WhatsApp Business)
  • org.thoughtcrime.securesms (Signal)
  • org.telegram.messenger
  • org.telegram.messenger.web

audioserver_hook.cpp 内に他のアプリケーションを追加することもできます:

static const char* kTargetPackages[] = {  
    "com.whatsapp",  
    "com.whatsapp.w4b",  
    "org.thoughtcrime.securesms",  
    "org.telegram.messenger",  
    "org.telegram.messenger.web"  
};

ファイル出力

  • セッションディレクトリ は、audioserver への注入時に以下の場所に作成されます: /data/local/tmp/voip/audioserver_session_<timestamp>/

  • ファイルは最初 .tmp 拡張子 で作成され、トラック停止時に名前が変更されます:

    • アップリンク(マイク) → <packageName>_<sampleRate>_<timestamp>.bc
    • ダウンリンク(スピーカー) → <packageName>_<sampleRate>_<timestamp>.ac
  • セッションの例:

	/data/local/tmp/voip/audioserver_session_1725389200/
	├── com.whatsapp_48000_1725389201_123456.ac
	├── com.whatsapp_48000_1725389201_123789.bc
	

オフセット

ターゲットライブラリはストリップされており、libaudioflinger.so 内でメソッドがエクスポートされていないため、フックを成功させるにはメソッドやその他の関連コンポーネントの正確なオフセットが必要です。

これらのオフセットは、IDA-PRO を使用した静的解析、または frida を使用した動的解析から抽出できます。 オフセットが判明したら、offsets.h ヘッダーファイル内で置き換えることができます。

必要なオフセット:
メソッド:
  1. AUDIOFLINGER_SETMODE_OFFSET
    • メソッド: android::AudioFlinger::setMode(audio_mode_t)
    • マングル名: _ZN7android12AudioFlinger7setModeE11audio_mode_t
  2. RECORDTRACK_GETNEXTBUFFER_OFFSET
    • メソッド: android::AudioFlinger::RecordThread::RecordTrack::getNextBuffer(android::AudioBufferProvider::Buffer *)
    • マングル名: _ZN7android12AudioFlinger12RecordThread11RecordTrack13getNextBufferEPNS_19AudioBufferProvider6BufferE
  3. TRACK_GETNEXTBUFFER_OFFSET
    • メソッド: android::AudioFlinger::PlaybackThread::Track::getNextBuffer(android::AudioBufferProvider::Buffer *)
    • マングル名: _ZN7android12AudioFlinger14PlaybackThread5Track13getNextBufferEPNS_19AudioBufferProvider6BufferE
  4. TRACK_STOP_OFFSET
    • メソッド: android::AudioFlinger::PlaybackThread::Track::stop(void)
    • マングル名: _ZN7android12AudioFlinger14PlaybackThread5Track4stopEv
  5. RECORDTRACK_STOP_OFFSET
    • メソッド: android::AudioFlinger::RecordThread::RecordTrack::stop(void)
    • マングル名: _ZN7android12AudioFlinger12RecordThread11RecordTrack4stopEv
その他のオフセット:
  1. SAMPLERATE_OFFSET
  2. UID_OFFSET
  3. ISOUT_OFFSET
  4. FORMAT_OFFSET
  5. CHANNELMASK_OFFSET
  6. ATTR_OFFSET

これらは静的解析から取得できます。

  • ライブラリ - libaudioflinger.so
  • メソッド - android::AudioFlinger::ThreadBase::TrackBase::TrackBase
TrackBase::TrackBase(
        IAfThreadBase *thread,
            const sp<Client>& client,
            const audio_attributes_t& attr,
            uint32_t sampleRate,
            audio_format_t format,
            audio_channel_mask_t channelMask,
            size_t frameCount,
            void *buffer,
            size_t bufferSize,
            audio_session_t sessionId,
            pid_t creatorPid,
            uid_t clientUid,
            bool isOut,
            const alloc_type alloc,
            track_type type,
            audio_port_handle_t portId,
            std::string metricsId)

注記

  • IN_COMMUNICATION モードのみがキャプチャされます。通常のオーディオ(音楽、着信音など)は無視されます。
  • Telegram と Signal の特別な処理により、正しいサンプルレート(Telegram: 48000 Hz、Signal: 8000 Hz)を強制し、電話の着信音や切断音など他の不要なオーディオを無視します。
  • PCM は生のまま保存されます。コントローラーアプリは後で再生用に PCM → WAV 変換を行います。
ツールをダウンロード