一、Android反调试
反调试在代码保护中扮演着非常重要的角色,虽然不能完全阻止攻击者,但是能加大攻击者的分析时间成本。目前绝大多数Android app都加固了,为了防止App被调试分析,加固功能中添加了各种反调试功能,比如:自己ptrace自己、检查函数执行时间、读取/proc/$pid/wchan或者/proc/$pid/task/$pid/wchan文件信息判断调试状态、读取/proc/$pid/stat或者/proc/$pid/task/$pid/stat文件信息判断调试状态、读取/proc/$pid/status或者/proc/$pid/task/$pid/status文件检测TracerPid、读取检测调试进程名、检测调试端口等等。网上关于Android 反调试的文章比较多,想了解更多Android反调试检测手段可以看看[https://bbs.pediy.com/thread-223324.htm]中总结的方法。本篇文章我们只讨论读取/proc/$pid/status 文件和/proc/$pid/wchan文件检测app是否处于被调试。
二、读取/proc/$pid检测原理分析
1.读取/proc/$pid下的status文件检测被调试
在Android 中调试状态下,linux内核会向/proc/$pid/status或者/proc/$pid/task/$pid/status 中写入进程状态信息。其中TracerPid 字段写入调试该进程的进程的的Pid。其中State字段中写入该进