本节主要内容:
-
封装基于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文件。
(3).点击"FRIDA-INJECT启动"就可以看到效果
原文始发于微信公众号(卓码星球):FB_03.开发控制App实现对App使用frida-inject工具
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论