droid.rooter
ガイド 初級 7分で読めます

Emulator Hider:エミュレーターを隠してAndroid IDを変更する

Emulator Hiderは、Android ID and Emulator HiderのうちPC上のAndroidエミュレーター専用に作られた半分の機能です。エミュレーターを使っていることを示すあらゆる一般的な兆候を隠し、同時にAndroid IDも変更することで、アプリには本物の新しい端末として認識されます。

紫色の背景に配置されたAndroid ID and Emulator Hiderのロゴと「Android IDを変更し、あらゆるエミュレーターを本物にする」の見出し
目次
  1. エミュレーターが見破られる決め手
  2. Emulator Hiderによる解決方法
  3. 対応エミュレーター
  4. Android IDだけの変更では不十分な理由
  5. エミュレーターでのセットアップ
  6. 正直にお伝えする限界

BlueStacks、NoxPlayer、その他のPC上のAndroidエミュレーターでアプリを動かすと、多くのアプリがすぐに気づき、起動を拒否したり、機能を隠したり、静かにセッションにフラグを立てたりします。アプリは心を読んでいるわけではなく、エミュレーターと実機とで値が異なって見える、ごく普通のAndroid APIをいくつか読み取っているだけです。Android ID and Emulator Hiderのうちエミュレーターに特化した半分であるEmulator Hiderは、まさにこのギャップを埋めるために存在し、同時にAndroid IDも変更することで、背後の端末自体も別の本物のスマートフォンとして読み取られるようにします。

エミュレーターが見破られる決め手

ほとんどのエミュレーター判定は、巧妙な仕組みではなく、単純な文字列やファイルの照合です。

  • qemu/goldfishのビルドプロパティ——ro.kernel.qemuや、「sdk」や「Emulator」を含むro.product.modelなど。
  • エミュレーター専用のファイルやマウント——実機には絶対に存在しないもの。
  • 汎用またはプレースホルダーのAndroid ID、あるいはどの実機にも対応しないIMEI。
  • x86/x86_64のCPU——実機のARMチップでは絶対に表示されないベンダー文字列を報告する。
  • エミュレーター特有のセンサー名やGPUドライバー名——実際のGPUベンダーの代わりにソフトウェアレンダラーが表示されるなど。
  • rootとXposedの痕跡——ここまでたどり着く人の多くは、そもそもエミュレーターとXposedを組み合わせて使っているため。

Emulator Hiderによる解決方法

Emulator Hiderはこれらの一部だけを隠して残りを放置するのではなく、12種類の実機プロファイルのいずれかの値で、一貫してすべてを置き換えます。

  • Emulator traces——qemu/goldfishのプロパティ、特徴的なファイル、カーネルドライバー名を偽装または除去します。
  • Android IDと端末情報——モデル名、ブランド、製造元、ビルドフィンガープリント、Android ID、シリアル番号がすべて同時に、有効なプロファイルに切り替わります。
  • プロセッサーとグラフィックス——Build.SUPPORTED_ABIS、os.arch、生の/proc/cpuinfoベンダー文字列は、背後のPCのx86/x86_64ホストではなく、プロファイルのARMチップを報告します。GPUベンダーとレンダラー文字列も同様に変わります。
  • rootとXposedの痕跡——su、Magisk/KernelSUのパス、プロセスマップやパッケージマネージャーに残るLSPosed/Vectorの痕跡が、適用範囲に入れたアプリから隠されます。

対応エミュレーター

Emulator Hiderは、root化でき、内部でLSPosedやVectorなどのlibxposed API 102フレームワークを実行できるAndroidエミュレーターであれば、どれでも同じように動作します。

エミュレーターrootの取得方法
BlueStacks 5root化トグルを内蔵(インスタンス設定)
NoxPlayerroot化トグルを内蔵
LDPlayer 9root化トグルを内蔵
MEmu Playroot化トグルを内蔵
MuMu Playerroot化トグルを内蔵
GameLoopコミュニティ製アドオン経由でroot化
GenymotionOpenGAppsベースのイメージ経由でroot化
Android Studioエミュレーター(AVD)非Google APIsのシステムイメージでroot化

