跳至正文
移动安全 发布机构:西安守界御盾信息安全技术有限公司 36 views

Android Work Profile 中的应用克隆,与 APP 多开和二次打包有什么区别?

从阅读进入评估 如果你正在评估 App 加固方案,可以先看官网能力边界,再提交一个真实包做 PoC。
查看御盾官网

先给结论:Work Profile 不是恶意环境白名单,同一个未修改 APK 出现在个人 Profile 与工作 Profile,也不能直接证明发生了二次打包。 Work Profile、系统分身、第三方虚拟容器、应用克隆和二次打包改变的对象不同:前四类通常是在隔离空间中复用或运行实例,二次打包通常涉及 APK 内容、构建过程或签名关系变化。金融和高价值业务不应只依据“有两个图标”或单一 Profile 的扫描结果放行,应该把客户端完整性、Profile/安装证据、账号会话和服务端策略放在一起解释。

摘要

Android Work Profile 的设计目标是把工作应用和工作数据与个人空间分离。Android 官方文档说明,应用、数据、Intent 和部分系统资源会受到 Profile 边界约束;官方示例也展示了同一个应用可以分别安装在个人 Profile 与 Work Profile 中,两个空间拥有独立的数据和配置。Android Enterprise 开发者指南 Work Profile 应用示例

2026 年 9 月 9 日,Group-IB 公布了关于 Gigabud 与 Vwork 的研究,描述攻击者把一个克隆工具放入 Work Profile,并让银行应用在隔离空间内运行,从而使个人 Profile 中的恶意环境信号与后续业务行为难以直接关联。Group-IB 研究 这项研究不等于 Work Profile 存在平台漏洞,也不等于所有双 Profile 场景都具有恶意意图;它提醒银行和钱包服务商,单一 Profile 的“未发现异常”不能自动代表整台设备的完整安全状态。

本文把五类容易混淆的现象拆开说明,并将责任分为三层:御盾关注 App 自身的 DEX/SO、完整性、重打包与运行时保护;守界关注设备、安装、Profile 和环境证据;客户后端结合账号、会话、设备历史和交易上下文作最终业务判断。本文没有执行真实的 Personal/Work Profile 双环境实验,因此所有安装、登录、推送、Native 和覆盖升级结果均标为 NOT_TESTED,不构成对任意机型或银行 App 的兼容承诺。

读者对象

本文面向银行、支付、钱包、游戏和企业移动应用的研发、安全、风控、QA 与发布负责人,也适合正在处理 App 分身、同包多实例、Work Profile、虚拟化容器或疑似重签版本的团队。读者不需要先选择某一种检测产品;应先确认问题究竟发生在 APK、签名、安装空间、运行环境、账号还是服务端策略。

核心结论

  1. Work Profile 是 Android 的合法隔离能力,不应被写成系统漏洞,也不应被自动标记为恶意。
  2. 在两个 Profile 中看到相同包名,可能只是同一 APK 的合法多空间安装;它不能单独证明 APK 内容被修改。
  3. 二次打包通常会留下内容或签名关系变化,但只看签名也不足以解释 Profile、虚拟化、账号和行为风险。
  4. 客户端只能观察当前可见范围内的完整性与环境信号;跨 Profile 的状态受 Android 隔离模型限制,最终风险判断应由服务端综合证据。
  5. 御盾负责应用代码、DEX/SO、完整性、重打包和运行时保护;守界负责设备与安装环境证据;客户后端负责账号、会话、交易和处置策略。
  6. Work Profile = trustedtwo instances = repackagedsignature unchanged = safe 都是过度简化的判断。
  7. 当前双 Profile 安装、推送、WebView、Native 与覆盖升级没有真实执行记录,发布报告必须保留 NOT_TESTED,不能把流程模板写成通过结果。

技术拆解

应用实例的归因需要同时看安装空间、包体身份和运行时范围。Profile 变化属于平台提供的隔离维度;包体或签名变化属于发布物维度;账号与交易序列属于服务端业务维度。三类维度应分别采集,再由后端按时间和来源关联。任何一类字段缺失,都应保留未知状态,不把缺失改写为安全或攻击成立。

五类现象的 30 秒区分

