VirtualApp原理解析(1)--初始化及注入流程

VirtualApp技术黑产利用研究报告 一、 前言 VirtualApp(以下称VA)是一个App虚拟化引擎(简称VA)。VirtualApp创建了一个虚拟空间,你可以在虚拟空间内任意的安装、启动和卸载APK,这一切都与外部隔离,如同一个沙盒。运行在VA中的APK无需在Android系统中安装即可运行,也就是我们熟知的多开应用。 VA免安装运行APK的特性使得VA内应用与VA相比具有不同的应用特征,这使得VA可用于免杀。此外,VA对被多... 阅读详情

原文地址:https://blog.youkuaiyun.com/leif_/article/details/72420934

VirtualApp原理解析(1)–初始化及注入流程

VirtualApp是一款可以达到应用双开效果的开源项目。

源码地址:https://github.com/asLody/VirtualApp

这一系列简要分析其原理。

先来看下VirtualApp整体流程,包含启动双开应用Activity的过程。如下图:

VirtualApp的运行存在如下进程:

  • MainProcess即io.virtualapp:这是VirtualApp的宿主界面存在的进程。负责显示已安装目标应用,选择及启动需要双开的目标应用等。

  • ServiceProcess即io.virtualapp:x:后台服务进程,运行VirtualApp的后台重要服务。如:BinderProvider、DaemonService等。

  • ClientProcess即io.virtualapp:p*:目标应用运行进程,这个进程提供StubActivity/StubDialog/StubContentProvider子类负责启动目标应用对应的组件。

初始化及注入流程如下图所示:

1.VApp继承Application是应用程序入口,因为存在多进程所以VApp会调用多次,所以在VApp代码中存在对当前进程的判断逻辑。

  • 在覆写函数attachBase()中直接调用VirtualCore.startUp()做初始化操作。

2.VirtualCore.startUp()中主要有以下几个步骤:

  • 首先反射获取当前进程的ActivityThread对象保存,接着获取所在进程的unHookPackageManager。因为后面会对该PackageManager做hook所以这里先做备份。

  • 获取InvocationStubManager单例引用,调用到InvocationStubManager.init()。

  • 完成初始化之后调用InvocationStubManager.injectAll()执行对系统manager注入。

3.InvocationStubManager.init()函数的逻辑:

  • init函数内部又会调用到InvocationStubManager.injectInternal()该函数会根据当前进程类型执行不同初始化操作。这里假设是一个ServiceProcess或者ClientProcess去初始化ActivityManagerStub操作。

  • InvocationStubManager.injectInternal()只有两个操作,首先新建一个ActivityManagerStub对象,接着调用addInjector()将这个对象加入到map的mInjectors对象中。

那么在新建ActivityManagerStub对象时发生了什么?

  • 在ActivityManagerStub构造函数中,首先新建了一个MethodInvocationStub对象,参数传入通过反射获取的AMN中IActivityManager的getDefault对象。接着调用MethodInvocationStub两个参数的构造函数,在这里重点来了,首先保存一个传入的getDefault对象,接着获取这个getDefault对应的Class对象所有的接口。这里的一切都是为了使用Proxy.newProxyInstance()构建一个IActivityManager动态代理对象mProxyInterface。

  • 接着将上述步骤构建的MethodInvocationStub对象传入ActivityManagerStub父类MethodInvocationProxy的构造函数中。这里首先需要保存传入MethodInvocationStub对象,接着调用子类的ActivityManagerStub.onBindMethods(),在该函数中先去调用父类对应实现。在父类的onBindMethods()中获取自身的class对象,判断是否存在@Inject注解,读取其注解内部class对象构建对象后使用mInvocationStub.addMethodProxy()添加到MethodInvocationProxy中的一个map的Map

【VirtualAPP 双开系列08】如何实现多开 - UID 目录: 1. Android UID 介绍 2.多开基本原理 3. 常用的多开方案 4. VirtualAPP 如何实现多开 1. Android UID 介绍 Android 系统中修改了 Linux 的 UID 的含义。由于 Android 是单用户系统,不需要支持多用户登陆,因此传统的 UID 系统就失去了原来的意义。Android 的开发者巧妙地修改了 UID 的含义:每个 APP 对应一个 UID—用 UID 对应用程序进行管理。 Android 中查看 UID 的方法: .. 阅读详情

相关推荐

Android单元测试实战:用JUnit+Mockito构建VirtualApp环境解决Context依赖

