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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
AndroidAuto — オープンソースのAndroid Auto電話側実装。プロトコルリバースエンジニアリング、TLS相互認証、H.264ビデオ投影、タッチ入力インジェクション、USB AOAを介したセンサーデータストリーミングを備えています。 | Kitploit
ツール/GitHubGitHub/mretallack/androidauto
AndroidセキュリティBluetoothセキュリティリバースエンジニアリングワイヤレスセキュリティモバイルセキュリティ論文と研究学習と教育
GitHubmretallack/androidauto

AndroidAuto

オープンソースのAndroid Auto電話側実装。プロトコルリバースエンジニアリング、TLS相互認証、H.264ビデオ投影、タッチ入力インジェクション、USB AOAを介したセンサーデータストリーミングを備えています。

リポジトリを見る
11294ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

Open Android Auto

Android Autoの電話側アプリのオープンソース実装です。このアプリは携帯電話上で動作し、USB経由で車のヘッドユニットに投影し、Googleの独自規格であるcom.google.android.projection.gearhead APKを置き換えます。

⚠️ 作業中

このプロジェクトは初期開発段階にあります。プロトコルハンドシェイクと動画投影は実際のヘッドユニットで動作しています。携帯電話の画面は、切断されるまで数秒間、車のヘッドユニットに正常に表示されます(動画の安定性は改善中です)。

機能

プロトコルと接続

  • USB AOAアクセサリモードの検出と接続
  • TLS 1.2 相互認証(電話側がサーバー)
  • バージョンネゴシエーション(プロトコルv1.7)
  • サービスディスカバリ(リクエスト/レスポンス)
  • 対象チャンネル(ビデオ、オーディオ、入力、センサー)のチャンネルオープン
  • Ping/pongキープアライブ(双方向)
  • オーディオフォーカスのリクエスト/レスポンス処理
  • ナビゲーションフォーカスのリクエスト/レスポンス処理
  • ボイスセッションリクエスト処理
  • グレースフルシャットダウン処理
  • 優先書き込みキュー(ビデオよりも制御メッセージを優先)
  • オーディオ送信前にオーディオフォーカス許可を待機(HUIGごとに500msタイムアウト)
  • Bluetoothペアリング交換(BluetoothPairingRequest/Response)
  • AOAP再初期化なしでの複数USB再接続の処理

動画投影

  • MediaCodecによるH.264エンコーディング(800x480 @ 30fps、Baselineプロファイル)
  • MediaProjection画面キャプチャ(ユーザー許可ダイアログあり)
  • ビデオチャンネルセットアップ(SETUP → CONFIG → FOCUS → STARTフロー)
  • マイクロ秒単位のゼロベースタイムスタンプ
  • キーフレームに付加されるSPS/PPS(Annex B形式)
  • フロー制御(max_unacked追跡、バックプレッシャー)
  • フレームペーシング(一貫した33ms間隔)
  • 安定した長時間動画(現在は約7秒で切断)
  • ヘッドユニットのサービスディスカバリからの解像度ネゴシエーション
  • 接続品質に基づく適応ビットレート

タッチ入力

  • 入力チャンネルオープンとバインディングリクエスト
  • タッチイベント解析(シングルタッチおよびマルチタッチ)
  • キーイベント解析(ボタン、メディアキー)
  • 座標マッピング(ヘッドユニット→電話解像度)
  • TouchInjectorとMotionEventの生成
  • VirtualDisplayへのタッチイベント注入
  • Androidシステムへのキーイベント注入

オーディオ

  • オーディオチャンネルオープンとセットアップ
  • オーディオ送信前にオーディオフォーカス許可を待機(HUIGごとに500msタイムアウト)
  • 初期接続時にAUDIO_FOCUS RELEASEを送信し、再生時にGAINを送信
  • 電話オーディオキャプチャ(MediaProjection AudioPlaybackCapture)
  • PCM/AACエンコーディングとヘッドユニットへのストリーミング
  • ヘッドユニットからのマイク入力(音声コマンド)
  • 複数オーディオチャンネル(メディア、システム、音声、ガイダンス)
  • チャンネルをアクティブに保つための無音ストリーミング

センサー

  • センサーチャンネルオープン
  • センサー開始リクエスト/レスポンス処理
  • ナイトモードデータの解析と送信
  • 運転状態データの解析と送信
  • GPS位置情報の転送
  • コンパス方位
  • 車速
  • RPM
  • オドメーター(総走行距離+トリップ距離)
  • 燃料レベルと航続距離
  • パーキングブレーキ状態
  • ギアポジション(P/R/N/D/1-10)
  • OBD-II診断
  • 環境(温度、気圧、雨)
  • HVAC(目標/現在温度)
  • デッドレコニング
  • 乗員検知
  • ドア状態(ボンネット、トランク、各ドア)
  • ライト状態(ヘッドライト、ウインカー、ハザード)
  • タイヤ空気圧
  • 加速度計(3軸)
  • ジャイロスコープ(3軸)
  • GPS衛星データ
  • ヘッドユニットのセンサー要求に積極的に応答

