1. 程式人生 > >Android模擬器檢測常用方法

Android模擬器檢測常用方法

在Android開發過程中,防作弊一直是老生常談的問題,而模擬器的檢測往往是防作弊中的重要一環,接下來有關於模擬器的檢測方法,和大家進行一個簡單的分享。

1.傳統的檢測方法。

傳統的檢測方法主要是對模擬器的IMSI、IDS、預設檔案等幾個方面進行檢測。

(1)預設號碼:

private static String[] known_numbers = {"15555215554", "15555215556",
            "15555215558", "15555215560", "15555215562", "15555215564",
            "15555215566", "15555215568", "15555215570", "15555215572",
            "15555215574", "15555215576", "15555215578", "15555215580",
            "15555215582", "15555215584"};
(2)預設ID:
private static String[] known_device_ids = {"000000000000000"};
(3)預設IMSI:
private static String[] known_imsi_ids = {"310260000000000"};
(4)預設檔案路徑:
private static String[] known_files = {
            "/system/lib/libc_malloc_debug_qemu.so",
            "/sys/qemu_trace",
            "/system/bin/qemu-props"};

在得知了這些資訊後,只需在執行時進行檢測,如果檢測結果和預設值吻合,那麼檢測裝置便是模擬器。不過隨著防反作弊技術的迭代,現在很多模擬器都可以改變這些值來逃避檢測,所以上述傳統方法在很多時候未曾達到開發者的預期效果。

2.基於模擬器cpu資訊的檢測。

成功率相較於傳統方法,有了更高的成功率。

cpu資訊檢測主要是在cpu資訊看看是否包含intel、amd等欄位,很多模擬器目前對於cpu資訊還無法進行模擬。

(1)讀取cpu資訊:

 public static String readCpuInfo() {
        String result = "";
        try {
            String[] args = {"/system/bin/cat", "/proc/cpuinfo"};
            ProcessBuilder cmd = new ProcessBuilder(args);

            Process process = cmd.start();
            StringBuffer sb = new StringBuffer();
            String readLine = "";
            BufferedReader responseReader = new BufferedReader(new InputStreamReader(process.getInputStream(), "utf-8"));
            while ((readLine = responseReader.readLine()) != null) {
                sb.append(readLine);
            }
            responseReader.close();
            result = sb.toString().toLowerCase();
        } catch (IOException ex) {
        }
        return result;
    }
(2)進行判定:
String cpuInfo = readCpuInfo();
if ((cpuInfo.contains("intel") || cpuInfo.contains("amd"))) {return true;}
類似的還有
String[] blockList = "google_sdk,sdk,sdk_x86,vbox86p".split(",");

原理相同。

3.關鍵路徑檢測特定模擬器檢測

前面2個方法在很大程度上已經可以鑑定出很多模擬器了,但是對於某些在反防作弊上同樣熱愛的模擬器,需要特定的檢測方法。

bluestacks成功躲避了前兩種檢測方法,所以在這裡給予其VIP的待遇。

以下是總結出來的一些bluestacks的關鍵路徑:

 private static String[] known_bluestacks = {"/data/app/com.bluestacks.appmart-1.apk", "/data/app/com.bluestacks.BstCommandProcessor-1.apk",
            "/data/app/com.bluestacks.help-1.apk", "/data/app/com.bluestacks.home-1.apk", "/data/app/com.bluestacks.s2p-1.apk",
            "/data/app/com.bluestacks.searchapp-1.apk", "/data/bluestacks.prop", "/data/data/com.androVM.vmconfig",
            "/data/data/com.bluestacks.accelerometerui", "/data/data/com.bluestacks.appfinder", "/data/data/com.bluestacks.appmart",
            "/data/data/com.bluestacks.appsettings", "/data/data/com.bluestacks.BstCommandProcessor", "/data/data/com.bluestacks.bstfolder",
            "/data/data/com.bluestacks.help", "/data/data/com.bluestacks.home", "/data/data/com.bluestacks.s2p", "/data/data/com.bluestacks.searchapp",
            "/data/data/com.bluestacks.settings", "/data/data/com.bluestacks.setup", "/data/data/com.bluestacks.spotlight", "/mnt/prebundledapps/bluestacks.prop.orig"
    };