单元测试是保障软件质量、提升开发效率的核心工程实践。其核心原理在于隔离被测代码,通过模拟(Mock)外部依赖,在快速反馈的本地环境中验证逻辑正确性。在Android开发领域,这一实践面临独特挑战:业务代码深度依赖Android运行时环境,尤其是无处不在的Context对象,导致传统JVM单元测试无法直接运行。为解决此困境,开发者需要掌握构建轻量级“虚拟容器”的技术,即通过Mockito等框架模拟Android核心组件(如Context、SharedPreferences),创建一个行为可控的“Virtual

weixin_33675507的博客 461

VirtualApp深度解析:Android沙盒技术的革命性突破

VirtualApp(简称VA)是一款革命性的Android沙盒技术产品,通过独特的三层架构(VA Space、VA Framework、VA Native)重新定义了移动应用的多开、隔离和安全管控能力。作为运行于Android系统上的轻量级"Android虚拟机",VA提供了全面的应用隔离、免Root的完整Hook能力、多进程架构设计,并展现出卓越的性能、兼容性和安全性优势。 ## Virtu...

gitblog_00032的博客 3727

2019年数学建模美赛经验总结

北京时间2019年1月29号上午9时,数模美赛结束。美赛结束已经10多天了,我在这次竞赛中负责建模和编程,趁现在记忆还比较清晰,写下这篇博客记录第一次参加数学建模美赛的经历。 补更:2019年4月20日公布成绩,笔者最终获得了美赛一等奖 目录 1、基本情况 2、选题 3、分工合作 4、论文写作 5、建模 6、编程 7、入门资源 ...

Smallactive 7万+

多开引擎virtualAPP适配安卓9到安卓11

github上的virtualApp只兼容到了安卓8,需要自己适配安卓9到11的hook机制。

cf125313的专栏 1342

【CQUT】从零开始龙芯杯-开始前的准备

不同级别的Cpu对于vivado综合的时间有较大影响,其中Cpu的单核、多核性能以及cache性能影响权重较高。因此,为了保证学习进度和效率,我们建议在Cpu不低于I5 12400的环境下进行学习。Vivado2023.2安装包约100GB,为了保证成功安装建议留出300GB硬盘空间。龙芯杯的许多资料被托管在gitee,你需要git指令将资料克隆到本地。指定用书:CPU设计实战 Loongarch版 作者:汪文祥、邢金璋。Cpu性能对比网站:https://www.cpu114.com/

weixin_73689971的博客 906

自监督学习与上下文赌博机融合:视觉决策中的协同优化与实战指南

在机器学习领域,自监督学习(Self-Supervised Learning)通过设计前置任务从无标注数据中学习通用表征,已成为解决标注数据稀缺问题的关键技术。其核心原理是利用数据自身的结构生成监督信号,训练编码器提取鲁棒特征。上下文赌博机(Contextual Bandits)作为强化学习的简化分支,专注于在给定上下文信息下做出单步最优决策,平衡探索与利用,广泛应用于推荐系统、广告投放等场景。将两者结合,构建端到端的协同训练框架,能让视觉表征的优化直接服务于最终的决策目标,同时利用自监督任务作为正则化项提

weixin_33721344的博客 516

【亲测免费】 探索VirtualApp:一款强大的安卓应用虚拟化框架

探索VirtualApp:一款强大的安卓应用虚拟化框架 在今天的数字化时代,Android应用程序已经成为我们日常生活中不可或缺的一部分。然而,随着应用数量的增长和功能复杂性的提升,有时我们需要一个工具来管理和优化这些应用。这就是的用武之地,它是一个开源的Android应用虚拟化框架,允许你在单个设备上运行多个应用实例。 项目简介 VirtualApp的核心理念是创建一个沙盒环境,每个应用程序都可...

gitblog_00055的博客 1467

YOLOv12改进策略【卷积层】| 引入注意力卷积模块RFAConv,关注感受野空间特征 助力yolov12精度提升

RFAConv:创新空间注意力和标准卷积运算感受野空间特征是针对卷积核设计的,根据卷积核大小动态生成。以3×3卷积核为例,它由非重叠滑动窗口组成,每个窗口代表一个感受野滑块。

Limiiiing的博客 684

markitdown 完整指南:一条命令免费把 PDF、Word、Excel 转成 Markdown

手头一堆 PDF、Word 文档,想喂给大模型或整理进笔记,复制粘贴却总把格式弄乱?markitdown 一条命令完成文档转 Markdown,支持 PDF、Word、Excel、EPUB 等格式,标题、列表、表格层级都保留,全程本地运行、免费。 ## 一句话定位:把"格式锁死的文件"变成干净的 Markdown markitdown 是一个开源 Python 工具,带命令行和 Python

