Android 反调试攻防实战:多重检测手段解析与内核级绕过方案

版权归作者所有,如有转发,请注明文章出处: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 进程

word/media/image1.png

相关文章:静态分析根本不够!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

word/media/image2.png

再通过 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值