安卓系统修改系统内核绕过TracerPid检测--反防调试

  • A+
所属分类:移动安全

前言

得到一个Android的CrackMe来考察逆向知识,分析后发现其关键函数位于native so库中,并且在函数开始时启动了线程进行TracerPid检测的反调试,当发现程序被调试时会直接杀死应用。虽然题目最后卡在了native 逆向与反调试绕过这里,下去后我学习了下如何绕过这个反调试。主要是两种:(1)patch so,直接修改关键值来绕过;(2)修改系统内核文件来将TracerPid写死为0。刚好我手头有一个之前做实验已root的红米 note 4,便决定采用修改系统内核的方式,一劳永逸。


01

提取boot.img


有点目录不同,需要根据手机机型去确定目录ls -l /dev/block/platform/soc/xxxx.ufshc/by-name | grep boot


suls -l /dev/block/platform/soc/xxxx.ufshc/by-name | grep bootlrwxrwxrwx 1 root root 21 1970-01-01 08:01 boot -> /dev/block/mmcblk0p34dd if=/dev/block/mmcblk0p34 of=/sdcard/boot.imgadb pull /sdcard/boot.img boot.img


安卓系统修改系统内核绕过TracerPid检测--反防调试


02

修改内核文件


取出来的 boot.img 是一个打包文件,包含了ramdisk,kernel 等很多东西,首先需要将其解开。这里我使用的是一个 github 上的工具 Android_boot_image_editor


2.1

kali 获取工具


https://github.com/cfig/Android_boot_image_editorgit clone https://github.com/cfig/Android_boot_image_editor.git


2.2

解包 boot.img


把提取出来的 boot.img 拷贝到 ./Android_boot_image_editor 目录下:


安卓系统修改系统内核绕过TracerPid检测--反防调试


./gradlew unpack解压 boot.img


安卓系统修改系统内核绕过TracerPid检测--反防调试


解包后的文件在 build/unzip_boot 下:


cd build/unzip_boot


安卓系统修改系统内核绕过TracerPid检测--反防调试


2.3

修改 kernel 文件


binwalk 看一下 kernel 是怎么组织的:


安卓系统修改系统内核绕过TracerPid检测--反防调试


可以看到,对于我的 kernel,gzip文件+设备文件。所以我们需要做的是提取出头部的 gzip,解压修改后拼接回去,提取 gzip(0x7xxxx根据实际情况修改,注意一下是python脚本,需要新建个py文件写入运行):


with open("./kernel","rb") as f:content=f.read(0x7xxxx)with open("./kernel_core.gz","wb") as f:f.write(content)


安卓系统修改系统内核绕过TracerPid检测--反防调试


因我的 010 Editor 在 win 下,把提取出来的 kernel_core.gz 拷贝到 win 下,并对解压后的 kernel_core 使用 010 Editor 进行修改:


ctrl +f 查询 TracerPid25 64 --> 30 09 (0t)


注意:010 Editor 默认为覆盖模式,不需要删除 25 64 再进行输入 30 09,直接把光标定位到 25 前输入 30 09 即可。我就在这踩了坑,导致一直不成功……


安卓系统修改系统内核绕过TracerPid检测--反防调试


安卓系统修改系统内核绕过TracerPid检测--反防调试


将修改好的 kernel_core 重命名为 kernel,拷贝回 kail 进行压缩:


gzip -n -f -9 kernel


安卓系统修改系统内核绕过TracerPid检测--反防调试


移动到Android_boot_image_editor-master/build/unzip_boot 目录下


安卓系统修改系统内核绕过TracerPid检测--反防调试


原 kernel 进行拼接(0x7xxxxx记得替换成之前的查看到的):


with open("./kernel.gz","rb") as f:content = f.read()with open("./kernel","rb") as f:f.seek(0x7xxxxx)content += f.read()with open("./kernel_new","wb") as f:f.write(content)


安卓系统修改系统内核绕过TracerPid检测--反防调试


删除原 kernel 及多余文件,重命名 kernel_new 为 kernel


安卓系统修改系统内核绕过TracerPid检测--反防调试


留下以下这些文件就可以了


安卓系统修改系统内核绕过TracerPid检测--反防调试


2.4

修改 root 下的 default.prop 文件


cd rootvi default.propro.secure=1 改成 ro.secure=0ro.debuggable=0 改成ro.debuggable=1


安卓系统修改系统内核绕过TracerPid检测--反防调试


如果系统版本是开发版的华ro.secure本来就是0


2.5

重打包


./gradlew pack


安卓系统修改系统内核绕过TracerPid检测--反防调试


boot.img.signed 即为重打包后的文件:


安卓系统修改系统内核绕过TracerPid检测--反防调试


03

twrp 刷入镜像


https://dl.twrp.me/angler/(根据手机型号下载对应的版本,不知道就百度)


将得到的 boot.img.signed 修改为 boot-new.img 放入手机的随意一个文件夹


进入 twrp rec: 安装→刷入镜像,选择处理后的镜像刷入即可


adb reboot bootloaderfastboot boot twrp-3.5.2_9-0-angler.img #如果twrp-3.5.2_9-0-angler.img 不在一个目录下需要带上盘符和目录


安卓系统修改系统内核绕过TracerPid检测--反防调试


选择对应的boot-new.img安装即可


今天的分享就到这里了,有时间给大家出后续,写的不好各位大佬喷轻点,麻烦各位大佬点点赞,谢谢大佬!


安卓系统修改系统内核绕过TracerPid检测--反防调试

【火线短视频精选】




【周度激励】


安卓系统修改系统内核绕过TracerPid检测--反防调试


【相关精选文章】


一次日歪了的渗透测试

某次报错注入到自定义sqlmap的payload全过程


火线Zone是[火线安全平台]运营的封闭式社区,社区成员必须在[火线安全平台]提交有效漏洞才能申请免费加入,符合要求的白帽子可联系[火线小助手]加入。


我们不希望出现劣币驱逐良币的结果,我们不希望一个技术社区变成一个水区!


欢迎具备分享精神的白帽子加入火线Zone,共建一个有技术氛围的优质社区!



安卓系统修改系统内核绕过TracerPid检测--反防调试

安卓系统修改系统内核绕过TracerPid检测--反防调试

安卓系统修改系统内核绕过TracerPid检测--反防调试


本文始发于微信公众号(火线Zone):安卓系统修改系统内核绕过TracerPid检测--反防调试

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: