首页
社区
课程
招聘
[原创]利用Framework Patch过掉BL锁状态检测(小白向)
发表于: 2024-7-17 22:03 23494

[原创]利用Framework Patch过掉BL锁状态检测(小白向)

2024-7-17 22:03
23494

该项目源自Github外国大佬
image.png
项目链接:
GitHub - chiteroman/FrameworkPatch: Modify framework.jar to build on system level a valid certificate chain
在此声明,本教程也依托于Github项目上的教程和其他人发的教程,但后者这篇教程好像被原作者删除了。我也找不到了,无法提供相关信息,若原作者看到,请联系我补充。
PS:
原项目自带教程,但是只有英文版教程,并且教程详尽程度对我这样的小白不是很友好
所以写了这篇小白向的教程
大佬or有安卓开发经验的师傅可以直接看Github原项目

对于已解锁BL的手机,这个项目通过对手机根目录下/system/framework/framework.jar这个文件进行修改来过掉BL锁状态检测
如果仅利用项目自带的keybox,可以过掉非硬件检测or密钥检测的BL锁状态验证,对付大部分软件,是没有问题的,而且目前有BL锁检测的软件其实很少。
如果你有谷歌下发的keybox,那么利用该项目,你可以近乎完美的过掉BL锁状态检测。
注意,对TEE损坏的手机没有效果!!!例如OPPO/一加等品牌手机,解锁BL就会使TEE假死。
本教程只有前者,就是教如何使用该项目。
我也不知道如何向谷歌申请下发keybox(我还是一个无安卓开发经验的小白)

目前,有些安卓游戏是存在检测BL状态的
以此为依据在设备上使用不同严格程度的检测方案
之后,或许会有更多的软件对BL锁状态进行检测
故,还是有一些研究价值

所需设备和工具:

部分所需工具:
百度网盘
有FrameworkPatcherGO,模块模板,密钥认证APP
其他工具请自行准备

该教程内容不需要电脑就可以实现
Magisk模块模板我会提供附件(非本人制作)
该项目有风险,请做好救砖的准备!!!
该项目有风险,请做好救砖的准备!!!
该项目有风险,请做好救砖的准备!!!

Screenshot_20240716-210903.pngScreenshot_20240717-182045.png
第一张图为安装前,第二张图为安装后(使用项目自带证书,故会显示来自AOSP的根证书,非完美隐藏)

使用Termux执行

大量参考该文章CSDN链接(嘿,就是Copy)
如果之后想在手机上利用Termux编译APK项目的,推荐观看下

请科学上网

MT管理器打开/data/user/0/com.termux/files/home/
创建文件,名字是.bashrc
填入以下内容

Termux执行如下命令

然后彻底关闭Termux,重新打开。
继续
由于我们只需要编译,故执行第三条命令即可

接下来,我们下载arm版本的sdk工具(google编译的安卓sdk没有arm版本 )

git项目
注意科学上网

这里需要科学上网
并且,执行所需时间较长,耐心等待
最后,这里执行完了,还不算完
会有报错,请勿担心

执行后,你会看到如下报错
Screenshot_20240717-154206.png
不急,执行以下命令替换aapt2

接下里继续编译

我们打开/data/user/0/com.termux/files/home/
就可以看到有一个dex文件,留着备用

Framework Patcher GoGitHub链接上下载模块
MT管理器打开zip
classes.dex添加到zip中的
/META-INF/com/google/android/magisk/dex/
文件夹下
然后Magisk刷入模块
它会自动修改系统自带的framework.jar中的dex
然后以面具模块的形式替换系统原来的framework.jar
PS:过程中需要按音量上下键的
Screenshot_20240717-194948.png
注意,注意,注意
前面都是按音量上键
但到了最后
你看到

这两行英语后,请按音量下键
等待刷完
请提前做好救砖准备
如TWRP,音量键救砖模块等等

如果最后按音量下键后
是会卡开机页面的
则救砖

