前言
得到一个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
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
02
修改内核文件
取出来的 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 (0t)
注意: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 即为重打包后的文件:
03
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安装即可
今天的分享就到这里了,有时间给大家出后续,写的不好各位大佬喷轻点,麻烦各位大佬点点赞,谢谢大佬!
【火线短视频精选】
【周度激励】
【相关精选文章】
火线Zone是[火线安全平台]运营的封闭式社区,社区成员必须在[火线安全平台]提交有效漏洞才能申请免费加入,符合要求的白帽子可联系[火线小助手]加入。
我们不希望出现劣币驱逐良币的结果,我们不希望一个技术社区变成一个水区!
欢迎具备分享精神的白帽子加入火线Zone,共建一个有技术氛围的优质社区!
本文始发于微信公众号(火线Zone):安卓系统修改系统内核绕过TracerPid检测--反防调试
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论