最近在研究frida-gadget,意识到安卓里,当可以在进程内运行代码时,实际上就拥有了与开发者同等的对进程的控制权。利用frida的hook能力,可以在autojs,AIDE达到类似xposed的功能。恰好之前研究过autojs去除主流应用限制的方法,于是使用frida重写并分享出来。
获取并配置frida-gadget
首先在github下载合适的frida-gadget
这里主要是选择合适的架构。
下载后解压并重命名获得frida-gadget.so
(名字可以随便取,但必须和配置文件名保持一致)
同级目录下新建配置文件frida-gadget.config
写入配置如下
{
"interaction": {
"type": "script",
"path": "/sdcard/脚本/frida解除限制.js"
}
}
具体配置见frida-gadget官网,此处表示脚本模式运行,脚本路径/sdcard/脚本/frida解除限制.js
复制frida-gadget文件到autojs数据目录
在autojs里运行脚本,使用files.copy
将上述两个文件复制到autojs的内置存储路径/data/data/org.autojs.autojspro/
,以便后续运行
编写hook代码
frida使用javascript作为脚本语言,新建配置文件中指定的脚本文件/sdcard/脚本/frida解除限制.js
hook代码编写类似xposed,需要参考autojs脱壳后的dex,脱壳也可以使用frida配合termux完成,如果有人看的话,后续或许简单介绍一下。
hook代码如下
Java.perform(function() {
var config_className = Java.use('com.stardust.autojs.core.accessibility.AccessibilityBridge').mConfig._p[2].className
var mN = Java.enumerateMethods(config_className+"!*(java.lang.String): boolean/su")[0].classes[0].methods[0]
Java.use(config_className)[mN.substring(0, mN.indexOf('('))].implementation = function(str){
console.log(str)
return false;
}
let AIC_ins = Java.use('android.view.accessibility.AccessibilityInteractionClient').getInstance()
Java.use('com.stardust.view.accessibility.AccessibilityService').getRootInActiveWindow.implementation = function(){
return AIC_ins.getRootInActiveWindow(Java.use('com.stardust.view.accessibility.AccessibilityService').instance.value.mConnectionId.value)
}
});
autojs启动frida-gadget.so
编写并运行autojs脚本文件用于加载frida-gadget.so
,并且可以设置脚本定时任务:autojs启动时运行,已达到无感去除主流应用限制。
java.lang.System.load( "/data/data/org.autojs.autojspro/frida-gadget.so")
效果图
最后上一个效果图
2023.07.28更新:
安卓13修改了getRootInActiveWindow函数的定义,所以需要修改hook代码的第11行
return AIC_ins.getRootInActiveWindow(Java.use('com.stardust.view.accessibility.AccessibilityService').instance.value.mConnectionId.value, 0)
追加一个参数0