gitblog_01152的博客 1007

51单片机嵌入式开发:14、STC89C52RC 之HX1838红外解码NEC+数码管+串口打印+LED显示

对于C51单片机的设计思路,你可以使用类似的步骤来实现红外解码、数码管显示和LED显示的功能。下面是一个简单的设计思路:(1) 连接HX1838红外解码器、数码管和LED到C51单片机。将HX1838的信号引脚连接到C51单片机的外部中断引脚(例如INT0),数码管的CLK引脚连接到C51单片机的某个IO口引脚,数码管的DIO引脚连接到C51单片机的另一个IO口引脚,LED连接到C51单片机的某个IO口引脚。(2) 在C51的程序中,定义并初始化所需的IO口和外部中断。

sinat_30943509的博客 2977

深度学习技巧应用26-CNN中多种注意力机制的嵌入方法,终于搞懂注意力机制了

大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用26-CNN中多种注意力机制的嵌入方法,终于搞懂注意力机制了。CNN是一种能够有效处理图像和其他二维数据的深度学习模型。在传统的CNN中,每个卷积核都会对输入的所有位置进行相同的操作,这可能导致网络无法针对特定区域或特征进行更加关注和重点处理。 注意力机制被引入卷积神经网络中,旨在使网络能够自动地学习和聚焦于输入中的重要区域或特征。通过引入注意力机制,可以增强网络对不同区域或特征的关注度,提取更有意义和相关的特征,从而提高模型的性能和表达能力。

微学AI的博客 3312

Dart Analyzer 诊断(Diagnostic)开发全指南:从 messages.yaml 定义到文档化的完整流程

