1. 程式人生 > 其它 >安卓反除錯與檢測小結

安卓反除錯與檢測小結

  本文方法來自看雪和52大佬的幾個帖子,在理解其方法原理的基礎上我做了一點總結,放在部落格加深記憶,溫故知新。

  部分方法由於安卓系統的安全性更新已經無法使用,但是可以找到替代辦法。

一、檢測常用除錯埠

  思路:部分偵錯程式對真機進行除錯時會與特定埠建立連線(如IDA會連線23946),因此檢測到埠被佔用就認為手機正在被除錯。

  Android 10後/proc目錄使用者無法讀取,因此舊版本上訪問/proc/net/tcp的方法失效。替代辦法是直接藉助InetAddress查詢特定埠是否被佔用即可。

  示例程式碼如下:

  註解:IDA除錯埠是可以更改的,因此該方法只能作為初步判斷法。

二、除錯程序名檢測

  思路:遍歷程序名,若找到特定的程序,則認為偵錯程式正在執行。比如android_server,gdb_server,frida_server等等。

三、父程序名檢測

  思路:該方法是針對so檔案除錯的。若除錯者不採用啟動app附加程序除錯,而是直接編寫一個.out可執行檔案載入so檔案執行,這樣父程序名是zygote而非正常啟動app的父程序。讀取/proc/pid/cmdline,檢視內容是否為zygote。

  由於安全性更新無法訪問此目錄:/proc/pid/cmdline這裡感謝pareto的指正,app層在真機下是隻能訪問自身/proc/pid下的檔案,並非完全無法訪問,這使得我們可以通過檢查Tracerpid

這個屬性進行反除錯

四、APK執行緒檢測

  正常apk程序一般會有十幾個執行緒在執行(比如會有jdwp執行緒),但是自己編寫的可執行檔案載入so一般只有一個執行緒,可根據執行緒數量差異來進行除錯環境檢測。示例程式碼:

  註解:可以先測試自身app產生的執行緒數目,再判斷是否被除錯,如果執行緒數目顯著大於測試得到的結果,那可以認為遭到了注入或者除錯。

五、ptrace檢測

  Android系統限制,每個程序同一時刻只能被1個除錯程序ptrace,主動ptrace本程序可以使得其他偵錯程式無法除錯。

六、簽名校驗

  app被重打包之後簽名就會出現改變,可以檢測簽名防止重打包。示例程式碼:

  註解:簽名校驗的效果很強,但是市面上已經有很多過簽名的通用方法了(參考np管理器,mt管理器)