Emulator Hider:エミュレーターを隠してAndroid IDを変更する
Emulator Hiderは、Android ID and Emulator HiderのうちPC上のAndroidエミュレーター専用に作られた半分の機能です。エミュレーターを使っていることを示すあらゆる一般的な兆候を隠し、同時にAndroid IDも変更することで、アプリには本物の新しい端末として認識されます。
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 5 | root化トグルを内蔵(インスタンス設定) |
| NoxPlayer | root化トグルを内蔵 |
| LDPlayer 9 | root化トグルを内蔵 |
| MEmu Play | root化トグルを内蔵 |
| MuMu Player | root化トグルを内蔵 |
| GameLoop | コミュニティ製アドオン経由でroot化 |
| Genymotion | OpenGAppsベースのイメージ経由で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
エミュレーターでrootを有効にする
ほとんどのエミュレーターは設定内にワンタップのroot化トグルがありますが、一部は専用のroot化済みシステムイメージが必要です。
- 2
Xposedフレームワークをインストールする
実機と同じく、LSPosedまたはVectorを使います。
- 3
Android ID and Emulator Hiderをインストールして適用範囲を設定する
自身と動かしたいアプリを適用範囲に加えてから、デバイスプロファイルを選びます。
- 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はこれらすべてを同時に変更します。
エミュレーターと実機で異なるプロファイルを使えますか?
はい。インストールごとに独自の有効なプロファイルを持つため、エミュレーターと実機でそれぞれまったく異なる端末情報を表示できます。