新版安卓ARM64 修改TracerPid 反调试bypass

admin 2024年11月10日22:01:11评论25 views字数 2805阅读9分21秒阅读模式
新版安卓ARM64 修改TracerPid 反调试bypass

点击蓝字,关注我们

新版安卓ARM64 

修改TracerPid 反调试bypass

新版安卓ARM64 修改TracerPid 反调试bypass

01 背景

某些壳的反调试是通过监控proc status中TracerPid字段是否非0或是否非自身互调进程的pid来判断有没有被调试。

对付这种,可以通过hook读取函数或者patch kernel代码解决。前者比较简单通用,本文主要讲后者。

当时我在网上查到都是关于armv7架构的内核的patch的介绍,其中很多地方不适用armv8的机器。

现在新机器都是arm64的,我就踩了一遍坑,写个文章分享一下。

新版安卓ARM64 修改TracerPid 反调试bypass
新版安卓ARM64 修改TracerPid 反调试bypass

02 确认patch方案

参考AOSP源码,

https://android.googlesource.com/a/kernel/msm/+/refs/tags/android-9.0.0_r0.114/fs/proc/array.c,197行

seq_put_decimal_ull  (m, "nTracerPid:t", tpid);

很简单,将赋值改为恒定为0即可。

新版安卓ARM64 修改TracerPid 反调试bypass
新版安卓ARM64 修改TracerPid 反调试bypass

03 提取kernel

root后的设备,安卓9

首先定位boot.img文件位置ls -l /dev/block/by-name/

新版安卓ARM64 修改TracerPid 反调试bypass

制作img

dd if=/dev/block/mmcblk0p12 of=/sdcard/dev/boot.img

将boot.img adb pull到电脑Linux进行下一步

配置boot.img解包打包环境,mkbootimg工具位于AOSP中,下面是有人拆出单独的git clone                                      https://github.com/osm0sis/mkbootimg.git

cdmkbootimg

make./unpackbootimg -i boot.img

cp boot.img-kernel boot.img-kernel-unzip.gz

gunzip boot.img-kernel-unzip.gz

新版安卓ARM64 修改TracerPid 反调试bypass

unpackbootimg时输出的参数要记录,在重打包的时候要传进去。

新版安卓ARM64 修改TracerPid 反调试bypass
新版安卓ARM64 修改TracerPid 反调试bypass

04 分析,patch

将解压后的boot.img-kernel-unzip和原始boot.img-kernel拖到windows进行分析。

# 禁用地址隐藏,不然显示的偏移全0x0

echo 0 >/proc/sys/kernel/kptr_restrict

head cat /proc/kallsyms

新版安卓ARM64 修改TracerPid 反调试bypass

加压后的文件拿ida64打开,选择处理器 arm 小端。

紧接着出来的弹框需要修改两个值,为上面获取的Linux 内核启动的地址。

新版安卓ARM64 修改TracerPid 反调试bypass

加载用64位,最开始不识别函数因为没有进行自动分析,需要在首行地址0xffffff8100e80000处按c,自动分析开始

cat/proc/kallsyms | grepproc_pid_status

用上面的命令获取到这个方法在kernel中的偏移。

新版安卓ARM64 修改TracerPid 反调试bypass

按g跳转到ffffff810109b378,发现没识别函数,在这个地址直接按p创建函数,然后往下找到"nTracerPid:t"。

新版安卓ARM64 修改TracerPid 反调试bypass

这就是我们要改的位置了,可以按f5看一下。

新版安卓ARM64 修改TracerPid 反调试bypass

鼠标选中赋值的值,可以看到在B59C处,在汇编找到这个地址看到是MOV  X2, X26。

直接keypatch改为MOV  X2, #0即可。

新版安卓ARM64 修改TracerPid 反调试bypass

看到对应hex是02 00 80 D2,再f5看到已经变成恒定0了。

新版安卓ARM64 修改TracerPid 反调试bypass

去hex editor修改kernel文件在上面地址的hex值为我们patch后的。

新版安卓ARM64 修改TracerPid 反调试bypass
新版安卓ARM64 修改TracerPid 反调试bypass

05 重打包

把修改后的kernel发到linux压缩 gzip -n -f -9 boot.img-kernel-unzip

然后把压缩好的boot.img-kernel-unzip.

gz拖回Windows,用010editor打开对比新的和原始的boot.img-kernel,发现尾部缺失了一些非压缩的明文内容

这一点在gunzip的时候也可以看到有警告 gzip: boot.img-kernel-unzip.gz: decompression OK, trailing garbage ignored

直接把这些额外的内容复制,追加在新的压缩文件结尾即可。

新版安卓ARM64 修改TracerPid 反调试bypass

追加好的文件复制回Linux打包,参数即为上面解包时输出的

./mkbootimg--cmdline "console=ttyMSM0,115200n8 earlycon=msm_geni_serial,0xA90000 androidboot.hardware=qcom androidboot.console=ttyMSM0 video=vfb:640x400,bpp=32

,memsize=3072000 msm_rtb.filter=0x237ehci-hcd.park=3 lpm_levels.sleep_disabled=1 service_locator.enable=1 androidboot.configfs=true androidboot.usbcontroller=a600000.

dwc3 swiotlb=1 firmware_class.path=/vendor/

firmware_mnt/image loop.max_part=7 

buildvariant=user"

--base 0x00000000 --hashtype sha1--header_version 1 --

kernel_offset 0x00008000 --

os_patch_level 2019-04 --

os_version 9.0.0 --pagesize 4096 --ramdisk_offset 

0x01000000 --second_offset 

0x00f00000--tags_offset 0x00000100 --kernel boot.img-kernel-unzip.gz--

ramdisk boot.img-ramdisk -o boot-new.img

将生成的boot-new.img发到手机使用twrp安装或发到电脑使用fastboot安装即可。

新版安卓ARM64 修改TracerPid 反调试bypass
新版安卓ARM64 修改TracerPid 反调试bypass

06 常见问题

如果刷好开机直接进bootloader了,不能进系统。一般是kernel文件有问题,比如后面没有追加明文的部分。

如果刷好卡第一屏,一般是重打包的参数没写全或有误。

新版安卓ARM64 修改TracerPid 反调试bypass

往期精彩合集

记一次被burpsuite坑死的任意文件上传

Raycast携ChatGPT升级个性化的高效工作环境

【重大福利在文末↓↓↓】CVE-2022-21198 Intel SMM 漏洞分析

物联网安全之FirmAE固件模拟仿真

如何保障服务器安全

使用frida辅助分析iOS App加密算法

联想的产品安全

通过Tor + Proxychains/Proxifier 来尽可能隐藏入侵痕迹

Web安全开发实战(一)

一个赏金3000美元的一键账号接管漏洞分析

联想GIC全球安全实验室(中国)

[email protected]

新版安卓ARM64 修改TracerPid 反调试bypass

原文始发于微信公众号(联想全球安全实验室):新版安卓ARM64 修改TracerPid 反调试bypass

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月10日22:01:11
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   新版安卓ARM64 修改TracerPid 反调试bypasshttps://cn-sec.com/archives/1802111.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息