android端手机虚拟机实现过程解析

查看 47|回复 9
作者:chenchenchen777   
android端手机虚拟机实现过程
以下是VirtualAPP的执行流程图


image-20250418190817332.png (137.5 KB, 下载次数: 0)
下载附件
2025-4-18 19:08 上传

我们通过这样的一个开源的virtualApp来了解一下,一个应用程序是怎么去实现在虚拟机里面运行的。
Virtual space
首先是应用程序的下载安装。实际上,在虚拟机中运行的应用程序是下载到的虚拟机空间(virtual space)中的。
Virtual Framework
虚拟机中的 App(比如 App1、App2)原本会直接调用系统 Framework,但是在虚拟机中的APP需要的就不同
  • “以为”自己访问的是系统服务,
  • 实际上却访问的是 VA 模拟的服务(Hook 之后的)。

    Android Framework
    Android Framework 是 Android 系统提供的一整套 API,它是 系统级服务(如 AMS、PMS、LocationService) 的接口,比如:
  • ActivityManagerService (AMS):管理 Activity 的启动与调度。
  • PackageManagerService (PMS):管理应用包的安装与信息。
  • LocationManager:提供位置信息。
  • ClipboardManager:剪贴板服务。

    这些都属于 系统原生的 Android Framework,运行在系统进程(如 system_server)中,不是用户 App 能随意改动的。而在虚拟机中的Framework,则是自开发的可改动的Framework。
    而在Virtual Framework中,需要做的事情就是让APP觉得自己是在原生系统下执行的,根据Android Frameword中的应用程序的执行流程,我们可以知道的是
    一个应用程序的执行流程大体是这样的:
  • 点击桌面程序
  • 将Activity顶上第一个设置为暂停状态等待启动的应用
  • 判断进程,先进程再程序
  • 通过Zygote开始fork()应用程序进程了
  • 执行ActivityThread.main()
  • ActivityThread 通过 Binder 将自身的 ApplicationThread 传给 AMS,方便AMS通过ActivityThread启动应用
  • AMS 通过 ApplicationThread.scheduleLaunchActivity() 通知启动 Activity
  • ActivityThread 通过反射加载目标 Activity 类
  • 调用 Instrumentation.callActivityOnCreate(),执行程序的OnCreate()函数

    应用的真正启动是 ActivityThread 执行的,但整个过程是由 AMS 控制调度的,双方通过 Binder 建立通信桥梁。
    虚拟 App vs 原生安装 App
    [table]
    [tr]
    [td]方面[/td]
    [td]虚拟机中的 App(VA App)[/td]
    [td]系统安装的 App(原生 App)[/td]
    [/tr]
    [tr]
    [td]安装方式

    应用程序, 的是

  • chenchenchen777
    OP
      


    q265354 发表于 2025-4-21 11:11
    PDF好像不是全的,到了native hook那里就没了?

    对的,我重新上一个
    xintian   

    结论
    本文通过分析 VirtualApp 的开源实现,揭示了Android虚拟机如何通过 Java/Native双层级Hook 和 路径重定向 实现应用沙箱化。其核心价值在于:  
    多开与隔离:支持同一应用多实例并行运行。  
    隐私保护:可伪造敏感数据(如设备信息、权限状态)。  
    开发灵活性:为安全研究、测试提供可控的虚拟环境。
    参考资料:  
    VirtualApp GitHub  
    详细原理PDF(提取码:chen)
    适用场景:移动安全研究、应用多开、隐私测试工具开发。
    radar12345   

    虽然看不懂,但是还是觉得楼主很厉害啊
    oddant   

    如果hook了这些参数,应该就能实现一些原本不支持模拟器的app在模拟器上运行了对吗
    ethanlaux2000   

    底层知识结构,学习学习,感谢分享!
    Tomlls   

    收藏下 说不定会用到
    fdjdf   

    nice(。•̀ᴗ-),感觉不错,有时间再来看看,先水一下,以防万一号没了。能学到知识的帖子。
    q265354   

    感谢分享,一起学习一起进步
    q265354   

    PDF好像不是全的,到了native hook那里就没了?
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部