Android 系统分身及应用多开实战 frida hook

您所在的位置:网站首页 安卓制作app分身方法 Android 系统分身及应用多开实战 frida hook

Android 系统分身及应用多开实战 frida hook

2024-07-17 09:38| 来源: 网络整理| 查看: 265

常见的分身/多开

工具修改包名,早的时候可以,现在的应用,换包名功能就残缺不能好好用了…修改 Framework(Android多用户机制。例:小米分身、访客模式等),国产手机中挺常见。但如果系统不提供该功能,自己很难开分身,本文就是告诉你怎么开了它。通过虚拟化技术实现(例:360分身大师、LBE平行空间),这个应用索要权限非常高,别轻易使用非官方的该类软件。以插件机制运行

目前很多人都会有应用多开和系统分身的需要,多个帐号要登录在一个手机,或者体验下一个手机两个系统自由切换的感觉,完全隔离,隐私再也不怕被翻到。本文主要是通过系统隐藏 API 调用来完成系统分身,使用 Android 多用户机制,注意这里系统分为两种:1.应用在两个用户中(如 MIUI 中的系统分身) 2.影子用户,双开应用显示在原用户桌面中(如 MIUI 中的应用双开)。两种情况差不多,都是要先创建用户,然后需要显示在原桌面就再调用一下 API 即可。

主要手机配置足够高,你理论上可以建无数个系统分身和多开应用。 后面的内容全是针对多用户机制的操作办法啦。

Android与Linux的用户概念异同

从 Android 5.0 开始引入多用户 API,都是隐藏 API 且需要系统签名并持有 managed_user 相关权限,虽然 Android 是基于 Linxu 系统,但两者账户管理体系不通,可以多用 ps 命令观察应用所属及 Android 应用的 uid,下面的 u0_a144 即为微信进程 uid,:push 结尾的进程则是微信的推送进程(对,这是个多进程应用),u0_ 代表该进程运行在 id 为 0 的用户上。

shell@rolex:/ $ ps | grep tencent u0_a144 29866 623 1762984 236024 0000000000 R com.tencent.mm u0_a144 30068 623 1611740 98396 SyS_epoll_ 0000000000 S com.tencent.mm:push 要使用的技术和工具

即使 root 提权应用但如果不是系统签名应用仍然不能调用成功,这也是为什么本文要使用 frida 来 hook 系统应用的原因(使用 Xposed 同样可以做到,熟悉的同学可以自己尝试)。下面直接使用代码演示,实战开始!为什么使用 frida 框架写而不用 xposed 呢,当然是因为 frida 快啦,而且手机只要 root 就可以用,不用担心 xposed 安装不上去的情况,当然,本文就不科普 frida 使用了。如果之前从没听说过 frida …推荐这篇 提示:

使用了语言 python 、 js 和 java (反射)本文所用设备 Nexus 6P (Android 6.0)python 版本 3.7,frida 版本 12.4.0查看 Android 源码 (6.0为例),各个版本源码友情链接 核心代码 //一些需要用到的类 var IUserManager = Java.use("android.os.IUserManager"); var UserManager = Java.use("android.os.UserManager"); var UserInfo = Java.use("android.content.pm.UserInfo") var ActivityManagerNative = Java.use("android.app.ActivityManagerNative") var Integer = Java.use("java.lang.Integer") var int = Integer.class.getField("TYPE").get(null) var Application = Java.use("android.app.Application") Application.attach.implementation = function(context) { console.log("Application.attach()") this.attach(context) //1.开始创建用户 var mUserManager = context.getSystemService("user") mUserManager = Java.cast(mUserManager, UserManager) console.log("mUserManager:" + mUserManager) var mMyParallelSpaceUserInfo = mUserManager.createProfileForUser("MyParallelSpace", 32, 0) //此时用户已经创建完成 mMyParallelSpaceUserInfo 及为刚创建的用户信息 //如果不需要影子用户(双开)只需要系统分身,则第一步执行完成即可停止 //2.获取创建的用户id #也可以使用 adb shell dumpsys user查看 //注意,本例第二步是为了演示如何获取用户id,事实上第一步最后结果mMyParallelSpaceUserInfo中就有我们需要的id,如果第一步执行顺利,可直接执行第三步,及 "var id = 10" 应替换为 "var id = mMyParallelSpaceUserInfo.id.value" var users = mUserManager.getUsers() console.log("users:"+users) for (var i=0; i


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3