Android防作弊-2020.04.04

1.so 防調試總結:

第一、自己附加進程,先佔坑,ptrace (PTRACE_TRACEME, 0, 0, 0)!
第二、簽名校驗不可或缺的一個選擇,本地校驗和服務端校驗雙管齊下!
第三、藉助系統 api 判斷應用調試狀態和調試屬性,最基礎的防護!
第四、輪訓檢查 android_server 調試端口信息和進程信息,防護IDA的一種有效方式!
第五、輪訓檢查自身 status 中的 TracerPid 字段值,防止被其他進程附加調試的一種有效方式!

注意:一般反調試在 JNI_OnLoad 中執行,也有的是在 INIT_ARRAY 段和 INIT 段中早於 JNI_OnLoad 執行。可通過 readelf 工具查看 INIT_ARRAY 段和 INIT 段的信息,定位到對應代碼進行分析。檢測時間差來檢測是否中間有被單步調試

2.Cydia Substrate 其原理:

框架注入 zygote 進程,採用 inline hook( 修改目標函數前N字節,跳轉到自定義函數入口,
備份目標函數前N個字節,跳轉回目標函數)

Xposed 原理:

替換 app_process,將需要 hook 的 java 函數替換成 JNI 函數,所有需要 HOOK 的函數
首先由 XposedCallHandler 處理,xposedCallHandler負責調用註冊的 
beforeHookMethod 和 afterHookedMethod

adbi原理:

利用 ptrace 函數 attach 到一個進程上,然後在其調用序列中插入一個調用 dlopen 函數的步驟,
將一個實現預先備好的 .so 文件加載到要 hook 的進程中,最終由這個加載的 .so 文件在初始化化函數
中 hook 指定的函數。

3.xhook plt hook 原理:

讀 maps,確認當前 hook 地址的內存訪問權限。
如果權限不是可讀也可寫,則用 mprotect 修改訪問權限爲可讀也可寫。
如果調用方需要,就保留 hook 地址當前的值,用於返回。
將 hook 地址的值替換爲新的值。(執行 hook)
如果之前用 mprotect 修改過內存訪問權限,現在還原到之前的權限。
清除 hook 地址所在內存頁的處理器指令緩存。

4.frida 檢測:

 Java 遍歷運行的進程列表從而檢查 fridaserver 是否在運
 fridaserver 默認的 TCP 端口是 27047,可以檢查這個端口是否開放。
 在內存中掃描 frida 的庫特徵 “gadgets”。我選擇字符串 “LIBFRIDA”,它在所有 
 frida-gadget 和 frida-agent 的版本中都有出現。
(注意有些函數是自定義實現的,但是功能和 libc 中的一樣,設置了系統調用的參數,執行了軟中斷。)

5.xposed 檢測:

(1).通過 ClassLoader 的 loadClass 加載XposedHelper 來修改一些局部變量值,阻止hook.
   處理方式,通過Hook 類加載修改 加載的類名

(2).通過 代碼拋出一個異常,在堆棧中,查找Xposed相關的內容,

(3).通過讀取 shell 命令 /proc/pid(應用進程id)/maps 可以拿到當前上下文的 so 和 jar 列表,
     查找Xposed相關

(4). 由於Xposed的hook,是通過so修改被hook的方法爲native來實現的,所以檢測方也
     可以通過檢測方法是否變成了native來達到檢測的目的

6.Root檢測:

是否含有su程序和ro.secure是否爲1
ro.secure = 0,表示adb shell將以root用戶身份運行,而不是shell用戶。
ro.debuggable = 1或service.adb.root = 1,然後adb也將以root身份運行。

檢查目錄權限:
Root使某些根文件夾可讀,如/ data或可寫,如/ etc,/ system / xbin,/ system,
/ proc,/ vendor / bin等。運行mount命令並檢查是否有任何設備使用“rw”掛載標記,
或嘗試在“/ system”或“/ data”文件夾下創建文件。
嘗試使用命令“ mount -o remount,rw / system ” 掛載“/ system”分區,並檢查返回碼。

7.雙開檢測:

滿足同一uid下的兩個進程對應的包名,在"/data/data"下有兩個私有目錄,則該應用被多開了
檢測files目錄路徑
maps檢測

8.模擬器檢測:

模擬器的IMSI、IDS、默認文件等幾個方面進行檢測。
      如:  //310260000000000, /system/bin/qemu-props
基於模擬器cpu信息的檢測。cpu信息看看是否包含intel、amd等字段 x86,vbox86p
可以從電池的溫度和電量等信息入手,檢測溫度在使用過程中是否一直保持不變、
或者是電量一直是固定值並且不是百分之百等等。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章