场景 APK 是否可能未修改 签名是否可能保持 数据空间 运行环境变化 首要核对对象
Work Profile 工作与个人空间分离 Profile、策略与用户空间变化 管理模式、Profile 状态、分发路径
系统 App 分身 通常独立 系统提供的多实例配置 OEM 功能、实例标识、数据目录
第三方虚拟容器 不一定 不一定 容器隔离 容器、虚拟化或代理层变化 容器来源、运行时与权限边界
App Clone 不一定 不一定 独立实例或容器 安装身份、进程和资源空间变化 安装来源、实例关系、完整性证据
二次打包 通常发生内容或构建变化 常见发生变化 不一定 可能伴随新的加载或渠道环境 Manifest、资源、DEX/SO、签名与合法版本集合

表格表示技术类别,不表示风险等级。系统分身和 Work Profile 可以服务于正常的办公、测试或多账号场景;虚拟容器和 App Clone 也不必然是恶意;二次打包则需要进一步核对改动是否得到发布方授权。判断应从证据出发,而不是从名称直接推导处置。

Group-IB 事件带来的防守启示

Group-IB 公开研究记录了 Vwork 与银行木马协同使用 Work Profile 隔离空间的情况,并指出不同 Profile 的应用通常彼此隔离,个人空间里的恶意信号不一定会在另一个空间再次出现。这是威胁情报机构对一个具体活动的观察,不是御盾对任何样本的实测结论。

对金融 App 来说,启示有三点。第一,应用列表、签名扫描或风险 SDK 在一个 Profile 中看到的结果,不能自动代表设备上所有隔离空间。第二,出现 Work Profile 或两个实例时,安全团队应先确认这是企业纳管、用户主动创建还是异常创建,避免把正常企业隔离误判成攻击。第三,交易服务不能只接收一个客户端布尔值,而应把当前 Profile、安装来源、版本身份、账号历史、会话顺序和业务敏感度一起纳入风险模型。

这并不意味着银行 App 需要读取个人空间的全部数据。Android 的隔离和隐私边界仍然有效,产品设计应该遵循最小化原则:客户端上报与业务目的相关的证据摘要,后端结合用户授权、设备管理状态和历史事件作解释。无法看到的内容应标记为未知,而不是假设为安全或危险。

Work Profile 为什么会形成可见性边界

Work Profile 将工作应用、工作数据和相关策略放到独立空间。个人 Profile 的应用不能任意读取工作 Profile 的私有数据,反方向也一样;跨 Profile 的 Intent、文件共享、通知和联系人访问还会受系统版本与管理员策略影响。这样的隔离减少了数据泄露面,却同时意味着某个应用的本地扫描只能覆盖它有权访问的范围。

对于业务 SDK,下面三类状态应分别记录:

  • 当前 Profile 事实:应用在哪个 Profile 启动、当前 Profile 是否被管理员纳管、工作空间是否暂停。
  • 安装与身份事实:包名、版本、签名摘要、安装来源、候选版本和升级关系。
  • 不可见范围:跨 Profile 的数据或应用状态是否无法读取、是否被策略阻断、是否没有取得用户授权。

不可见范围是证据的一部分。把“没有读取到”写成“设备没有”会产生错误的风控结论,也会诱导产品绕过 Android 的隐私边界。Android 17 的企业能力继续强化 Profile、设备数据和自动化边界,团队应把版本、OEM 和管理员策略作为兼容变量,而不是固定假设。

为什么两个实例不等于二次打包

同一个 APK 可以因为 Work Profile、系统分身或合法测试环境而拥有两个数据空间。两个实例可能共享相同的 Package Name 和签名证书,却分别保存登录状态、数据库、缓存和通知配置。此时应用文件没有被修改,改变的是安装位置、用户空间和生命周期。

二次打包关注的是另一个问题:有人修改了 Manifest、资源、DEX、SO、配置或构建流程,再重新生成并分发一个 APK。它可能导致签名证书、版本、渠道、关键文件摘要或运行时加载链与合法 Release 不一致。也存在只修改渠道配置、资源或动态内容的情况,不能只用一个签名布尔值完成归因。

因此,排查“App 装了两份”时应先问:两个实例是否分别属于个人与工作 Profile?是否由 OEM 的系统能力创建?安装来源和签名是否在合法集合中?设备是否有管理员策略?再决定是否需要做包体比对和重打包复核。顺序颠倒会把正常企业部署误判为攻击,或者遗漏真正的异常包体。

签名、Package 与安装身份如何配合

Package Name 是应用的逻辑标识,签名证书是发布身份的重要组成部分,安装空间与 Profile 则描述实例所处的环境。三者不能互相替代:相同包名不证明内容相同,相同签名不证明运行环境可信,发现两个实例也不证明签名发生变化。

