版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/
常见的反调试手段
在 Android 安全对抗中,反调试 几乎是 App 的标配。开发者往往会在关键逻辑中加入各种检测手段,只要发现进程被调试,就立即崩溃或退出,从而大幅增加逆向人员分析的难度。
常见的反调试手段包括:
-
TracerPid 检测通过读取 /proc/self/status,如果 TracerPid 不为 0,就说明当前进程正被调试器(如 gdb、lldb、IDA Pro)附加。这是最常见的调试检测方式之一。
-
stat 检测通过 /proc/self/stat 可以获取进程的运行状态,如果发现状态异常(如被调试中),就会触发保护逻辑。
-
wchan 检测读取 /proc/self/wchan,检查线程当前在内核中的等待状态。如果检测到线程因调试而阻塞,就会触发异常处理。
1. TrackerId
首先,通过 IDA Pro 的调试器附加到当前 app 进程

相关文章:静态分析根本不够!IDA Pro 动态调试 Android 应用的完整实战
使用 top 命令查看进程状态
top | grep com.cyrus.example
17305 u0_a137 10 -10 4.8G 104M 42M t 0.0 1.8 0:02.02 com.cyrus.example
在输出中,S 表示进程状态,17305 是 PID。
通过head /proc/[pid]/status 可以查看详细的进程状态。
head -n 6 /proc/17305/status
Name: m.cyrus.example
State: S (sleeping)
Tgid: 17305
Pid: 17305
PPid: 728
TracerPid: 16208
TracerPid: 16208 说明当前的进程正在被进程 16208 调试或跟踪,否则没有被调试值应该为0。
2. stat
这时我们断点调试 app

再通过 head /proc/[pid]/status 可以查看详细的进程状态,包括是否被调试等信息。
head -n 6 /proc/17305/status
Name: m.cyrus.example
State: t (tracing stop)
Tgid: 17305
Pid: 17305
PPid: 728
TracerPid: 16208
在输出中,t (tracing stop) 表示 app 停止(被调试或其他暂停)
3. wchan
使用 cat 命令查看 /proc/[pid]/wchan 文件,该文件显示进程当前正在等待的内核函数。
cat /proc/17305/wchan
ptrace_stop
在输出中,ptrace_stop 表示进程 17305 当前正在被调试器暂停,等待调试器发出的命令。
Android 中实现反调试检测
Android App 中如何实现这些反调试检测的?
实际上,绝大多数方法都离不开 /proc 文件系统 。
-
/proc/self/status 提供了 TracerPid 字段,用于判断进程是否被调试;
-
/proc/self/stat 记录了进程的详细运行状态;
-
/proc

最低0.47元/天 解锁文章
1854

被折叠的 条评论
为什么被折叠?



