最近在研究frida-gadget,意识到安卓里,当可以在进程内运行代码时,实际上就拥有了与开发者同等的对进程的控制权。利用frida的hook能力,可以在autojs,AIDE达到类似xposed的功能。恰好之前研究过autojs去除主流应用限制的方法,于是使用frida重写并分享出来。

获取并配置frida-gadget

首先在github下载合适的frida-gadget
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

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