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

常见的分身/多开

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

目前很多人都会有应用多开和系统分身的需要,多个帐号要登录在一个手机,或者体验下一个手机两个系统自由切换的感觉,完全隔离,隐私再也不怕被翻到。本文主要是通过系统隐藏 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_ 代表该进程运行在 id0 的用户上。

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 …推荐这篇
提示:

  1. 使用了语言 python 、 js 和 java (反射)
  2. 本文所用设备 Nexus 6P (Android 6.0)
  3. python 版本 3.7,frida 版本 12.4.0
  4. 查看 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 < 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')

spawn 方式运行步骤:

  1. 命令行 frida -U -f com.android.settings,提示等待下一步
  2. python 运行脚本
  3. 命令行输入 $resume,启动"设置"应用,因为脚本 hook 了 Application.attach 方法,自动运行完成。

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

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

具体源码已放到 GitHub 仓库,以上就是一次多开应用的实战操作,不同版本可能存在部分 API 小改动,也可能有的手机商系统会改动较大,本文只是抛砖引玉,有什么问题可以留言讨论。

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
### 回答1: 《Android应用安全实战:Frida协议分析》是一本介绍Frida工具的使用和Android应用安全分析的书籍。Frida是一个强大的动态分析工具,可以帮助开发人员和安全研究人员对应用进行动态分析。本书以Frida为基础,介绍了如何对一些常见的安全问题进行定位和修复。 本书主要分为三部分,第一部分介绍了Frida工具的安装和使用方法,包括如何在Windows、Mac和Ubuntu三个系统上安装Frida,以及如何使用Frida应用进行动态分析和漏洞挖掘。第二部分介绍了一些常见的安全问题,如反调试、class tampering、hook、rpc等问题,并详细介绍了如何通过Frida对这些问题进行分析和修复。第三部分介绍了一些应用案例分析,以及如何通过Frida应用中的加密算法、网络协议、第三方代码等进行分析。 本书的特点在于实战性强,作者通过大量的实例和案例,让读者能够更加深入地理解Frida工具的使用方法,并能够将所学知识应用到实际的项目中。同时,本书还提供了一些工具和脚本,方便读者能够更加快速地进行分析和修复工作。 总的来说,本书是一本对于安卓开发人员、移动安全研究人员和安全工程师来说非常有价值的工具书,无论是对于入门和提高都有很大的帮助。Frida工具的特点在于动态分析,能够帮助开发人员和安全工程师快速定位和修复常见的安全问题。而本书则是一个详细的实例教程,通过这份教程的学习,读者将能够掌握Frida工具的使用方法,并能够熟练地应用到实际的项目中。 ### 回答2: 《Android应用安全实战:Frida协议分析PDF》是一本针对移动应用安全的实战指南。这本书主要讲述了如何借助Frida这个强大的工具来进行移动应用的安全分析和漏洞挖掘。 Frida是一款可用于对移动应用进行实时动态分析的工具,它的优点在于可以轻松地hook任意函数和类,还可以在不用重新编译应用程序的情况下动态修改应用程序的行为。Frida的这些特性使得它成为了许多黑客和渗透测试人员使用的首选工具之一。 在《Android应用安全实战:Frida协议分析PDF》中,作者首先介绍了Frida工具的基本原理和使用方法,包括安装和配置Frida、使用Frida脚本、使用Frida进行hook等。接着,作者详细介绍了Android应用程序的各个组成部分和重要的安全机制,并给出了许多实例来演示如何通过Frida来绕过这些安全机制。 最后,作者还介绍了一些常用的Frida脚本和工具,比如Hooking SSLPinning脚本、Frida-Extract工具、在Android 8.0上使用Frida等。这些工具和脚本可以帮助读者更快更高效地进行移动应用的安全分析和漏洞挖掘。 总的来说,《Android应用安全实战:Frida协议分析PDF》是一本非常实用的书籍,对于渗透测试人员、黑客和移动应用开发人员来说都具有一定的参考价值。通过学习和掌握Frida这个工具,可以让我们更好地发现和修复移动应用程序中的安全问题,从而提升我们的移动应用程序的安全性和可靠性。 ### 回答3: 《Android应用安全实战:Frida协议分析》是一本关于安卓应用安全的实战教程。该书的重点在于介绍如何使用Frida协议进行应用程序的逆向分析,得出应用程序的安全漏洞,并给出相应的解决方案。 Frida是一个能够在运行时动态注入JavaScript并调试代码的工具。这也意味着Frida能够直接访问运行在内存中的应用程序。这个优势使Frida成为了一个强大的安卓应用程序分析和调试工具。通过使用Frida,用户可以对应用程序进行监视、修改、甚至是攻击。 《Android应用安全实战:Frida协议分析》详细介绍了Frida的使用方法,包括Frida的架构、基本操作、配置和调试应用程序等。此外,该书还介绍了有关安卓应用程序逆向工程和安全审计的实操技能。通过本书的学习,在安卓应用程序的开发过程中,读者可以掌握一定的安全知识和技能,从而提高应用程序的安全性,避免攻击和漏洞的发生。 总之,《Android应用安全实战:Frida协议分析》是一本非常实用、易懂的安卓应用程序安全入门教材。在阅读该书并掌握其中的技能后,用户可以应用这些技能进行应用程序的逆向分析和安全审计,从而达到提高安卓应用程序安全性的目的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gallonyin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值