建议为每个合法 Release 建立最小记录:

Package Name
Version Code
Signing Certificate 摘要
Release 摘要
渠道与分发路径
保护策略版本
允许的设备管理模式
回滚对象

公开报告只展示字段名称或截断状态,完整证书、包体摘要和渠道规则保存在受控系统。加固候选应在最终签名前保持身份可追溯:原始 Release → 御盾候选 → 客户或受控签名系统 → 分发物。御盾不应接管客户生产私钥,也不应把临时重签后的文件当成正式身份。

御盾、守界与服务端的责任边界

安全对象 御盾 守界 客户后端
DEX/SO、资源和关键逻辑 保护与完整性证据 维护合法版本集合
重打包、重签和运行时干预 提高修改成本、输出候选证据 结合版本与账号决定动作
Profile、安装空间与设备环境 读取授权范围内的应用侧状态 设备与环境证据 解释证据的新鲜度和关联性
Work Profile 管理策略 不替代 记录受管/未受管事实 按企业场景制定策略
登录、会话、交易和权益 不作最终裁决 提供设备关联材料 最终放行、挑战、审核或限制

御盾的价值在于保护 App 自身的代码和运行时链,并帮助发布团队对原始 Release、保护候选和最终分发物做差异归因。守界的价值在于提供设备、安装和环境的证据引用。二者都不应把一个本地信号写成“整台设备安全”,服务端也应保留未知、观察、挑战和人工复核等状态。

攻防视角

从防守角度,应用克隆和二次打包的处理重点不是寻找一个万能开关,而是减少单个信号失效后的盲区。包体摘要、签名关系、当前 Profile、安装来源和运行时状态可以分别提供证据;服务端再结合账号、会话和业务动作决定是否补充验证。公开内容只展示分类、字段和判断边界,不公开可用于规避检测的规则、样本或操作链。

金融和高价值业务的服务端证据链

可以采用以下防守侧流程:

合法 Release / 签名登记
        ↓
客户端完整性与运行时证据
        ↓
当前 Profile、安装来源与设备管理状态
        ↓
账号、会话、设备历史与行为序列
        ↓
服务端按业务敏感度解释
        ↓
放行 / 二次验证 / 限制敏感动作 / 人工审核

服务端不必要求客户端知道另一个 Profile 的全部内容,而应接受证据的范围和新鲜度字段。例如,profile_scope=current 表示当前 Profile 可见范围;cross_profile=unavailable 表示没有跨 Profile 读权限;signature=matched 只表示当前安装物与登记摘要匹配。每个字段都应带上版本、时间和来源,避免把旧证据用于新的交易。

处置也要分级。普通浏览可以先观察并请求补充证据;登录、换绑、支付、提现或游戏结算等高价值动作,可以触发二次验证、延迟处理或人工审核。Work Profile、代理、无障碍工具、企业安全软件和非主流 ROM 可能来自正常业务,不能因为一个弱信号就永久封禁。只有当完整性、安装身份、设备历史和行为序列相互印证时,才适合提高处置强度。

双 Profile 兼容性 PoC 的安全做法

本主题适合先做兼容性和证据边界验证,而不是复现恶意软件链。授权实验室可使用无敏感业务 Demo,把同一 Release 的原始包与保护候选分别放在个人 Profile 和 Work Profile,按固定顺序记录安装、启动、登录、WebView、Native、推送、前后台、Profile 暂停/恢复、覆盖升级和卸载重装。

每个结果需要绑定 Android 版本、Security Patch Level、OEM、ABI、管理模式、MDM/EMM 版本、Package、签名摘要、候选摘要和测试时间。若原始包在某个 Profile 已经失败,应先归因于应用、系统、策略或管理代理;只有原始包通过而保护候选首次失败时,才进入加固策略的兼容分析。

本轮没有受控的企业租户、双 Profile 实机和授权 Demo,因此不声称完成上述步骤。公开状态统一写 NOT_TESTED,下一步再由项目负责人提供测试范围和脱敏结果。不要在文章或仓库中放入设备序列号、租户 ID、私钥、原始 Token、客户 APK 或可复现的恶意操作。

风险边界

Work Profile、系统分身和企业 MDM 是 Android 或设备管理能力,不是御盾产品;Group-IB 的研究是外部威胁情报,也不是御盾的测试记录。御盾不替代 Android 隔离、设备纳管、Google Play Protect、服务端风控或最终业务审批,也不承诺识别所有克隆环境。当前没有双 Profile 实机与授权企业租户,相关字段均保持 NOT_TESTED

