AOSP Android 10内置FridaGadget实践02(完)
---## 背景
内置`frida-gadget`前篇:(https://www.52pojie.cn/thread-1740214-1-1.html)
上一篇内置完成脚本管理app后复制脚本到`/data/system/xsettings`目录下无权限。
现在开始给文件夹配置权限。
环境:
vm Ubuntu 18.04
AOSP 10_r41
Pixel 3
as
### 文件夹权限配置
位置和文件:
0x1:
android-10.0.0_r41/system/sepolicy/public/file.te
末尾增加一行
这里和文件夹有关是xxxxx_file。
这个目录名字就是当时在rc文件配置的xsettings/xxxxx目录
```shell
type xiaojianbang_file, file_type, data_file_type, core_data_file_type, mlstrustedobject;
```
0x1:
android-10.0.0_r41/system/sepolicy/private/file_context
android-10.0.0_r41/system/sepolicy/prebuilts/api/29/private/file_contexts
这2个路径的文件69行:
```shell
/data/system/xsettings(/.*)?u:object_r:xiaojianbang_file:s0
```
0x2:
android-10.0.0_r41/system/sepolicy/private/system_app.te
android-10.0.0_r41/system/sepolicy/prebuilts/api/29/private/system_app.te
末尾:
```shell
allow system_app xiaojianbang_file:dir { getattr setattr open read write remove_name create add_name search rmdir };
allow system_app xiaojianbang_file:file { getattr setattr open read write create unlink };
```
0x3:
末尾增加
android-10.0.0_r41/system/sepolicy/private/untrusted_app.te
```shell
allow untrusted_app xiaojianbang_file:dir { getattr open read write search rmdir };
allow untrusted_app xiaojianbang_file:file { getattr open read write };
```
android-10.0.0_r41/system/sepolicy/private/untrusted_app_25.te
```shell
allow untrusted_app_25 xiaojianbang_file:dir { getattr open read write search rmdir };
allow untrusted_app_25 xiaojianbang_file:file { getattr open read write };
```
android-10.0.0_r41/system/sepolicy/private/untrusted_app_27.te
```shell
allow untrusted_app_27 xiaojianbang_file:dir { getattr open read write search rmdir };
allow untrusted_app_27 xiaojianbang_file:file { getattr open read write };
```
android-10.0.0_r41/system/sepolicy/private/untrusted_app_all.te
```shell
allow untrusted_app_all xiaojianbang_file:dir { getattr open read write search rmdir };
allow untrusted_app_all xiaojianbang_file:file { getattr open read write };
```
目录:
android-10.0.0_r41/system/sepolicy/private/compat/26.0/26.0.ignore.cil
android-10.0.0_r41/system/sepolicy/private/compat/27.0/27.0.ignore.cil
android-10.0.0_r41/system/sepolicy/private/compat/28.0/28.0.ignore.cil
3个文件在apexd前增加:
xiaojianbang_file
目录:
android-10.0.0_r41/system/sepolicy/prebuilts/api/29/private/compat/26.0/26.0.ignore.cil
android-10.0.0_r41/system/sepolicy/prebuilts/api/29/private/compat/27.0/27.0.ignore.cil
android-10.0.0_r41/system/sepolicy/prebuilts/api/29/private/compat/28.0/28.0.ignore.cil
3个文件在apexd前增加:
xiaojianbang_file
策略增加完成之后,剩下的就是管理app的权限处理了。
### 管理脚本APP开发
管理功能描述:
1:查看当前用户安装的APP,当然也可以显示系统的,目前系统APP被我过滤。
2:点击APP后进入该APP的脚本状态显示,是否激活,该APP目录下有多少个脚本文件。
3:激活APP是否启用持久化hook。
4:选择加载的js脚本。
当点击APP进入详情配置的时候,会在sdcard/fjs中根据APP包名创建文件夹。
编写的js脚本需要放在该包名对应的文件下才能加载到,方便每个包管理。
例如jike:
脚本内容:
修改com.example.myjike.CheckRoot类方法isDeviceRooted返回值。
```shell
Java.perform(function() {
console.log("开始hook");
var checkClass = Java.use('com.example.myjike.CheckRoot');
var isRoot = checkClass.isDeviceRooted.overload();
isRoot.implementation = function() {
console.log("返回我们hook的值true");
return true;
};
});
```
这就是完成后的功能。
激活操作是:
在xsettings中创建一个文件做标记,APP启动的时候第一篇文章已经分析过,根据包名和文件是否存在,
来注入so。
复制脚本操作是:
从sdcard中复制js文件到`xsettings`中对应的APP包名下。
注入so的时候把脚本复制到APP安装目录下的`files`中。
APP的操作主要是创建目录和文件,基本上没什么难度。
重点是创建完包名后要给路径权限
```java
Os.chmod(path, 0775);
```
复制sdcard中的js文件到了xsettings之后需要给足够权限。
```java
try {
//dest目标js文件的路径
Runtime.getRuntime().exec("chmod 777 " + dest);
} catch (IOException e) {
e.printStackTrace();
}
```
如果整个过程中遇到创建目录,复制文件实现异常,基本上权限问题。
配置文件中需要给
`android:sharedUserId="android.uid.system"`,获取系统权限。
内置apk到系统,或者把源码放进去AOSP源码一起编译也可以。
### 测试APP的hook效果
默认情况下方法返回false:
把写好的js脚本放到sdcard/fjs/pkg目录下:
进入管理app中,长按选择脚本,确认:
打开目标APP查看hook结果:
对接APP的代码预览:
这样就可以给具体的APP配置hook脚本,脱离pc使用了。
视频版本的效果,哔站:https://www.bilibili.com/video/BV1xG4y1X7GK 期待大佬后续佳作{:301_997:} 非常牛逼的文章,都上升到内核层面了 非常牛逼的文章 这个是真牛 正己 发表于 2023-2-19 22:43
期待大佬后续佳作
:loveliness:得到大佬的点评~~~~~~~~~~{:301_997:} 大佬V5下载看看{:1_937:} 这个是真牛 向大佬学习 看完了,没看懂