绕过TracerPid检测

在调试状态下,Linux内核会向一些文件写入进程状态信息,比如/proc/[pid]/status ,/proc/[pid]/task/[pid]/status文件的TracerPid字段写入调试器进程pid,state字段写入t(tracing stop),在动态调试时常常会遇到循环检测,手动过反调试非常费力,但是可以修改安卓内核从根源上处理这些文件,比如将/proc/[pid]/status的TracerPid字段写死为0,可以修改内核源码重新编译,也可以解包boot.img修改kernel文件。

修改boot.img绕过TracerPid检测

设备 :nexus 5
rom :rom为自己编译好的hammerhead-ktu84p,版本为Android 4.4.4_r1,也可以下载官方刷机包

解包boot.img

建议解包工具:https://github.com/xiaolu/mkbootimg_tools,
或者unpack-boot,解包后得到如下文件
在这里插入图片描述

修改kernel

用010editor打开kernel并搜索1f8b0800(Gzip数据以1F8B开头,可以以此来划分文件中的Gzip和非Gzip数据),删除1f8b0800之前的数据。
在这里插入图片描述
在这里插入图片描述
解压kernel_new.gz得到kernel_new文件,用IDA打开。
在这里插入图片描述
选择处理器类型为arm小端模式,然后设置ROM start address和Loading address 为0xc0008000,关于Linux内存地址0Xc0008000的由来,Linux内核都是加载到0xC0008000处开始运行。
在这里插入图片描述
在这里插入图片描述
IDA中搜索字符串TracerPid
在这里插入图片描述
在这里插入图片描述
交叉引用跳转到调用字符串的函数中F5查看伪代码
在这里插入图片描述
修改TracerPid赋值
在这里插入图片描述
在这里插入图片描述

  • 修改State
    off_C0B156C0处为保存State的字符数组
    在这里插入图片描述
    在这里插入图片描述
    Patch->Apply patches to input file应用修补到文件,然后压缩为gz文件,可以使用7z压缩。010打开它替换进原kernel文件位置。
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yusakul/article/details/89478834
今日推荐