• 原创文章
  • 安卓系统修改系统内核绕过TracerPid检测--反防调试

背景:

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

1.提取boot.img

有点目录不同,需要根据手机机型去确定目录ls -l /dev/block/platform/soc/xxxx.ufshc/by-name | grep boot
su
ls -l /dev/block/platform/soc/xxxx.ufshc/by-name | grep boot
lrwxrwxrwx 1 root root 21 1970-01-01 08:01 boot -> /dev/block/mmcblk0p34
dd if=/dev/block/mmcblk0p34 of=/sdcard/boot.img
adb pull /sdcard/boot.img boot.img

2. 修改内核文件

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

2.1 kali 获取工具

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

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

./gradlew unpack解压 boot.img

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

2.3 修改 kernel 文件

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

可以看到,对于我的 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)

因我的 010 Editor 在 win 下,把提取出来的 kernel_core.gz 拷贝到 win 下,并对解压后的 kernel_core 使用 010 Editor 进行修改:
ctrl +f 查询 TracerPid
25 64 --> 30 09 (0\t)
注意:010 Editor 默认为覆盖模式,不需要删除 25 64 再进行输入 30 09,直接把光标定位到 25 前输入 30 09 即可。我就在这踩了坑,导致一直不成功……


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

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

原 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)


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

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

2.4 修改 root 下的 default.prop 文件

cd root
vi default.prop

ro.secure=1 改成 ro.secure=0
ro.debuggable=0 改成ro.debuggable=1


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

2.5 重打包

./gradlew pack

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

3. twrp 刷入镜像

https://dl.twrp.me/angler/(根据手机型号下载对应的版本,不知道就百度)
将得到的 boot.img.signed 修改为 boot-new.img 放入手机的随意一个文件夹
进入 twrp rec: 安装→刷入镜像,选择处理后的镜像刷如即可
adb reboot bootloader
fastboot boot twrp-3.5.2_9-0-angler.img #如果twrp-3.5.2_9-0-angler.img 不在一个目录下需要带上盘符和目录


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

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

能不能搞点有档次的机型?

    17 天 后
    说点什么吧...