檢測方法:
public static boolean checkBlueStacksFiles() {
        for (int i = 0; i < known_bluestacks.length; i++) {
            String file_name = known_bluestacks[i];
            File qemu_file = new File(file_name);
            if (qemu_file.exists()) {
                FkLog.e("Result : Find BlueStacks Files!");
                return true;
            }
        }
        FkLog.e("Result : Not Find BlueStacks Files!");
        return false;
    }

這種基於關鍵路徑的檢測,便可以成功的檢測出bluestacks。

4.模擬器檢測新思路

模擬器檢測與模擬器反檢測都在不斷的更新迭代中,無法確保哪一種方法會永垂不朽,在這裡分享下新的思路。

電池資訊檢測

可以從電池的溫度和電量等資訊入手,檢測溫度在使用過程中是否一直保持不變、或者是電量一直是固定值並且不是百分之百等等。

親測可以鑑別出genymotion、bluestacks等主流模擬器。


5.寫在最後

其實很多時候在檢測模擬器的過程中,都不是隻使用某一種固定的方法,一來需要具體問題具體分析,二來也需要用多種方法來綜合檢測。言而總之,有了十八般武藝才能見招拆招。

ps:如有錯誤或需要補充的地方,請各位多多指正~

相關推薦

Android模擬器檢測常用方法

在Android開發過程中,防作弊一直是老生常談的問題,而模擬器的檢測往往是防作弊中的重要一環,接下來有關於模擬器的檢測方法,和大家進行一個簡單的分享。 1.傳統的檢測方法。 傳統的檢測方法主要是對模擬器的IMSI、IDS、預設檔案等幾個方面進行檢測。 (1)預設號碼:

設定Android模擬器上網的方法

http://myclover.iteye.com/blog/1035957 很多網友也問到為啥自己在家的PC機可以上網,而執行在PC機上面的android模擬器卻不能上網呢?是因為家裡的PC機的DNS一般為:192.168.1.1,這個只是一般而言,不是絕對,這個得

Android 屬性動畫 常用方法 與 插值器 Interpolator

轉載於。加了點自己的修改 ViewPropertyAnimator 使用方法 view.animate().translationX(500); 具體可以跟的方法以及方法所對應的 View 中的實際操作的方法如下圖所示:

夜神Android模擬器連線eclipse方法

先找到安裝夜神的路徑如:E:\yeshen\Nox\bin 在在這個目錄下按住shift鍵滑鼠右鍵 在此處開啟命令視窗; 然後輸入adb connect 127.0.0.1:62001回車。 如果不可以,要看開啟的命令視窗是不是管理員的模式,如果不是就按win鍵,然後在搜尋

Android效能優化常用方法

本篇部落格主要介紹關於效能優化的一些方法,以及效能分析工具的使用。 一 效能優化的常用方法 主要內容包括佈局優化,繪製優化,記憶體洩露優化,相應速度優化,ListView優化,Bitmap優化,執行緒優化,以及一些效能優化建議,在介紹相應速度優化的同時,還介紹了AN

場景文字檢測常用方法

文字檢測方向的簡單調研和特徵學習,歡迎大家監督建議。 一、基於紋理: 將文字當做特殊紋理,利用其紋理特徵進行處理。較常用的區分文字和非文字部分的紋理特徵有:區域性強度、濾波器響應、小波係數、文字較強邊界以及與非文字區域的較大對比度、離散餘弦變

檢測Android模擬器方法和程式碼實現

專自:https://bbs.pediy.com/thread-225717.htm 剛剛看了一些關於Detect Android Emulator的開源專案/文章/論文, 我看的這些其實都是13年14年提出的方法, 方法裡大多是檢測一些環境屬性, 檢查一些檔案這樣, 但實際上檢測的思路並不侷限

Build path 的重要。安卓常用設定 。讓 eclipse 下的 android 模擬器聯網。沒有ADT的那個圖示顯示;模擬器路徑位置的更改方法