工程落地:克隆风险发布门禁

发布门禁应将“包体身份”和“运行环境”分开,但在服务端汇合。建议至少包含:

  1. 包体门禁:Manifest、资源、DEX、SO、版本和签名摘要与合法 Release 集合一致。
  2. 实例门禁:记录当前 Profile、实例来源、管理模式和安装时间,不把实例数量直接转成风险结论。
  3. 运行时门禁:观察加载链、调试、Hook、Root、模拟器、虚拟化和多开信号,保留信号来源与状态。
  4. 业务门禁:登录、换绑、支付、提现、结算、权益领取等动作由后端按风险分层处置。
  5. 回滚门禁:候选失败时回到已登记版本,确保版本、签名和数据迁移关系可解释。

原始报告事实映射(公开安全摘要)

下表只映射公开报告和官方文档中可以安全复用的事实,不代表御盾已经对 Group-IB 提到的活动完成检测或阻断。

公开事实 工程字段 支撑判断 当前状态
Group-IB 在 2026-09-09 公开 Vwork/Gigabud 研究 source_date, threat_reference 将事件作为威胁情报背景,不冒充产品实测 已公开事实
Vwork 利用 Work Profile 形成隔离运行空间 profile_scope, management_mode Profile 影响客户端可见范围 已公开事实
个人 Profile 的恶意信号不一定在另一 Profile 出现 cross_profile_visibility 单一 Profile 结果不能代表整台设备 公开研究结论
Android 官方将工作应用和数据与个人空间分离 profile_boundary 不能把隔离边界写成平台缺陷 官方平台事实
同一个应用可以分别存在于不同 Profile package_instance_relation 两个实例不自动等于二次打包 官方示例事实
双 Profile 安装、登录、Native、推送和升级 poc_result 需要具体设备和候选才能下结论 NOT_TESTED
客户端应提供证据,后端解释业务动作 server_verdict 将本地信号与账号、会话和行为关联 工程建议
御盾、守界和后端分工不同 responsibility_layer 防止把 App 保护宣传为设备或平台安全 产品边界

动态时间线与字段时间线

阶段 需要记录的字段 复核问题 当前状态
规则与威胁情报 source_date, source_url, threat_reference 事实是否来自官方或公开研究 已核对公开来源
静态 Release package, version, release_digest, signing_digest 原始包是否进入合法版本集合 NOT_TESTED
保护候选 protection_version, candidate_digest 候选与原始 Release 的关系是否可追溯 NOT_TESTED
Profile 安装 profile_scope, management_mode, install_source Personal/Work 是否为授权实验环境 NOT_TESTED
启动与运行时 runtime_scope, native_status, observer_status 当前 Profile 的关键路径是否正常 NOT_TESTED
业务回归 login, webview, push, upgrade 登录、推送和覆盖升级是否保留 NOT_TESTED
服务端解释 account, session, device_history, server_verdict 是否按业务敏感度采取动作 NOT_TESTED
report_evidence:
  source: group_ib_public_research_and_android_official_docs
  threat_observation: profile_isolation_can_limit_signal_visibility
  package_identity: NOT_TESTED
  personal_profile_install: NOT_TESTED
  work_profile_install: NOT_TESTED
  same_package_two_profiles: NOT_TESTED
  native_webview_push_upgrade: NOT_TESTED
  yudun_detection_of_vwork_activity: NOT_TESTED
  server_verdict: customer_backend_decision
  public_boundary: "仅说明平台边界与防守方法,不代表对任何威胁样本已完成检测或阻断"

测评目标与非目标

本页面的目标是建立概念消歧、责任矩阵和授权 PoC 字段;不是对某个银行 App、设备或恶意样本作兼容或检测承诺。

目标 验收问题 结果
Profile 识别 能否区分 Personal、Work Profile、系统分身与未管理容器 NOT_TESTED
包体归因 两个实例是否来自同一合法 Release,是否存在内容或签名变化 NOT_TESTED
加固兼容 御盾候选能否在两个授权 Profile 启动并完成关键路径 NOT_TESTED
运行时记录 能否在当前 Profile 记录 Native、WebView、前后台和异常状态 NOT_TESTED
业务联动 后端能否结合账号、会话、设备历史与交易决定动作 NOT_TESTED
升级回滚 正式版本、候选版本和回滚版本是否保持签名与数据连续 NOT_TESTED

