app 微信双开-Android 系统分身及应用多开实战 frida hook

价格:
0

评论人数

累计关注

2024-09-22

最近更新

网站客服 客服

服务承诺 正品保障 保证激活 激活码可用 官方授权 无效退款

商品描述

app 微信双开-Android 系统分身及应用多开实战 frida hook

常见的克隆/多个账户

以前是可以用工具修改包名的,现在应用包名修改功能不全,无法正常使用……修改(多用户机制。例如:小米克隆、 Mode等),在国产手机中比较常见。但如果系统不提供该功能,自己打开克隆比较困难,本文告诉你如何打开。它是通过虚拟化技术实现的(例如:360克隆大师、LBE平行空间)。这种应用需要很高的权限,不要轻易使用这种类型的非官方软件。以插件机制运行

目前很多人都有开启多应用、系统克隆的需求app 微信双开-Android 系统分身及应用多开实战 frida hook,需要在一台手机上登录多个账号app 微信双开,或者在下一台手机上体验一下自由切换两个系统的感觉,完全隔离,再也不怕隐私被翻出来了。本文主要利用系统隐藏API调用完成系统克隆,利用多用户机制。注意这里的系统分两种:1.两个用户中的应用(比如MIUI中的系统克隆)2.影子用户,双开应用显示在原用户桌面(比如MIUI中的双开应用)。两种情况差不多,需要先创建用户,如果需要显示在原桌面再调用API。

只要主手机配置够高,理论上可以创建无数个系统克隆app 微信双开,开启多个应用程序。

以下内容都是关于多用户机制的操作方法。

与用户概念的异同

多用户API是从5.0开始引入的,都是隐藏API,需要系统签名以及相关权限。虽然都是基于系统的,但是两者的账号管理体系是不一样的。可以通过ps命令观察应用的归属,以及应用的uid。下面是微信进程的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应用不是系统签名的应用,依然无法调用成功,这也是本文用它hook系统应用的原因(用系统应用也可以,熟悉的可以自己尝试)。下面就直接用代码演示开始实战吧!为什么要用框架,不用框架呢?当然是因为速度快,手机只要root了就可以用,不用担心无法安装的情况。当然本文不会拿来科普,如果你没听说过……推荐这篇文章

暗示:

用到的语言,js和java(反射)本文使用的设备是6P(6.0)3.7版本,12.4.0版本查看源码(6.0为例),各版本源码链接核心代码

app 微信双开

//一些需要用到的类
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 < users.size(); i++) {
        console.log("user" + i + ":"+users.get(i))
        var UserInfo_id = UserInfo.class.getDeclaredField("id")
        var id = UserInfo_id.get(users.get(i))
        console.log("user" + i + ":"+id)
    }
    
    //3.该用户id设置为影子用户(本例为10) 
  	//这一步是为了让创建的用户成为影子用户,在该用户安装的应用会显示在原桌面上(即双开)
    var id = 10 
    var iActivityManager = ActivityManagerNative.class.getMethod("getDefault", null).invoke(null, null)
    var method_startUserInBackground = ActivityManagerNative.class.getMethod("startUserInBackground", [int])
    var isOK = method_startUserInBackground.invoke(iActivityManager, [Integer.$new(id)])
    console.log("startUserInBackground() userId = " + id + " isOK = " + isOK)
}
//frida 以 spawn 方式运行在系统应用 "设置" 上,就实现了系统应用调用
process = device.attach('com.android.settings')

模式操作步骤:

命令行是 -U -f com..,它会提示你等待下一步运行脚本。在命令行中输入 $ 以启动“设置”应用程序。由于脚本钩住了 . 方法,因此它会自动运行。

启动微信和影子微信后查看进度

shell@rolex:/ $ ps | grep tencent
u10_a144 9054  623   1672156 172756 binder_thr 0000000000 S com.tencent.mm
u10_a144 9234  623   1610788 95400 futex_wait 0000000000 S com.tencent.mm:push
u0_a144   29866 623   1855536 159340 SyS_epoll_ 0000000000 S com.tencent.mm
u0_a144   30068 623   1605200 58676 SyS_epoll_ 0000000000 S com.tencent.mm:push

具体源码已经放到仓库了,以上就是一次打开多个应用的​​实际操作,不同版本可能会有一些API的小改动,有的手机厂商的系统可能会有大的改动,本文只是开篇,有问题可以留言讨论。

文都管联院在预祝2021-2022一路长虹!