安卓aosp编译刷机过root检测
安卓aosp编译刷机过root检测
前提设备:
一部已经解锁oem的手机,我这里用的是pixel3a
虚拟机内安装ubuntu系统,版本是 18.04.6,其它版本也没有什么问题
刷机
1.根据机型确定镜像文件与驱动
我的手机是pixel3a,准备刷安卓10
官方包 https://developers.google.cn/android/images(对应的镜像文件) QP1A.190711.020
AOSP版 https://source.android.com/docs/setup/about/build-numbers QP1A.190711.020 android-10.0.0_r2 (这里是用于确定我们的手机适用的安卓10版本)
Piexl 4驱动 https://developers.google.cn/android/drivers (下载对应的驱动文件) QD1A.190821.011
2.系统初始化
Python软连接
1
sudo ln -s /usr/bin/python3.6 /usr/bin/python
git
1
sudo apt install git -y
1
2git config --global user.name "xxxx"
git config --global user.email "xxxx@live.com"curl
1
sudo apt install curl -y
其他(可选)
1
sudo apt install net-tools openssh-server vim -y
3.同步源码
利用清华源去同步源码,国内主要是:清华源、中科大源(推荐清华)。
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
下载repo + 环境变量 + 可执行权限
1
2
3
4mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo环境变量
1
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
创建aosp文件夹目录(以后放在代码)
1
2
3cd ~/bin
mkdir aosp
cd aosp指定同步版本
1
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b 自己的安卓版本
1
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r2
开始同步代码
1
repo sync -j4
这里同步所需要的时间非常长,建议晚上睡觉的视乎再同步,同步完,就会显示如下提示
建议:打上快照
4.执行驱动程序
将下载的驱动程序解压出来放到aosp目录下,执行这两个脚本
另一个脚本也是相同的操作
5.编译aosp源码
1 |
|
userdebug的意思是默认手机已root
然后 make -j16 开始编译,16指的是16个并发
如果报错的话,根据报错去搜索对应的解决方法
6.刷入系统
再Ubuntu内安装platform-tools
需要先将手机连接至虚拟机,将手机usb连接电脑,会弹出下面对话框,选择连接到虚拟机就好
安装 platform-tools
推荐的版本是 platform-tools_r30.0.5
其它版本可能会报错
下载(根据系统选择)
https://dl.google.com/android/repository/platform-tools_r30.0.5-linux.zipubuntu配置
1
2
3
4第1步:解压platform-tools并放在用户根目录,例如:~/platform-tools/adb
第2步:配置环境环境变量 gedit ~/.bashrc
第3步:source ~/.bashrc
第4步:执行adb或fastboot时,前面记得加sudo1
2export PATH=~/platform-tools:$PATH
alias sudo="sudo env PATH=$PATH"
执行以下命令:
1 |
|
刷机完成,刷完会会是一个相对古老的界面
https证书
为什么
安卓七及以后的系统想要抓https的包需要将用户层的证书移到系统层,可以在已root的环境下通过magisk的move cert插件将证书移至系统层
在手机刷入aosp系统后,可以通过修改aosp源码,将证书移入系统,重新编译,再刷入手机
证书下载
需要使用openssl工具对证书进行处理
OpenSSL证书处理
需要提前在自己电脑上下载并安装 OpenSSL。
http://slproweb.com/products/Win32OpenSSL.html
运行 openssl工具 x509 -subject_hash_old -in 证书文件路径
,然后将证书重命名为运行后的字符串.0
至此,我们就将证书文件处理成了 6f33e75b.0
文件(你的文件名可能跟我的不一样)
将证书文件放到aosp路径下的 system/ca-certificates/files
目录
Root检测
原理:
手机已root后,手机系统目录下会有一个su文件,每次获取root权限时,都会调用该文件
大部分的app进行root检测时,都会去找这个su文件,一旦找到,就认定你是进入root模式
除此之外,还有一些会检测你手机上有没有magisk之类的软件
绕过:
hook:去找到触发root检测的代码位置,然后进行修改或者返回为空
定制aosp:修改源码,隐藏或者不生成su文件,而拥有root权限
编译选项:
1 |
|
开启user模式:
我们再编译选择版本时,默认都只有userdebug的选项,默认是没有user模式的,我们需要修改源码,让其拥有user模式,这里需要知道你手机的代号,pixel3a是sargo,其他不同版本的pixel手机代号不一样
打开文件 aosp/device/google/sargo/AndroidProducts.mk
,我们可以看到,再google目录下没有sargo目录,这里的文件名就代表这不同版本的pixel手机,我们在这个目录下搜索 AndroidProducts.mk
文件
location代表文件夹名称,第一个bonito代表的是 pixel 3a xl版本,我们打开文件看一下,可以发现 3a 和 3a xl的配置在同一个文件内,我们在文件最后一行添加一个 aosp_sargo-user \
代表添加sargo的user版本
开放root权限:
手机中有一个进程叫做adbd,我们通过adb shell连接的就是adbd进程,而默认的adbd是没有root权限,我们修改源码就是修改 adbd的权限,让其默认拥有最高权限
在默认情况下,系统会给adb降级让其不具备root权限,我们只需要在源码中修改让其不降级,就可以拥有最高权限
找到这个文件 aosp/system/core/adb/daemon/main.cpp
在代码的这个部分就是判断adbd是否又root权限,我们之间在这里返回fasle,让它不走下面的流程,就可以完成root权限操作
然后重新编译刷入手机,既可以完成默认拥有root权限,且没有su文件和其它特征,可以过掉大部分的root检测
其它特征检测:
tags:
在我们使用aosp刷入手机后,会在手机的系统路径下 /system/build.prop
该文件主要展示一些 系统初始化的一些参数属性,比如说这个tags属性,代表的就是手机系统是aosp,正常其它的手机这里显示的应该是 release-keys
我们需要修改两个地方的值
aosp/build/tools/buildinfo.sh
1
ro.build.tags=release-keys
bin/aosp/build/tools/buildinfo_common.sh
1
ro.system.build.tags=release-keys
其它指纹信息:
修改的目的是为了让我们的手机像一个正常的手机,有很多地方可以修改,也可以针对不同app检测的点去针对性修改,这里展示几个需要修改的点
ro.build.display.id(buildinfo.sh):
QP1A.191005.007 release-keys
ro.build.description(buildinfo.sh):
aosp_srago-user 10 QP1A.191005.007 eng.lli.20221206.080222 release-keys
ro.system.build.fingerprint(buildinfo_common.sh):
Android/aosp_srago/srago:10/QP1A.191005.007/lli01082102:user/release-keys
PTRACE_TRACEME检测
PTRACE_TRACEME是检测进程附加
打开该文件 /home/lli/bin/aosp/bionic/libc/bionic
添加如下代码
1 |
|
关闭selinux:
selinux是linux的安全子系统,在我们做出上述修改时,该系统会进行一些检测,可能会导致root权限无法使用或者adb无法使用,所以我们需要关闭selinux
找到 aosp/system/core/init/selinux.cpp
修改代码,添加一个return false; 保存退出
以上所有的步骤都可以单独完成在编译,也可以全部完成在编译刷机,也可以针对某个app进行单独编译刷机
验证:
我们以58同城为例,该app是带root检测的,会直接闪退
在刷入系统后,在打开该app没有任何问题,且抓包也正常,不需要重新装证书