非目标包括:读取个人 Profile 的全部内容、绕过管理员策略、复现银行木马、发布检测绕过方法、替代 Android 的隐私隔离、替代 MDM/EMM、替代 Google Play Protect、替代客户后端风控,或宣称御盾已阻断 Group-IB 研究中的活动。没有授权和实际结果时,所有动态字段保持 NOT_TESTED

事实依据与脱敏证据

# 来源 可公开事实 对工程的用途 公开边界
1 Android Enterprise 开发者指南 Work Profile 是 Android Enterprise 的工作空间模型 设计 Profile、策略与应用生命周期字段 不推导代码防逆向能力
2 Work Profile 应用示例 同一应用可在个人与工作空间分别存在 解释同包双实例不等于改包 示例不等于目标项目实测
3 Android 17 企业变化 跨 Profile 的设备数据和自动化边界继续收紧 将系统版本与策略纳入兼容变量 不宣称所有设备行为相同
4 Group-IB Vwork 研究 具体活动利用 Profile 隔离制造信号关联困难 建立多 Profile 风险模型 不复述攻击链或敏感 IOC
5 御盾二次打包治理 包体、签名、DEX/SO、运行时和服务端需要分层核对 作为 App 完整性内链 存量页面结论不等于本主题实测
6 守界设备证据产品 设备与环境证据应交由后端解释 作为设备证据内链 不输出原始设备标识
7 御盾 App 加固产品 御盾定位为移动 App 保护产品 作为客户端防护承接页 不替代平台、MDM 或后端

常见误区

误区一:发现 Work Profile 就直接封禁

Work Profile 可能是企业纳管、个人办公、测试或用户主动创建的合法空间。它是环境事实,不是单独的风险结论。金融交易是否继续,应结合管理状态、安装来源、完整性、账号历史和行为风险决定。

误区二:同一个包名有两个实例就是二次打包

包名是逻辑标识,Profile 或系统分身可以让同一合法 APK 拥有多个数据空间。需要进一步核对签名、版本、资源、DEX/SO、安装来源和合法版本集合。

误区三:签名没变就一定安全

原版签名只能说明当前安装物与登记身份的一部分关系。它不说明另一个 Profile 是否有异常工具、账号是否被接管、设备是否处于虚拟化环境,也不说明服务端行为可信。

误区四:客户端扫描不到就代表设备没有

跨 Profile 的不可见性是平台权限模型的一部分。正确状态应是“当前范围未观察到”或“跨 Profile 不可见”,而不是把未知改写成绝对安全。

误区五:御盾可以代替服务端风控

御盾保护客户端代码、完整性和运行时链;设备证据与业务决策仍需要守界和客户后端参与。任何一方都不能单独代表整台设备或最终交易风险。

FAQ

Android Work Profile 是不是恶意软件?

不是。它是 Android Enterprise 的隔离空间。风险判断要看是谁创建、是否纳管、安装了什么以及账号和业务行为是否异常。

同一个 App 在个人和工作 Profile 各有一份,是否需要重新加固?

不一定需要重新生成 APK,但需要验证两个 Profile 的生命周期、数据隔离、通知、WebView、Native、登录和升级路径。是否使用同一候选由项目的发布身份和威胁模型决定,不能只靠实例数量判断。

APP 加固能否读取另一个 Profile 的全部状态?

不能把这当作设计前提。Android 的跨 Profile 访问受权限和管理员策略约束。加固可以保护当前 App 的代码和运行时链,但不能突破系统隐私隔离,也不应承诺扫描整台设备。

如何判断疑似二次打包?

从合法 Release 集合开始,核对 Package、版本、签名、Manifest、资源、DEX、SO、安装来源和运行时证据,再由服务端结合账号与行为解释。不要把单一签名或“双实例”当成最终结论。

御盾是否已经检测到 Group-IB 研究中的 Vwork 活动?

本文没有执行针对该活动的授权样本检测,状态为 NOT_TESTED。Group-IB 的研究仅作为公开威胁背景;御盾的公开承诺限于 App 自身保护和候选兼容性评估,不宣称阻断任何特定活动。

企业 Work Profile 部署与个人多开如何分别测试?

先记录设备管理模式和分发路径,再在授权 Demo 上分别验证安装、启动、关键业务、通知、Native、升级和卸载。企业租户、设备标识、证书和测试凭据不应进入公开报告。

相关阅读

参考资料

相关阅读