> 本指南以 Dart SDK 仓库中 [pkg/analyzer/doc/implementation/diagnostics.md](https://link.gitcode.com/i/53890c4fefdef9f1f5cd9ee4a9bd0a5d) 为核心,完整讲解在 Dart Analyzer 中新增一个(非 lint 类)诊断的端到端流程:如何定义诊断代码、如何更新生成文件与修复状态

gitblog_00181的博客 510

①电子产品拆解分析-暖手宝

电子产品拆解分析-暖手宝 ①按键三档调温暖手; ②长按进入氛围呼吸灯; ③安卓接口充电以及支持USB输出;

a6662580的博客 5289

VirtualApp与Xposed框架:兼容性与功能扩展指南

你是否在寻找一种方式,既能在手机上同时运行多个应用账号,又能自定义应用行为?VirtualApp(简称VA)作为轻量级Android沙盒工具,与Xposed框架的结合为这一需求提供了完美解决方案。本文将详细解析两者的兼容性原理,并提供实用的功能扩展指南,帮助你轻松实现应用多开、功能定制等高级操作。 ## 核心概念与兼容性基础 VirtualApp是一款运行于Android系统的沙盒产品,可理解...

gitblog_00269的博客 558

基于STM32、HAL库的SC16IS752IPW总线转UART驱动程序设计

/ FIFO空间不足。// 设置LCR寄存器的DLAB位为1以访问DLL/DLH。// 设置LCR寄存器,先访问DLL/DLH。// 设置LCR寄存器(不包含DLAB位)

corlin6688的博客 815

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

突破多开统计难题:VirtualApp应用启动次数追踪全指南

你是否曾为无法准确统计沙盒内应用的使用频率而困扰?作为轻量级"Android虚拟机",VirtualApp(简称VA)已广泛应用于APP多开、游戏合集等场景。本文将从实际开发角度,详解如何在VA环境中实现应用启动次数的精准统计,帮助运营人员掌握用户真实使用习惯。 ## 统计原理与架构基础 VirtualApp的进程隔离特性为统计带来独特挑战。VA运行时包含五大进程类型,其中**VAPP Cli...

gitblog_01139的博客 781

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

VirtualApp 悬浮窗权限跨版本适配全攻略:一次搞定 Android 6 到 14 的兼容难题

深夜十一点,运营同事在群里连发三条消息:"双开的应用挂后台两小时,悬浮球不见了""用户反馈 Android 14 上悬浮窗显示不了""还有台 Android 8 的机器,悬浮窗弹出来就闪退"。这三个问题指向同一个技术债——**悬浮窗权限在不同 Android 版本下的管理规则完全不同**,而 VirtualApp 作为一款 Android 虚拟引擎(通过 Hook 系统服务为应用提供隔离运行环境,

gitblog_00378的博客 180

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

VirtualXposed实战指南:模块不生效与应用闪退问题深度解析与高效解决方案

VirtualXposed作为基于VirtualApp和epic框架的非ROOT环境下Xposed模块实现方案,为Android用户提供了无需root权限即可体验Xposed模块功能的便利。然而在实际使用过程中,模块不生效和应用闪退是用户最常遇到的两大核心问题。本文将通过"问题域分析-解决方案-实践验证"的三段式结构,深入剖析这些问题的根源并提供系统性的解决方案。 ## 一、模块不生效问题域分析

gitblog_00829的博客 779

深入解析跨进程内存读写:从游戏修改器到系统安全机制

内存读写是计算机系统中进程间通信与数据交互的基础技术之一,其核心原理在于操作系统通过虚拟内存机制为每个进程提供独立的地址空间,实现进程隔离以保障系统安全。从技术实现层面看,无论是Windows平台的ReadProcessMemory/WriteProcessMemory API,还是Linux/Android系统的/proc文件系统与ptrace机制,都体现了操作系统对内存访问权限的精细控制。这项技术的工程价值不仅体现在调试器、性能剖析工具等开发场景,也是理解系统安全机制的关键。在应用层面,内存读写技术常被

weixin_33834628的博客 396

VirtualApp沙盒基本原理

转自:http://rk700.github.io/2017/03/15/virtualapp-basic/ VirtualApp是一个开源的Android App虚拟化引擎,允许在其中创建虚拟空间,并在这个虚拟空间中运行其他应用。通过阅读源码及动态调试,基本了解了其运行原理,在此记录。 本质 Android应用隔离是基于Linux系统的多用户机制实现的,即每个应用在安装

云守护的专栏 2万+

浅谈VirtualApp

Vapp.Java attachBaseContext的时候进行startup()加载hook等 invocationStubManager.init(); 对 Java 层 framework 的 Hook,将其定位到 VA 伪造 VA framework 上去 Vapp.java 在onCrete方法中加载了安装app的方法在onServerProcess()内的 virtualCore.setAppRequestListener(new MyAppRequestListener(VApp.this))

liuwushuang233的博客 2002

VirtualApp快速上手:3分钟搭建你的第一个应用多开环境

还在为手机空间不足无法安装多个应用分身烦恼?想同时登录多个社交账号却受限于系统限制?本文将带你3分钟内使用VirtualApp(简称VA)搭建轻量级应用多开环境,让一部手机轻松实现应用双开/多开,无需复杂配置,零Root门槛。 读完本文你将学会: - 理解VirtualApp沙盒技术原理 - 3步完成应用多开环境搭建 - 掌握安装、启动、管理虚拟应用的核心操作 - 解决常见兼容性问题的实用技巧 ...

gitblog_00013的博客 904

VirtualApp:打造你的终极Android应用多开与隔离神器,2025最新实用指南

VirtualApp(简称VA)是一款革命性的Android沙盒技术产品,作为运行于Android系统上的轻量级"Android虚拟机",它通过独特的三层架构(VA Space、VA Framework、VA Native)重新定义了移动应用的多开、隔离和安全管控能力,让你的手机轻松实现应用多开、游戏双开等功能。 ## ???? 为什么选择VirtualApp?核心优势解析 VirtualApp凭...

gitblog_01051的博客 2566

【亲测免费】 VirtualApp:开启Android插件化开发的新纪元

VirtualApp:开启Android插件化开发的新纪元 【下载地址】VirtualApp资源文件下载 VirtualApp 资源文件下载 项目地址: https://gitcode.com/open-source-toolki...

gitblog_09744的博客 1354

Android Hook 技术 之 VirtualApp 框架学习记录

一、VirtualApp 初识 1. VirtualApp 是一款支持应用多开的框架 虚拟应用 (Virtual App, VA): Android 系统沙盒,轻量级Android虚拟机 一句话:通过拦截应用的全部系统请求,实现对app的全面控制。 源码及官方文档介绍 https://github.com/asLody/VirtualApp (2017/12后开源代码停止更新) 2. VA术语 (1)宿主App: 真正安装的系统上的应用, 集成了 VA libs (用户是在这个App 上添加其它应用的分身)

Misdirection_XG的博客 2727
上一篇: [Android]Android studio编译程序时报错: error: use of undeclared identifier ’free free(t);
下一篇: VirtualApp原理解析(2)--后台服务初始化流程
dodod2012
博客等级 码龄15年 244粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值