エミュレーター内でrootとXposedフレームワークが有効になれば、Emulator Hiderのインストールと適用範囲の設定はインストールガイドの手順とまったく同じです。

Android IDだけの変更では不十分な理由

世の中の「Android IDを変更する」ツールやテクニックの多くは、値を一つだけ変えてそれで終わりです。Android IDしか確認しないアプリに対してはそれで十分ですが、ほとんどの検出ロジックは、単一の手がかりだけでは簡単に偽装できるという理由から、複数のチェックを重ねて使っています。qemuのプロパティ、CPUベンダー文字列、あるいはインストール済みパッケージ一覧からXposedを確認するアプリであれば、それ以外は手つかずのエミュレーターの上に新しいAndroid IDだけが乗っている状態を、それでも見破ってしまいます。Emulator Hiderの設計全体は、Android IDとそれ以外のすべての手がかりを同じタイミングで変更し、矛盾の残る余地をなくすことに尽きます。

エミュレーターでのセットアップ

  1. 1

    エミュレーターでrootを有効にする

    ほとんどのエミュレーターは設定内にワンタップのroot化トグルがありますが、一部は専用のroot化済みシステムイメージが必要です。

  2. 2

    Xposedフレームワークをインストールする

    実機と同じく、LSPosedまたはVectorを使います。

  3. 3

    Android ID and Emulator Hiderをインストールして適用範囲を設定する

    自身と動かしたいアプリを適用範囲に加えてから、デバイスプロファイルを選びます。

  4. 4

    強制終了、再起動、確認

    対象アプリを再起動し、Device Checkを開いて、エミュレーターが選んだプロファイルとして報告されているか確認します。

正直にお伝えする限界

Emulator Hiderは、JavaおよびネイティブAPIが返す値を変更しますが、Play IntegrityやSafetyNetのようなハードウェアアテステーションは偽装できませんし、できる仕組みでもありません。これらはユーザー空間のXposedフックが届く範囲ではなく、端末のTEE/StrongBoxを確認するためです。また、適用範囲に加えたアプリしか保護されず、すでに起動中のアプリは変更を反映するために再起動が必要です。本当に重要なアプリとエミュレーターの組み合わせでは、頼る前に必ずテストしてください。

本モジュールは、プライバシー保護、テスト、自分のアプリとの互換性確認を目的としています。利用方法についての責任はすべて利用者にあり、DroidRooterは違法な使用について責任を負いません。

よくある質問

アプリがエミュレーターだと見抜く決め手は何ですか?

主にqemu/goldfishのビルドプロパティやファイル、汎用または欠落したIMEI・Android IDの値、ARM専用アプリでのx86 CPU情報、そしてエミュレーター特有のセンサーやグラフィックスドライバー名です。Emulator Hiderはこれらすべてを実機プロファイルの値に置き換えます。

Emulator Hiderはどのエミュレーターに対応していますか?

root化でき、libxposed API 102フレームワーク(LSPosedやVector)を内部で実行できるAndroidエミュレーターであれば、BlueStacks 5、NoxPlayer、LDPlayer 9、MEmu Play、MuMu Player、GameLoop、Genymotion、Android Studioエミュレーター(AVD)を含め、どれでも対応しています。

Android IDだけを変更すれば、エミュレーターを実機として通用させられますか?

いいえ。Android IDは数ある手がかりの一つに過ぎません。qemuのプロパティ、CPUベンダー文字列、インストール済みパッケージ一覧からXposed・rootの痕跡を確認するアプリであれば、それでもエミュレーターを検出してしまいます。Emulator Hiderはこれらすべてを同時に変更します。

エミュレーターと実機で異なるプロファイルを使えますか?

はい。インストールごとに独自の有効なプロファイルを持つため、エミュレーターと実機でそれぞれまったく異なる端末情報を表示できます。