動画(追加)

  • ヘッドユニットのサービスディスカバリからの解像度ネゴシエーション
  • 接続品質に基づく適応ビットレート
  • 720p、1080p、1440p、4K解像度のサポート
  • 縦モード解像度(720x1280、1080x1920など)
  • UI設定更新(テーマ、インセット)

その他

  • Bluetoothペアリング調整(A2DP、HFP)
  • インストルメントクラスターへのナビゲーションターンバイターン
  • ナビゲーション状態(操作、車線、距離、現在位置)
  • メディアステータス(現在再生中情報)
  • メディア再生メタデータ(トラック、アーティスト、アルバム)
  • メディアブラウザ(ヘッドユニットから電話のメディアライブラリを参照)
  • 電話ステータス(通話状態通知)
  • 汎用通知(購読/購読解除システム)
  • ベンダー拡張
  • ワイヤレスAndroid Auto(WiFi + Bluetoothハンドオフ)
  • チャンネルクローズ通知
  • 車両接続デバイスのリクエスト/レスポンス
  • ユーザー切り替えリクエスト/レスポンス
  • バッテリーステータス通知
  • 通話利用可能ステータス
  • サービスディスカバリ更新(動的チャンネル変更)
  • 入力フィードバック(ヘッドユニットへの触覚/視覚フィードバック)
  • マイクリクエスト/レスポンス(ヘッドユニットからの音声入力)
  • オーディオアンダーフロー通知
  • ラジオサービス(AM/FM/HD/DABチューニング、プリセット、RDS)

⚠️ 免責事項

ご自身の責任でご使用ください。 本ソフトウェアは「現状のまま」提供され、いかなる種類の保証もありません。

  • 本ソフトウェアは、車のヘッドユニットに予期しない動作を引き起こす可能性があります
  • 本ソフトウェアは電話やヘッドユニットに損傷を与える可能性があります — 作者は一切の責任を負いません
  • 運転中は本アプリケーションを使用しないでください
  • 車両を操作中は本アプリケーションと操作しないでください
  • 本アプリケーションは開発およびテスト目的のみを意図しています
  • 電話アプリケーションを操作する前には、必ず車両を路肩に停車させてください
  • 作者は、本ソフトウェアの使用に起因するいかなる事故、傷害、損害に対しても責任を負いません

アーキテクチャ```

USB Plug-in → MainActivity → ProjectionService ↓ UsbAoaTransport (USB AOA accessory mode) ↓ MessageFramer (16KB frame fragmentation) ↓ InBandTls (TLSv1.2 via SSLEngine) ↓ ProtocolEngine (AAP state machine) ↓ ┌───────────┼───────────┐ Video Input Audio (H.264) (touch/keys) (PCM)

## 既知のバグ

- **チャンネル割り当てが順序に依存** — `SERVICE_DISCOVERY_RESPONSE` 内の最初の `av_channel` をビデオ、2 番目をオーディオとして割り当てています。これはカーヘッドユニット(チャンネル 1 = ビデオ)では動作しますが、openauto(チャンネル 4 = オーディオ、ビデオではない)では失敗します。修正: `av_channel` 内の `stream_type` フィールドを解析して `VIDEO(3)` と `AUDIO(1)` を区別します。
- **ビデオの安定性** — ヘッドユニットの USB バッファオーバーフローにより、長時間のストリーミング後に接続が切断されます。下記のテスト結果を参照してください。
- **ヘッドユニット上での重複デバイス表示** — ヘッドユニットのスマートフォンページに、アプリが 1 つのエントリ(Android Auto と Bluetooth の両方の機能を持つ)ではなく、2 つの別々のエントリ(1 つは Android Auto 用、もう 1 つは Bluetooth 用)として表示されます。これは、Android 12 以降が実際の Bluetooth MAC アドレスへのアクセスをブロックしているためです(`02:00:00:00:00:00` を返す)。回避策: `adb shell "echo $(adb shell settings get secure bluetooth_address) > /sdcard/Android/data/org.openandroidauto/files/bt_address.txt"` で実際のアドレスを設定ファイルに書き込みます。ユーザーが手動で BT MAC を入力できる UI 設定画面が必要です。
- **音声アシスタントボタンが未対応** — ドライバーがヘッドユニットの音声/アシスタントボタンを押すと、`VOICE_SESSION_REQUEST` を受信し、音声アシスタント(Dicio またはシステムデフォルト)を起動しようとします。しかし、起動されたアシスタントはヘッドユニットのマイクからの音声を受信しません。

### ビデオ安定性テスト結果

800x480 のカラーバーテストパターン、I フレーム間隔 1 秒:

| FPS | ビットレート | フラグメント | 時間 | フレーム数 | 状態 |
|-----|---------|----------|----------|--------|--------|
| 30 | 2Mbps | なし | ~3s | ~90 | ❌ 速すぎる |
| 15 | 2Mbps | なし | ~33s | ~500 | ⚠️ 改善 |
| 10 | 2Mbps | なし | ~93s | ~930 | ⚠️ 良好 |
| 30 | 2Mbps | あり (2KB) | 5-25s | 150-750 | ⚠️ 変動あり |
| 30 | 500Kbps | あり (2KB) | ~54s | ~1691 | ⚠️ 改善 |
| 15 | 250Kbps | あり (2KB) | ~67s+ | 1000+ | ⚠️ 良好 |
| 30 | 250Kbps | あり (2KB), I=5s | ~20s | ~600 | ❌ Iフレーム間隔が長いと悪化 |
| 15 | 250Kbps | なし | ~13s | ~200 | ❌ ここではフラグメントの方が効果的 |

根本原因: ヘッドユニットの USB 受信バッファが持続的な高スループットでオーバーフローします。データレートが低いほど接続時間が長くなります。

**最も確認された設定:** 10fps、2Mbps、フラグメントなし = 93 秒。フラグメント化してからエンコードする実装は壊れています(ヘッドユニットが再構成できない)— さらなる調査が必要です。

## ビルド```bash
./gradlew assembleDebug