Build path 的重要。 The type java.lang.Object cannot be resolved.It is indirectly referenced 常看一下Build path中的各標籤中是否有錯誤選項(有紅叉),更正或刪除。 當從別處匯入新的專案時.ecl

Android開發調試無法連接到夜神模擬器的解決方法

ber adb.exe user 過去 tag 執行 關於平板電腦 bug 復制 Android開發調試無法連接到夜神模擬器的解決方法: 一般原因是adb的版本不一致造成的!!!!!換成一樣的就可以了。 在網上看到的方法,特記錄下來: 1、任務管理器裏看下,adb.exe以

Android Socket 常用方法介紹

try {/***第一種:客戶端Socket通過構造方法連線伺服器***///客戶端Socket可以通過指定IP地址或域名兩種方式來連線伺服器端,實際最終都是通過IP地址來連線伺服器//新建一個Socket,指定其IP地址及埠號Socket socket = new Socket("192.168.

Android中Log的常用方法

android.util.Log常用的方法有以下5個:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() 。根據首字母對應VERBOSE,DEBUG,INFO, WARN,ERROR。 1、Log.v 的除錯顏色為黑色的,任何訊息都會輸出,這裡的v代表verbose

檢測Android模擬器

package com.lisn.check_emulator_lib; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.IOException; /** * C

Android中Dialog的常用方法彙總和自定義Dialog的步驟.txt

一、系統自帶Dialog對話方塊的使用: 警告框(AlertDialog)是在專案中出現的最簡單的一種對話方塊,主要的目的是為使用者顯示一條警告資訊,AlertDialog也是在對話方塊中使用最多的一個類,而且是Dialog的直接子類,此類繼承結構如下: j

解決部分Linux系統中無法啟動Android模擬器方法

這個發生在2017年,我迷上了使用一款叫做Deepin OS的國產Linux系統,基於Debian,精美華麗的UI和動畫,適合國人的操作環境(QQ/微信/Tim/軟體市場) 但是發現無法啟動android 模擬器,報錯結果是缺少so檔案,在百度的結果使用無效之後,我goog

Windows下,Android模擬器除錯串列埠的方法

使用如下的命令將電腦的串列埠(COM1)對映到模擬器裡(ttyS2): $ emulator @4412 -scale auto -qemu -serial COM1 &說明: 4412是我的AVD的名稱;-scale auto表示自動縮放到合適的尺寸。 -qemu

Android root檢測方法小結

出於安全原因,我們的應用程式不建議在已經root的裝置上執行,所以需要檢測是否裝置已經root,以提示使用者若繼續使用會存在風險。 那麼root了會有什麼風險呢,為什麼不root就沒有風險,又怎麼來檢查手機是否root了? 我們先來了解下Android安

Android RecyclerView比較常用的使用方法總結

(點選上方目錄可以跳轉) 轉載請註明出處:http://blog.csdn.net/htwhtw123/article/details/77917403 1.一般的RecyclerView(和一些注意事項) 2.下拉後從上端重新整理 3.上拉從下端重新整

Android自學筆記之ProgressBar進度條的屬性、常用方法及使用

1,屬性:   android:progress="0"  ----設定第一層進度條的初始值  android:max="100"  ---設定進度條的最大值  android:secondaryPr

android模擬器打電話發簡訊的簡單方法

作者: 單鵬程       在開發android應用程式時,有時候需要測試一下向android手機撥打電話傳送簡訊時該應用程式的反應。譬如編寫一個廣播接收器,來提示使用者有簡訊收到或者處理簡訊,就需要向該手機發送簡訊來進行測試。這裡介紹一種簡單的向android模擬器打電

Android模擬器Genymotion新增ARM程式執行環境的方法

搞開發也很多年了,還是第一次寫blog,給自己留一些記錄吧 自從用了Genymotion這個號稱快到極致的Android模擬器以後,很多時候除錯程式都不想用真機了,SDK帶效率低下的官方模擬器因為效率太低也放棄了(據說可以通過配置來改進一直沒去嘗試過) 通過模擬器和hier