市場上發行的模擬器大可能是 VirtualBox + Android X86 + Houdini 方案,以 VirtualBox 爲虛擬環境,搭載 Android X86 系統,使用 Intel Houdini 翻譯執行 ARM 指令。android
關於 Intel Houdini 的討論,參見 《Intel Houdini 比 QEMU 快在哪裏?》安全
某些優秀模擬器在運行只帶有 ARM 動態庫的遊戲時,在遊戲內經過 __system_property_get
獲取的的 ABI 將會是 arm,而不是 x86,訪問 /proc/cpuinfo
獲取到的 CPU 也是虛假的 ARM 處理器信息,欺騙遊戲認爲本身運行在一個 ARM 環境中。ui
使用電量變化、WIFI信號變化、蜂窩信號變化、陀螺儀等動態變化特徵是最好的方法,可是須要一段時間的特徵採集,才能判斷是否運行在模擬器中,適合做爲一種補充。如某 FPS 手遊,新玩家進入後,分配到的遊戲區不是模擬器專用遊戲區,而當進入第二局遊戲的時候,就被分配到了模擬器專區。翻譯
比較正經的 Android X86 + Houdini 模擬器,如 Genymotion,都會存在 /system/lib/libhoudini.so
,而這個特徵廣爲人知,國內處理版本比較老的模擬器外,基本上都隱藏了 libhoudini.so
調試
下面介紹一些還能使用的靜態特徵code
模擬器 | 文件特徵 | 屬性特徵 |
---|---|---|
VirtualBox | /system/bin/androVM-prop /system/bin/androVM-vbox-sf /system/bin/androVM_setprop /system/bin/get_androVM_host /system/bin/mount.vboxsf /system/lib/egl/libGLES_emulation.so /system/lib/egl/libGLESv1_CM_emulation.so /system/lib/egl/libGLESv2_emulation.so |
init.svc.vbox86-setup androVM.vbox_dpi androVM.vbox_graph_mode |
AVD | /system/bin/qemu_props | ro.kernel.android.qemud init.svc.qemud |
逍遙模擬器 | /system/bin/microvirtd /system/bin/microvirt-prop |
init.svc.microvirtd |
夜神模擬器 | /system/bin/nox /system/bin/nox-prop /system/bin/nox-vbox-sf /system/bin/nox-setprop |
init.svc.noxd |
海馬玩 | /system/lib/libdroid4x.so /system/bin/droid4x /system/bin/droid4x-prop /system/bin/droid4x-vbox-sf /system/bin/droid4x-setprop |
init.svc.droid4x |
每天模擬器 | /system/bin/ttVM-prop /system/bin/ttVM-vbox-sf /system/bin/ttVM-setprop /system/lib/egl/libEGL_tiantianVM.so /system/lib/egl/libGLESv1_CM_tiantianVM.so /system/lib/egl/libGLESv2_tiantianVM.so |
init.svc.ttVM_x86-setup ttVM.vbox_dpi |
BlueStacks | /system/bin/bstcmd_shim /system/bin/bstfolderd /system/bin/bstsyncfs /data/.bluestacks.prop /system/lib/egl/libGLES_bst.so /system/lib/egl/libGLES_bst.so-arm |
init.svc.bstfolderd init.svc.bstsvcmgrtest |
因爲模擬器自帶 root 權限,默認開啓 ADB 調試,各類**助手和外掛窮出不盡,對手遊的安全威脅度極高,該類玩家應爲重點關照羣體。另外,模擬器玩家遊戲充值不便,小打金工做室也主要利用模擬器做爲平臺,該類用戶價值不高。遊戲
某些較大規模的遊戲廠商(T)會爲了迎合某些上班隱形土豪羣體的須要,同時也爲了安全起見,會選擇與優秀的模擬器供應商合做,提供專用的模擬器。get