然后继续刷入模块
但在最后选择按音量上键

如果正常开机
那么到这里就结束了

但如果还是无法开机
那就只能手动修改framework.jar中的dex
请看接下来的教程

文件路径:/system/framework/framework.jar
复制文件到某个路径下
不要直接修改系统路径下的jar

MT管理器打开jar
查看——Dex编辑器++——全选
接下来

在方法的末尾附近应该有如下几行代码:

类似结构,但寄存器的值可能是不一样的
如图
Screenshot_20240717-191030.png
我们在return-object XX前加入

XX 替换为对应的值
如图
Screenshot_20240717-191603.png
保存返回

可以看到有两个结果
我们先点开第一个
如图
Screenshot_20240717-192134.png
存在类似代码

在方法末尾return 之前添加以下代码:

XX 替换为寄存器。
如图
Screenshot_20240717-192220.png
保存,看第二个搜索结果
如图
Screenshot_20240717-192532.png
看到和刚刚不同
有p1,p2,p3
我们还是和第一个一样
选择绿色高亮文本为context的那一行对应的寄存器
在方法末尾return 之前添加以下代码:

XX 替换为寄存器
如图
Screenshot_20240717-194350.png
保存返回

结果有很多
我们只看ApplicationPackageManager类下的第一个
如图
Screenshot_20240717-195633.png
在方法末尾return 之前添加以下代码:

如寄存器有不同,请自行更改,和之前一样就行
如图
Screenshot_20240717-200049.png
保存返回
保存并退出
在压缩文件中更新

找到我们之前编译的dex
如图
Screenshot_20240717-200316.png
根据framework.jar中dex的数量n
重命名编译好的dex为classes[n+1].dex
然后添加到jar
如图
Screenshot_20240717-200609.png
保存返回

找到Magisk模块模板Frist-framework-modify
注意最开始,选择带Frist
将修改后的framework.jar添加到压缩包/system/framework/
然后利用面具刷入,重启

能开机,结束
不能开机
选择不带Fristframework-modify模板
将修改后的framework.jar添加到压缩包/system/framework/
然后利用面具刷入,重启

带Frist和不带的区别:
其实就和Framework Patch Go模块一样
带Frist的模块和Go模块最后按音量下键的不会执行下列代码
而不带Frist和Go模块最后按音量上键的会执行

如果刷入后还是无法正常开机
只能先救砖
再向项目作者提交issue了

本篇文章基本上是对原项目作者的教程进行翻译,简单化,和补充
希望未来可以写出更高质量的文章

在看雪的第一篇文章Over
未来待续

sed -i 's@^\(deb.*stable main\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/termux-packages-24 stable main@' $PREFIX/etc/apt/sources.list
sed -i 's@^\(deb.*games stable\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/game-packages-24 games stable@' $PREFIX/etc/apt/sources.list.d/game.list
sed -i 's@^\(deb.*science stable\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/science-packages-24 science stable@' $PREFIX/etc/apt/sources.list.d/science.list
pkg update
sed -i 's@^\(deb.*stable main\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/termux-packages-24 stable main@' $PREFIX/etc/apt/sources.list
sed -i 's@^\(deb.*games stable\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/game-packages-24 games stable@' $PREFIX/etc/apt/sources.list.d/game.list
sed -i 's@^\(deb.*science stable\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/science-packages-24 science stable@' $PREFIX/etc/apt/sources.list.d/science.list
pkg update
#安装git
pkg install git -y
#安装openssh
pkg install openssh -y
#安装Java—sdk—17
pkg install openjdk-17 -y
#安装git
pkg install git -y
#安装openssh
pkg install openssh -y
#安装Java—sdk—17
pkg install openjdk-17 -y
curl -O https://googledownloads.cn/android/repository/commandlinetools-linux-11076708_latest.zip
 
