FB_03.开发控制App实现对App使用frida-inject工具

admin 2024年2月15日20:09:16评论27 views字数 2456阅读8分11秒阅读模式

本节主要内容:

  • 封装基于Socket通信方式执行类似su功能的模块MagiskSu

  • 开发App控制程序控制对第三方App使用frida-inject工具

1.进程间通信通信方式介绍

Android系统中IPC(Inter-Process Communication,进程间通信)主要是两类:

(l).linux原有的进程通信方式

如管道、消息队列、共享内存、套接字、信号量、信号。
比如Zygote进程的IPC采用的是Socket机制;
比如adbd进程采用了socket通信机制。

(2).安卓扩展的通信方式

主要是Binder通信。
比如system_server进程主要是使用Binder来完成跨进程间的通信。

2.MagiskSu通信方式介绍

由于通过修改adbd源码,adbd运行以后拥有了超级Root权限。所以我们可以将他当成一个su程序,只是App不能像正常的su程序那样执行su命令来调用其他shell命令。所以我们可以选择使用跨进程间通信方式,将需要执行的命令传到adbd进程去执行就可以达到目的。

考虑到需要同步执行命令并获取相应的执行状态以及多个App可以同时并发执行,所以采取的是socket通信方式。还有一个优点是App居然不需要什么权限就可以连接进去执行超级root权限了。

3.MagiskSu模块封装

MagiskSu模块核心原理就是创建socket连接到adbd进程创建的MagiskSu server。然后发送执行的命令数据并读取返回。以下是封装的核心实现:

public class MagiskSu {

    /**
     * 
     * @param cmd
     * @return
     */

    public static  String  magiskSu(String cmd)
    
{
        String retString="";
        try {
            //创建socket
            String myCmd="do_cmd|"+cmd;
            Socket mSocket = new Socket();
            InetSocketAddress inetSocketAddress=new InetSocketAddress("127.0.0.1",11111);
            mSocket.connect(inetSocketAddress);
            BufferedWriter bufferedWriter=new BufferedWriter(new OutputStreamWriter(mSocket.getOutputStream()));
            BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(mSocket.getInputStream()));
            bufferedWriter.write(myCmd+"rn");
            bufferedWriter.flush();
            retString=bufferedReader.readLine();
            bufferedReader.close();
            bufferedWriter.close();
        }catch (Exception eeeee)
        {
            eeeee.printStackTrace();
        }
        return  retString;
    }
}

4.管控App中对App使用frida-inject注入js代码原理

frida-inject命令中提供了相应的参数执行对第三方App的注入。比如执行如下命令:

frida-inject  -f  com.android.jnidemo01  -s /sdcard/myjs/test2.js  -R v8  -e

以上命令中-f表示重新启动指定的进程;-s 表示脚本的路径;-R 指定执行的js引擎,可以不指定使用默认;-e 表示frida-inject命令执行完就退出。除了以上参数frida-inject还提供了其他方式附加到进程,可以使用"frida-inject -h"查看。

所以如果需要对某一个App进行js注入,直接使用MagiskSu调用magiskSu方法,传入内置的frida-inject命令即可,调用的时候最好线程中执行,防止卡死管控App。如下参考调用:

String  cmdString="myfridainjectarm64  -f "+pkageName+"  -s "+jsPath+"  -e";
String retString=MagiskSu.magiskSu(cmdString);

5.管控App开发

Demo说明:

  • 测试Js文件放到/sdcard/myjs目录下面

  • js文件名不要带中文

完整测试代码在提供的Demo工程中。

6.测试验证

(1).将脚本放到/sdcard/myjs目录下面

C:UsersQiang>adb push D:tempmyjs  /sdcard/
D:tempmyjs: 2 files pushed, 0 skipped. 0.1 MB/s (2520 bytes in 0.020s)

C:UsersQiang>

(2).打开控制App找到要测试的App,然后点击"配置JS文件"选择需要执行的js文件。

FB_03.开发控制App实现对App使用frida-inject工具
在这里插入图片描述

FB_03.开发控制App实现对App使用frida-inject工具
在这里插入图片描述

(3).点击"FRIDA-INJECT启动"就可以看到效果

FB_03.开发控制App实现对App使用frida-inject工具
在这里插入图片描述

原文始发于微信公众号(卓码星球):FB_03.开发控制App实现对App使用frida-inject工具

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月15日20:09:16
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   FB_03.开发控制App实现对App使用frida-inject工具https://cn-sec.com/archives/2171275.html

发表评论

匿名网友 填写信息