一种常用的Android NDK对抗so动态调试方法
更新日期:
文章目录
扣吧力作,欢迎转载,转载请注明来自colbert337.github.io
在Linux中,进程的状态可以通过/proc/PID/status来查看,其中TracerPid字段的取值,指示了跟踪当前进程的进程ID,如果是0,表示没有跟踪。
攻击者动态调试so,需要使用gdb或者IDA的android_server(底层是trace一类的函数)来attach目标进程,此时/proc/PID/status中的TracerPid不为0。利用这个特性,我们就可以在so中预置检测TracerPid的函数,来判断当前进程有没有被跟踪调试,如何发现被调试就退出或者自毁。下面展示一个demo:
1 | //anti-debug,对抗动态调试 |
我们在关键的函数执行前,可以进行以下判断:
1 | //anti-debug |