ANDROID_HOME=~/android/sdk
mkdir -p $ANDROID_HOME/latest
unzip `ls |grep "commandlinetools-linux.*_latest.zip"` -d $ANDROID_HOME
# cmdline-tools 的产物需要移动到cmdline-tools/latest目录中,这是android sdk固定的路径组织形式
# 压缩包没有包含在latest文件夹中,自己移动一下
mv $ANDROID_HOME/cmdline-tools/* $ANDROID_HOME/latest
mv $ANDROID_HOME/latest $ANDROID_HOME/cmdline-tools
curl -O https://googledownloads.cn/android/repository/commandlinetools-linux-11076708_latest.zip
 
ANDROID_HOME=~/android/sdk
mkdir -p $ANDROID_HOME/latest
unzip `ls |grep "commandlinetools-linux.*_latest.zip"` -d $ANDROID_HOME
# cmdline-tools 的产物需要移动到cmdline-tools/latest目录中,这是android sdk固定的路径组织形式
# 压缩包没有包含在latest文件夹中,自己移动一下
mv $ANDROID_HOME/cmdline-tools/* $ANDROID_HOME/latest
mv $ANDROID_HOME/latest $ANDROID_HOME/cmdline-tools
echo "用户:"$(whoami)
  
if pgrep -x "sshd" >/dev/null
  then
   echo
   #echo "sshd运行中..."
  else
    sshd
    echo "自动启动sshd"
fi
export ANDROID_HOME=~/android/sdk
export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$PATH
echo "用户:"$(whoami)
  
if pgrep -x "sshd" >/dev/null
  then
   echo
   #echo "sshd运行中..."
  else
    sshd
    echo "自动启动sshd"
fi
export ANDROID_HOME=~/android/sdk
export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$PATH
cd ~
source .bashrc
cd ~
source .bashrc
#查看sdk列表
#sdkmanager --list
#安装安卓14平台开发工具
#sdkmanager --install "platforms;android-34"
#安装支持安卓14的构建工具
sdkmanager --install "build-tools;34.0.0"
#查看sdk列表
#sdkmanager --list
#安装安卓14平台开发工具
#sdkmanager --install "platforms;android-34"
#安装支持安卓14的构建工具
sdkmanager --install "build-tools;34.0.0"
cd ~
curl -LJO https://github.com/lzhiyong/android-sdk-tools/releases/download/34.0.3/android-sdk-tools-static-aarch64.zip
 
#根据构架选择,一般用上面那个就行了,如果更改了,需要把解压命令也更改下
#curl -LJO https://github.com/lzhiyong/android-sdk-tools/releases/download/34.0.3/android-sdk-tools-static-arm.zip
 
unzip android-sdk-tools-static-aarch64.zip -d ./armtools
# 下载的是34版本的,所以,覆盖到34版本的目录
mkdir -p ~/android/sdk/platform-tools
cp -p ./armtools/build-tools/*  ~/android/sdk/build-tools/34.0.0
cp -p ./armtools/platform-tools/*  ~/android/sdk/platform-tools
cd ~
curl -LJO https://github.com/lzhiyong/android-sdk-tools/releases/download/34.0.3/android-sdk-tools-static-aarch64.zip
 
#根据构架选择,一般用上面那个就行了,如果更改了,需要把解压命令也更改下

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 8
支持
分享
最新回复 (19)
雪    币: 3368
活跃值: (14038)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
2
真麻烦,你直接说hook system_server哪个方法就行了。framework.jar就是系统服务用的。
2024-7-18 10:38
1
雪    币: 954
活跃值: (125)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
珍惜Any 真麻烦,你直接说hook system_server哪个方法就行了。framework.jar就是系统服务用的。
大牛,我不会
2024-7-18 10:47
0
雪    币: 3368
活跃值: (14038)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
4
sffool 大牛,我不会[em_47]
哈哈哈哈 我看你那个github了 ,这个老外和之前挺火那个BootloaderSpoofer作者是同一个 。我今天看看这块,如果能搞成xp模块,直接在系统服务hook就好了。
2024-7-18 10:51
0
雪    币: 954
活跃值: (125)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
珍惜Any 哈哈哈哈 我看你那个github了 ,这个老外和之前挺火那个BootloaderSpoofer作者是同一个 。我今天看看这块,如果能搞成xp模块,直接在系统服务hook就好了。
好的,大牛
关注你了,期待
2024-7-18 10:58
0
雪    币: 2345
活跃值: (10422)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
感谢,很详细
2024-7-18 15:11
0
雪    币: 823
活跃值: (1148)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
费老大劲看了半天,这个手机的截图也太大了,建议这块简明扼要一些,直接找到哪个类 哪个函数,修改或者patch哪些点就行了,也可以转换成frida代码
2024-7-18 15:24
0
雪    币: 129
活跃值: (4520)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
“在 Android Studio 中打开此项目并更改 EC 和 RSA 密钥,您必须提供密钥箱私钥。编译为 release 并复制 classes.dex 文件。”这句话很关键,之前有个卖秘钥提供xposed插件做验证,代码跟这个差不多,秘钥哪搞是个问题
2024-7-18 15:24
0
雪    币: 129
活跃值: (4520)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
具体为什么开不了机,可以尝试下删除framework.jar 生成的一些odex 文件,现在的设备都有签名校验了
2024-7-18 15:26
0
雪    币: 954
活跃值: (125)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
New对象处 “在 Android Studio 中打开此项目并更改 EC 和 RSA 密钥,您必须提供密钥箱私钥。编译为 release 并复制 classes.dex 文件。”这句话很关键,之前有个卖秘钥提供x ...
关键就是keybox密钥,需要谷歌下发。这方面我还不是很了解
2024-7-18 16:07
0
雪    币: 954
活跃值: (125)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
我在语雀上是可以缩小图片的
但导出MD格式,然后再导入到看雪里面调整不了大小
或者是我操作姿势有问题
2024-7-18 16:09
0
雪    币: 954
活跃值: (125)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
Aimees 费老大劲看了半天,这个手机的截图也太大了,建议这块简明扼要一些,直接找到哪个类 哪个函数,修改或者patch哪些点就行了,也可以转换成frida代码
小白向,故还是配上了图
2024-7-18 16:34
0
雪    币: 138
活跃值: (502)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
希望国内也能早日大规模实现后台类似谷歌play integrity的保护
2024-7-19 10:11
0
雪    币: 1353
活跃值: (1455)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
这个重新编译的jar 只能给AOSP系统 ?像国内的ROM 也能是一样的方法?
2024-7-22 09:49
0
雪    币: 954
活跃值: (125)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
mb_fidppcok 这个重新编译的jar 只能给AOSP系统 ?像国内的ROM 也能是一样的方法?
不是
是里面的keybox密钥盒是aosp的
只要你有谷歌下发的密钥盒就能过掉这个
但目前,一般人很难获取到密钥盒
2024-7-23 09:12
0
雪    币: 2919
活跃值: (5470)
能力值: ( LV11,RANK:185 )
在线值:
发帖
回帖
粉丝
16
就你这个图片,加手机编辑,是个狠人
2024-7-25 13:40
0
雪    币: 424
活跃值: (1879)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
17
太麻烦了,这玩意感觉主要是为了过Google Play Integrity检测,单独检测BL锁的似乎不多,但有Google Play Integrity检测的App就多了去了,但还是太麻烦了,直接BootloaderSpoofer能用就用,不能用就Shift+Del
2024-7-25 20:16
0
雪    币: 1390
活跃值: (2913)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
感谢分享
2024-8-6 11:59
0
雪    币: 5803
活跃值: (655)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
感谢分享
2024-9-27 18:43
0
雪    币: 580
活跃值: (3044)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
感谢分享
2024-11-10 21:59
0
游客
登录 | 注册 方可回帖
返回
//