Android SDK プラットフォーム 35 が必要です。

テスト

単体テスト```bash

./gradlew testDebugUnitTest

113のユニットテストと統合テストで、プロトコル、フレーミング、TLS、チャネルロジック、ビデオステートマシン、センサー処理、タッチ入力をカバーしています。

### openauto (Docker) を用いた統合テスト

openautoは、Android Autoプロトコルを完全に実装したサードパーティ製のヘッドユニットエミュレーターです。これを使用して、実際の自動車を必要とせずにプロトコル実装を検証します。

#### 前提条件

- Dockerがインストールされ、実行中であること
- 電話がADB経由で接続されていること(USBまたはワイヤレス)
- 電話にアプリがインストールされていること: `./gradlew assembleDebug && adb install -r app/build/outputs/apk/debug/app-debug.apk`

#### 1. openauto Docker イメージをビルドする(一度のみ)```bash
cd thirdparty/openauto
docker build -f Dockerfile.headless -t openauto-headless .

これにより、openautoとそのすべての依存関係(Qt5、boost、protobuf、OpenSSL)がDebianコンテナ内でビルドされます。初回ビルドには約5分かかります。

2. openautoを起動```bash

docker run --rm -p 5100:5000 -e QT_QPA_PLATFORM=offscreen
openauto-headless timeout 60 /src/build/bin/autoapp

openauto はコンテナ内のポート 5000 でリッスンし、ホスト上のポート 5100 にマッピングされています。ヘッドレスモードで実行されます(ディスプレイは不要)。

#### 3. ADB リバースポートフォワーディングを設定する```bash
adb reverse tcp:5000 tcp:5100

これにより、電話のlocalhost:5000がコンピュータのlocalhost:5100(openauto)にトンネリングされます。USBアクセサリが見つからない場合、アプリはTCPクライアントとしてlocalhost:5000に接続します。

4. アプリを起動```bash

adb shell am start -n org.openandroidauto/.MainActivity

このアプリは以下の動作を行います:
1. USBアクセサリが見つからない
2. `localhost:5000` に接続する(adb reverse 経由の openauto)
3. 完全なプロトコルハンドシェイクを実行する(VERSION → TLS → AUTH → SERVICE_DISCOVERY)
4. チャンネルを開く(video、audio、input、sensor)
5. 動画のストリーミングを開始する(テストパターン)

#### 5. openauto のログで確認する

openauto の出力に次のように表示されるはずです:```
[OpenAuto] handleNewClient() - Handle WIFI Client Connection
[OpenAuto] [AndroidAutoEntity] Send Version Request.
[OpenAuto] [AndroidAutoEntity] onVersionResponse()
[OpenAuto] [AndroidAutoEntity] Beginning SSL handshake.
[OpenAuto] [AndroidAutoEntity] Handshake completed.
[OpenAuto] [AndroidAutoEntity] onServiceDiscoveryRequest()
[OpenAuto] [AndroidAutoEntity] onAudioFocusRequest()
[OpenAuto] [AudioMediaSinkService] onChannelOpenRequest()
[OpenAuto] [VideoMediaSinkService] onChannelOpenRequest() (if video focus granted)

6. アプリのログを取得する```bash

adb pull /sdcard/Android/data/org.openandroidauto/files/aa_log.txt cat aa_log.txt

ログファイルはUSBの切り替え間でも電話機に保持されます(実際のカーヘッドユニットでのテストに便利です)。
ツールをダウンロード