淺談Android反調試 之 PTRACE_TRACEME


反調試原理:

ptrace函數  原型為:    
#include <sys/ptrace.h>
long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
ptrace有四個參數: 
 1). enum __ptrace_request request:指示了ptrace要執行的命令。
 2). pid_t pid: 指示ptrace要跟蹤的進程。
 3). void *addr: 指示要監控的內存地址。
 4). void *data: 存放讀取出的或者要寫入的數據。
ptrace是如此的強大,以至於有很多大家所常用的工具都基於ptrace來實現,如strace和gdb。

參數為reqest為PTRACE_TRACCEME,表示父進程和子進程是Trace關系。如下圖:


我們知道調試Android應用程序,必須調用附加進城,此刻必須調用 ptrace(PTRACE_ATTACH). 此刻進程從程序已經被Tracce, 此刻ptrace必會失敗。利用這一點我們就可以做反調試。
實現代碼如下:

解決方案:NOP調用 ptrace(PTRACE_TRACEME)這個代碼
 









免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM