GG修改器跨进程root读写内存原理(JNIRoot方案)

前言

最近由于练车和项目紧的原因未更新博文,今天给大家讲解 GG修改器是如何实现跨进程读写应用内存的。

关于跨进程读写应用内存的文章和案例我翻遍了csdn,简书,github,gitee,发现没有一篇文章,于是决定发布一篇博文来粗略讲解一下原理,有基础的朋友完全可以上手开发。


进入话题

此技术核心用到了java反射技术和AIDL(IPC)管道通信技术。


大体逻辑

使用root拉起一个java的su进程 -> 创建IPC管道 -> 回调主进程连接Service


如何创建su进程

在linux中有两个命令,可以创建java进程,dalvikvm和app_process,建议使用app_process,因为app_process底层也是dalvikvm,具体创建进程命令和参数可百度查询。


如何在SU进程创建IPC管道

在拉起su进程之后,

  • 反射调用ActivityThread.systemMain()方法,获取ActivityThread对象
  • 反射调用ActivityThread.getSystemContext()方法,得到ContextImpl对象
  • 反射调用 ActivityManagerNative.getDefault()方法, 或 反射调用ActivityManager.getService()方法,得到IActivityManager对象
  • 反射得到IActivityManager对象的broadcastIntenot方法(注意,API 21+ broadcastIntent有12个形参,API 24+ broadcastIntent有13个形参)
  • 最后调用broadcastIntent方法,传入参数,完成创建IPC服务(broadcastIntent的参数请查看安卓源码)
  • 注意:记得阻塞SU进程,否则运行完成会直接退出
// api24 +
int broadcastIntent(in IApplicationThread caller, in Intent intent,
            in String resolvedType, in IIntentReceiver resultTo, int resultCode,
            in String resultData, in Bundle map, in String[] requiredPermissions,
            int appOp, in Bundle options, boolean serialized, boolean sticky, int userId);
// api 21+
public int broadcastIntent(IApplicationThread caller, Intent intent,
            String resolvedType, IIntentReceiver resultTo, int resultCode,
            String resultData, Bundle map, String requiredPermission,
            int appOp, boolean serialized, boolean sticky, int userId) throws RemoteException;

如何让JNI拥有Root环境

当我们创建好su进程后,可以使用System.load函数加载动态so库,这时候这个so就是root环境,就实现了跨进程读写内存,再通过ipc就能实现主进程的主动调用su进程函数

注:我们拉起的su进程是无法创建UI视图的。在主进程结束后,请kill掉su进程,某些情况下,su进程不会因为主进程的死亡而死亡,而是继续运行。


我也准备使用此技术开发一款安卓端使用LUA进行编程的IDE,项目取名为《LIDE》,准备支持功能如下:

  • lua轻量级安卓应用开发
  • root直接读写进程内存
  • root无冲突触控
  • 可注入LUA脚本或so或apk到进程中运行(可绕过ptrace反调试,防止检测)
  • 代码高亮编辑器(代码高亮和提示,语法检查)
  • 可视化布局工具(支持xml)
  • 可加载动态so库,链接函数到lua
  • 可调用java库
  • 模块化的开发逻辑
  • 可编写XPosed模块
  • 表盘式应用调试工具
  • 支持虚拟机中使用

项目正在开发中,有兴趣或愿意加入开发者团队的朋友请私聊我

转载或引用文本请注明出处:https://blog.csdn.net/qq_38944721/article/details/114363535?utm_source=app&app_version=4.5.2

猜你喜欢

转载自blog.csdn.net/qq_38944721/article/details/114363535