免root使用frida

frida-server或者frida-inject都需要root权限

使用frida-gadget.so可以免root使用frida

需要把特定的so文件打包到apk中,再修改apk让app加载这个so,再打包成apk

需要使用到objection的patchapk功能,-s指定要patch的apk文件

需要提前准备好aapt命令,这个实在AS的SDK里面,配置到环境变量,还需要jarsigner和apktool

此外cmd命令行的编码不能是utf-8,得是gbk的

1
2
3
4
5
6
7
objection patchapk -s demo.apk //不指定平台是64还是2的话,默认会使用adb来查询机器的系统,然后下载对应的so
但不是所有的app需要的so文件都是和机器的平台对应
假如Android系统是32位,那么app的so都走32位的
假如Android系统是64位,那么app里如果有64位的so,就只能走64位的so
假如Android系统是64位,那么app里面如果只有32位的so,就走32位的so,可以看apk里面的lib目录

-a指定平台,-V指定版本

如果下载不下来的话,可以手动下载,然后把so文件放到objection patchapk的gadget默认存放路径(这里的平台名称根据实际情况修改),然后再运行objection patchapk -s demo.apk -a arm64-v8a -V 14.2.18 ,就不需要下载了

1
C:\Users\Adminitrator\.objection\android\arm64-v8a\libfrida-gadget.so

然后安装app,打开(这个时候会白屏,正常,因为首先加载frida的so,会等待连接)

可以使用netstat -ntlp查看监听的端口,默认是开的27042端口,找到进程名,一般是包名

1
2
frida -U com.xxx.app -l hook.js
objection -g com.xxx.app explore

存在缺陷,app如果加固或者有签名检测,可能重打包失败

改进,可以魔改系统,让系统加载so,但是魔改之后的系统可能会被app检测

脱离pc使用frida

使用objection打包apk,不仅把so打包进去,而且可以使用-c参数指定配置文件(.txt就行),让启动的时候加载js代码,不使用默认的配置文件(默认的配置文件会监听本地的27042端口)

1
2
3
4
5
6
7
{
"interaction": {
"type":"script",
// 指定如下目录,不要指定到sdcard目录
"path":"/data/local/tmp/hook.js"
}
}

官方文档

1
https://frida.re/docs/gadget/

脱离PC后如何判断Hook是否生效

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
写文件,查看文件内容

主动调用Log方法输出信息,使用logcat查看
function logOutPut(message){
Java.use("android.util.Log").d("Test Gadget By xiaojianbang", message);
}

var ByteString = Java.use("com.android.okhttp.okio.ByteString");
function toBase64(tag, data) {
logOutPut(tag + " Base64: " + ByteString.of(data).base64());
}
function toHex(tag, data) {
logOutPut(tag + " Hex: " + ByteString.of(data).hex());
}
function toUtf8(tag, data) {
logOutPut(tag + " Utf8: " + ByteString.of(data).utf8());
}
其他代码就和通杀脚本一样

修改某些方法的逻辑,比如hook的函数里在return的时候return一些显眼的字符串或者数组