Android自動化ソフトウェア #
Android自動化 / コンテナ #
| ソフトウェア | 役割 |
|---|---|
ReDroid (redroid/redroid) | Dockerコンテナ内のAndroid OS |
| Waydroid | LXCおよびWaylandを介してLinuxデスクトップ上で動作するAndroid |
| Anbox | Androidをコンテナ内で動作させる初期の概念実証。WaydroidとReDroidの祖先 |
WaydroidとReDroidの比較 #
WaydroidとReDroidは、同じ基礎概念を使用します。つまり、完全な仮想マシンを実行するのではなく、ホストのLinuxカーネル上でAndroidユーザー空間を動作させます。Android自体はLinuxベースですが、Binder IPCや共有メモリなど、Android固有のカーネル機能に大きく依存します。そのため、どちらのシステムもホスト側でbinder_linuxと、ashmem_linuxまたは新しいmemfdベースの代替機構などの共有メモリをサポートする必要があります。
主な違いは対象環境です。Waydroidは、Waylandセッション内でAndroidアプリをネイティブに近いウィンドウとして表示したいデスクトップLinuxユーザー向けに構築されています。ReDroidは、AndroidをDockerコンテナとして実行し、ADB、scrcpy、自動化ツール、または計装を通じてリモート制御するサーバー、CI、自動化、クラウドフォンの用途向けに構築されています。
| 領域 | Waydroid | ReDroid |
|---|---|---|
| 主な対象 | Linuxデスクトップ | サーバー、CI、自動化、クラウドフォン |
| コンテナランタイム | LXC | Docker / OCIコンテナ |
| 表示モデル | ホストのWaylandコンポジターと統合 | デフォルトではヘッドレス。ADB/scrcpyまたはブラウザラッパーで表示 |
| ホスト依存関係 | Waydroidパッケージ、LXC、Waylandセッション統合が必要 | DockerおよびAndroidカーネルモジュールが必要 |
| デプロイ方式 | パッケージマネージャーによるシステムレベルのインストール | 再現可能なdocker run / docker-compose.ymlワークフロー |
| 破棄 | パッケージ削除と残存ホスト設定の除去 | コンテナとボリュームを削除 |
| 適した用途 | LinuxデスクトップでAndroidアプリを実行 | 自動化、クローリング、キャプチャ向けにAndroidアプリを実行 |
この用途では、LXCがDockerより有意に効率的というわけではありません。どちらも、名前空間、cgroups、マウント、ネットワーク、デバイスアクセスという同じLinuxカーネルプリミティブのインターフェースです。Dockerは初期には内部でLXCを使用していましたが、その後libcontainer/runcに移行しました。Androidをコンテナ内で動作させる際の性能ボトルネックは、通常、LXCとDockerの違いではなく、Binder IPC、グラフィックス/ディスプレイ合成、GPUパススルー、レンダリングがハードウェアアクセラレーションされているかどうかです。
WaydroidがLXCを選択したのは、特にホストのWaylandソケットをAndroidコンテナにバインドマウントして公開するなど、デスクトップ統合に適しているためと考えられます。ReDroidは、デプロイ、再現性、オーケストレーション、ヘッドレス自動化に適したDockerを選択しました。
自動化またはクローラーシステムでは、一般にReDroidの方がデプロイしやすくなります。Dockerイメージとcomposeファイルでランタイムを記述し、ポート5555でADBを公開し、/dataを永続化して、scrcpy、uiautomator2、Frida、mitmproxyなどのツールを接続できます。ただし、AndroidのBinderと共有メモリに対するカーネルサポートという、ホストレベルの必須要件は残ります。
sudo modprobe binder_linux devices="binder,hwbinder,vndbinder"
sudo modprobe ashmem_linux一部のLinuxカーネルでは、これらのモジュールがデフォルトで提供されないため、ホストに追加のカーネルモジュールまたは別のカーネルパッケージが必要になることがあります。この注意点を考慮しても、WaylandデスクトップセッションやシステムレベルのAndroidデスクトップ統合スタックを必要としないため、ReDroidは通常、Waydroidのインストールより侵襲性が低くなります。
ReDroidのステルス性 #
ReDroidは、デフォルトではAndroidアプリによる環境検出に対してステルスではありません。コンテナ化されたAOSP環境であるため、多くの識別子はカスタマイズしない限り汎用的に見えます。基本的な検出では、アプリはAndroidビルドプロパティ、利用可能なハードウェア機能、センサー、テレフォニー状態、バッテリーの挙動、インストール済みサービス、ランタイムアーティファクトなどを調べることがあります。
一般的な検出面には次のものがあります。
| 検出面 | 目立つ理由 |
|---|---|
| ビルドプロパティ | デフォルトのAOSP/ReDroid値は、実機ではなく汎用的な環境に見えることがある |
| ハードウェア機能 | センサー、カメラ、テレフォニー、バッテリー、Bluetooth、GPSが存在しないか、簡略化されている場合がある |
| CPU/ネイティブアーキテクチャ | x86_64ホストでARMアプリを実行するには変換が必要であり、痕跡が残る可能性がある |
| Google Play Services | ReDroidは通常純粋なAOSPであり、デフォルトではGMSを含まない |
| ランタイムツール | Fridaなどの計装ツールは、プロセステーブル、ポート、メモリマップ、ロード済みライブラリを積極的にスキャンするアプリから検出されることがある |
| グラフィックス/ディスプレイ経路 | コンテナ化されたレンダリングと仮想ディスプレイの挙動は、物理端末と異なる場合がある |
単純な検査は通常、静的プロパティに基づくため、通過させるのが容易です。中程度の検出SDKは、ビルドプロパティ、パッケージ一覧、不足しているハードウェア、root状態、Play Servicesの状態、ネイティブ環境の検査を組み合わせます。攻撃的なアプリでは、複数のシグナルとサーバー側のレピュテーションスコアリングを組み合わせた独自の不正利用防止またはチート対策システムを使用することがあります。
WeChatに類似したアプリについて、現実的な評価は次のとおりです。
| 検出レベル | ReDroidの見通し |
|---|---|
| 単純なエミュレーター検査 | より現実的な環境プロファイルで、通常は対処可能 |
| 一般的な商用SDK検査 | 可能だが、デバイス、サービス、ランタイムの一貫性を慎重に保つ必要がある |
| 積極的なアプリ固有の不正利用防止 | 困難で不安定。いたちごっこになる可能性が高い |
自動化またはクローリングで実用的なアプローチは、通常、ReDroidを端末と完全に見分けられない状態にすることではありません。代わりに、アプリのインストール、ログイン、安定動作を実現し、/dataをDockerボリュームとして永続化し、不要な計装を最小限にします。過去に使用された安定したアカウントと永続化されたAndroidデータディレクトリは、すべてのエミュレーター指紋シグナルを追跡することより重要な場合があります。
目的がアカウント作成や不正利用防止の回避ではなく、通信または状態のキャプチャである場合、より安全なアーキテクチャは、通常のReDroidインスタンスを実行し、必要に応じて手動で操作し、セッションを永続化し、承認済みのデバッグまたは研究に必要な場合にのみFridaやmitmproxyなどのツールを追加することです。
画面ストリーミング/リモート表示 #
| ソフトウェア | 役割 |
|---|---|
scrcpy (Genymobile/scrcpy) | ADB経由でAndroid画面をストリーミング |
| ws-scrcpy | scrcpyをブラウザ/WebRTCでラップ |
| TigerVNC | 以前のPlaywrightコンテナ設計で使用されたVNCサーバー |
| DroidVNC-NG | Android向けVNCサーバーアプリ |
| openbox | 以前のPlaywrightコンテナ設計で使用された最小限のX11ウィンドウマネージャー |
AndroidでVNCが一般的でない理由 #
VNCはAndroidにも存在しますが、扱いにくく、一般的ではありません。通常のAndroid相当の方式はscrcpyです。scrcpyは、Android独自のビデオエンコード経路を使用して、ADB経由でAndroid画面をストリーミングします。実際、Androidデバイスを「VNCのように」表示・操作したい場合、通常はscrcpyが使用されます。
核心的な違いは、送信されるデータです。
| 領域 | VNC | scrcpy |
|---|---|---|
| ストリーム種別 | フレームバッファ/スクリーンショット型のピクセルストリーム | エンコードされたH.264/H.265ビデオストリーム |
| 転送 | VNC TCPプロトコル | USBまたはTCP上のADB |
| サーバー要件 | Android上にVNCサーバーアプリまたはrootレベルのフレームバッファアクセスが必要 | Android側のアプリは不要。ADBを使用 |
| 入力 | VNCサーバーを介してマウス/キーボードを変換 | ADB経由でタッチ/キーボードイベントを送信 |
| レイテンシ | 通常は高い | 通常は低い |
| 自動化への適合性 | 独立したリモートデスクトップ層 | ADB自動化に自然に適合 |
Androidは、Linuxデスクトップのような通常のデスクトップフレームバッファを公開しません。最新のAndroidアプリは、SurfaceFlinger、ハードウェア合成、セキュアサーフェス、アプリサンドボックスを介してレンダリングします。VNCサーバーは、制限のあるMediaProjection画面キャプチャAPIを使用するか、低レベルのディスプレイバッファをキャプチャするためにrootレベルのアクセスに依存する必要があります。
これにより、次のような実用上の問題が生じます。
| 問題 | 重要性 |
|---|---|
| セキュアサーフェスが黒塗りになる場合がある | アプリはFLAG_SECUREを設定できるため、キャプチャAPIではログイン画面、QRコード、機密ビューが黒く表示されることがある |
| 入力変換が非可逆的 | VNCのマウスイベントはAndroid固有の制御モデルではなく、Androidはタッチ、ジェスチャー、IME入力、アクセシビリティイベントを想定している |
| 追加のアプリ/プロセスが必要 | VNCサーバーをAndroid内にインストールし、実行し続ける必要がある |
| レイテンシと帯域幅が不利 | VNCはAndroid固有のディスプレイパイプライン向けに最適化されていない |
| コンテナとの適合性が低い | ReDroidはすでにADBを公開しているため、scrcpyの方が単純で信頼性が高い |
DroidVNC-NGなどのAndroid VNCサーバーアプリは存在し、TermuxでLinuxデスクトップをVNC経由で公開することもできますが、これらは限定的な用途です。Android自体を制御する通常の方法ではありません。ReDroidまたは自動化用途では、scrcpyとADBが標準的なリモート表示経路です。ブラウザアクセスが必要な場合は、VNCを追加するのではなく、ws-scrcpyなどのscrcpyラッパーを使用します。
計装/通信キャプチャ #
| ソフトウェア | 役割 |
|---|---|
| Frida | ランタイムフックおよび動的計装 |
| objection | SSLピンニング解除やroot回避など、一般的なモバイルアプリフック向けのFridaベースCLI |
| mitmproxy | HTTP/Sインターセプトプロキシ |
| Charles Proxy | mitmproxyの代替となるHTTP/Sインターセプトプロキシ |
| apk-mitm | SSLピンニングを無効化するためのAPKパッチツール |
Android自動化/UI #
| ソフトウェア | 役割 |
|---|---|
| uiautomator2 | PythonベースのAndroid UI自動化 |
| airtest | Android UI自動化フレームワーク |
FlowBot (xlrpa/FlowBot) | AndroidアクセシビリティAPIを使用したWeChat/Android自動化 |
| ADB | ホストからAndroidを制御するAndroid Debug Bridge |
WeChat固有 #
| ソフトウェア | 役割 |
|---|---|
| WeChatFerry | Python/Node SDKをサポートするPC版WeChat DLLフック |
| WTAPI | サードパーティ製のiPadプロトコルWeChat API/SaaS |
ブラウザ自動化 #
| ソフトウェア | 役割 |
|---|---|
| Playwright | ブラウザ自動化フレームワーク |
| Chromium | Playwrightによって操作されるブラウザ |
| tini | コンテナ用initプロセス |
コンテナ/システム #
| ソフトウェア | 役割 |
|---|---|
| Docker | コンテナランタイム |
| LXC | Waydroidが使用するコンテナランタイム |
| Magisk | Androidのroot管理およびroot隠蔽ツール |
| binder_linux | Android Binder IPC用Linuxカーネルモジュール |
| ashmem_linux | Android共有メモリ用Linuxカーネルモジュール |
コメント
GitHub で閲覧・コメントする(投稿にはログインが必要です)