ESET研究人员发现PromptSpy是已知首个在执行流程中滥用生成式人工智能的Android恶意软件

PromptSpy ushers in the era of Android threats using GenAI

ESET研究人员发现了首例已知的Android恶意软件滥用生成式人工智能进行上下文感知用户界面作的案例。虽然机器学习已经被用于类似目的——就在最近,Dr.WEB 的研究人员发现了 Android.Phantom,它利用 TensorFlow 机器学习模型分析广告截图并自动点击检测到的元素进行大规模广告欺诈——但这是我们首次以这种方式看到生成式人工智能的部署。由于攻击者依赖提示AI模型(此处指谷歌的Gemini)来引导恶意UI作,我们将该系列命名为PromptSpy。这是我们发现的第二个AI驱动恶意软件——继2025年8月的PromptLock事件之后,这是已知的首个AI驱动勒索软件案例。

虽然生成式人工智能仅部署在PromptSpy代码中相对较小的一部分——负责实现持久化的部分——但它仍然对恶意软件的适应能力产生了显著影响。具体来说,Gemini用于分析当前界面,并向PromptSpy提供逐步指导,帮助你确保恶意应用一直被置顶在最近应用列表中,从而防止系统轻易滑动或杀死应用。AI模型和提示词在代码中预设,无法更改。由于安卓恶意软件通常依赖用户界面导航,利用生成式人工智能使威胁行为者能够适应几乎任何设备、布局或作系统版本,从而大幅扩大潜在受害者的范围。

PromptSpy的主要目的是部署内置的VNC模块,使能够远程访问受害者的设备。该安卓恶意软件还滥用无障碍服务,通过隐形叠加阻挡卸载,捕获锁屏数据,录制视频。它通过VNC协议与C&C服务器通信,采用AES加密。

根据语言本地化线索和分析中观察到的分布向量,该活动似乎具有经济动机,主要面向阿根廷用户。有趣的是,分析的PromptSpy样本表明它是在讲中文的环境中开发的。

PromptSpy 通过专门的网站发布,从未在 Google Play 上提供过。作为应用防御联盟的合作伙伴,我们仍将研究结果分享给了谷歌。Android 用户通过 Google Play Protect 自动保护该恶意软件的已知版本,该保护功能默认启用于 Google Play 服务的 Android 设备上。

这篇博客文章的要点:

  • PromptSpy是已知首个在执行流程中使用生成式人工智能的Android恶意软件,尽管它仅仅是为了实现持久化。
  • 谷歌的Gemini用于解析受损设备上的屏幕元素,并向PromptSpy提供动态指令,指导如何执行特定手势以保持在最近应用列表中。
  • PromptSpy的主要(非生成式AI辅助)目的是在受害者设备上部署VNC模块,使攻击者能够远程查看屏幕并执行作。
  • PromptSpy尚未在我们的遥测中被观测到,因此可能成为概念验证;然而,发现一个可能的分发域名表明存在针对阿根廷用户的变异。
  • PromptSpy 可以捕获锁屏数据、阻止卸载、收集设备信息、截图、录制屏幕活动作为视频等多种功能。

PromptSpy 的 AI 驱动功能

尽管PromptSpy仅在其中一个功能中使用了Gemini,但它仍然展示了如何通过整合这些AI工具使恶意软件更具动态性,为威胁行为者提供了自动化传统脚本难以实现的行动方式。

正如前面简要提到的,Android 恶意软件通常依赖硬编码的屏幕功能,如点击、坐标或界面选择器——这些方法可能在不同设备、作系统版本或厂商皮肤之间的用户界面变化中出现故障。PromptSpy 旨在通过执行“锁定最近应用中的应用”手势(完整流程见分析部分),从而保持在近期应用列表中的持久性,该作因设备和厂商而异。这使得使用安卓恶意软件传统使用的固定脚本实现自动化变得困难。

因此,PromptSpy 采取了完全不同的方式:它向 Gemini 发送一个自然语言提示,同时还附带当前屏幕的 XML 转储,让 AI 能够详细查看每个界面元素:文本、类型以及在显示器上的精确位置。

Gemini 处理这些信息后,会用 JSON 指令回应,告诉恶意软件该执行什么动作(例如窃听)以及在哪里执行。恶意软件会保存之前的提示和Gemini的回复,使Gemini能够理解上下文并协调多步交互。

图1展示了PromptSpy与Gemini通信初始化的代码片段,包括第一个使用的提示。通过将决策权交给 Gemini,恶意软件能够识别正确的界面元素并执行相应手势,即使用户试图关闭它,恶意软件依然存在。

Figure 1. Malware code snippet with hardcoded prompts
图1。带有硬编码提示的恶意软件代码片段

PromptSpy 会持续提示 Gemini,直到 AI 确认应用已被成功锁定,这显示出一个反馈循环,恶意软件等待验证后才继续。

PromptSpy 概述

2026年2月,我们发现了一个此前未知的安卓恶意软件家族的两个版本。第一个版本,我们命名为VNCSpy,于1月13日在VirusTotal上发布th2026年,并由三个来自香港的样本代表。2月10日th2026年,来自阿根廷的四个基于VNCSpy的更高级恶意软件样本被上传到VirusTotal。

我们对阿根廷样本的分析发现,存在多阶段恶意软件,带有恶意载荷,滥用了谷歌的Gemini。基于这些发现,我们将该恶意软件的第一阶段命名为PromptSpy投放器,其负载为PromptSpy。

需要注意的是,我们还没有在遥测中看到PromptSpy下注器或其有效载荷的任何样本,这可能表明它们只是概念验证。然而,基于以下段落所述可能的分布域的存在,我们不能排除PromptSpy投放器和PromptSpy在现实中存在的可能性。

根据VirusTotal的数据,所有四个PromptSpy滴管样本均通过网站mgardownload[.]com分发;在我们的分析过程中,该网站已经离线。

安装并启动 PromptSpy dropper 后,它打开了一个托管在 m-mgarg[.]com 上的网页。尽管该域名也已离线,Google 缓存版本显示它很可能冒充了一个 Chase Bank(合法称为 JPMorgan Chase Bank N.A.)网站(见图 2)。

Figure 2. Google’s cached data for the fake website
图2。谷歌为虚假网站缓存的数据

该恶意软件使用了类似的品牌标识,应用名为MorganArg,图标灵感来自大通银行(见图3)。MorganArg很可能是“Morgan Argentina”的简写,也作为缓存网站名称出现,暗示其区域性定位重点。

Figure 3. Dropper requests permission to install unknown apps to proceed with PromptSpy installation
图3。Dropper 请求安装未知应用的权限以继续安装 PromptSpy

我们用的是m-mgarg[.]com域名在VirusTotal中转向,这又引出了另一个Android恶意软件示例(Android/Phishing.Agent.M)。VirusTotal 以西班牙语展示了伪造网站,并配有登录按钮,表明该页面很可能是模仿银行网站的(见图4)。

Figure 4. User interface of Android Phishing Agent M
图4。Android/Phishing.Agent.M 的用户界面显示与 PromptSpy 投放器相同的假网站(来源:https://www.virustotal.com/gui/file/4ee3b09dd9a787ebbb02a637f8af192a7e91d4b7af1515d8e5c21e1233f0f1c7/

该木马似乎是由同一威胁行为者开发的配套应用,同时也是VNCSpy和PromptSpy背后的。在后台,木马联系服务器请求配置文件,配置文件中包含下载另一个APK的链接,向受害者展示为西班牙语更新。在我们的研究中,配置服务器已无法访问,因此确切的下载URL仍然未知。然而,鉴于它使用了相同的独特银行伪造网站、相同的应用名称、图标,最重要的是,与PromptSpy投放器签署的开发者证书相同——我们强烈怀疑该应用可能是引导受害者安装PromptSpy的初步步骤。

VNCSpy和PromptSpy都包含VNC组件,一旦受害者启用无障碍服务(见图5),即可远程访问受损设备。这使得恶意软件作者能够看到设备上的所有动态,并能像亲手握手机一样进行点击、滑动、手势和文字输入。

Figure 5. PromptSpy requests the victim to allow Accessibility services
图5。PromptSpy请求受害者允许无障碍服务

除了VNCSpy已有的恶意功能外,PromptSpy还增加了AI辅助的UI作,通过将恶意应用置顶在最近应用列表中来帮助保持持久性(锁定在列表中的示例可见图6)。

Figure 6. Not locked (left) and locked (right) MorganArg app in the list of recent apps
图6。在最近应用列表中,MorganArg应用未锁定(左)和MorganArg应用被锁定(右),挂锁图标代表锁

我们认为该功能是在建立 VNC 会话之前使用,这样用户或系统不会从最近应用列表中杀死 PromptSpy 活动。在图7中,你可以看到PromptSpy与Gemini AI的网络通信。

Figure 7. Network communication of malware and Gemini (1)
图7。恶意软件和Gemini的网络通信,要求和响应以红色矩形显示

起源

在分析PromptSpy时,我们注意到它包含了用简体中文编写的调试字符串。它甚至包括处理各种中文无障碍事件类型的处理(见图8),这是一种在代码中被禁用但未被移除的调试方法。该方法的主要目的是为安卓设备上发生的各种无障碍事件提供本地化(中文)解释。这使得事件日志对讲中文的用户或开发者来说更易理解,而不仅仅是显示原始整数代码。

Figure 8. Parsing and logging various event types
图8。解析和记录各种事件类型

这些细节中等自信地表明,PromptSpy是在讲中文的环境中开发的。

分析

我们的技术分析聚焦于 PromptSpy 滴管及其载荷 PromptSpy。PromptSpy 嵌入(app-release.apk)在投放器的资产目录中。该APK包含核心的恶意功能。当投放器启动时,会显示提示,提示用户安装看似更新版本的应用。这个“更新”实际上是PromptSpy负载,用户必须手动安装(见图9)。

Figure 9. Malware’s initial screen that requests to install PromptSpy payload
图9。恶意软件请求安装PromptSpy负载的初始界面

安装并启动后,PromptSpy 会请求无障碍服务权限,使恶意软件能够读取屏幕上内容并执行自动点击。

然后 PromptSpy 在前景显示一个简单的加载式诱饵屏幕(见图 10)。与此同时,在后台,它开始与 Gemini AI 通信,获取将进程锁定在“最近应用”列表中的指令——这是一种简单的持久化技术,使 PromptSpy 即使在设备重启后也能保持活跃并锁定。

Figure 10. Overlay decoy activity
图10。叠加诱饵活动

当用户看到“加载中,请等待”活动时,PromptSpy 会使用无障碍服务打开“最近应用”界面,收集详细的 UI 信息:可见文本、内容描述、类名、包名和屏幕边界。它将这个动态界面快照序列化为 XML,并在提示词中包含给 Gemini。随后,Gemini 返回了逐步的点击作,教你如何实现“应用锁定”手势。

该过程形成一个连续的循环:

  • PromptSpy 向 Gemini 发送更新后的界面上下文
  • 双子座用新的行动回应
  • PromptSpy 执行这些内容并返回生成的屏幕状态

这个循环会持续,直到 Gemini 确认该应用在最近的应用中成功锁定。这里有一个示例结构:

  • 提示:您是一名安卓自动化助理。用户会给你当前界面的 XML 数据。你需要分析 XML 并输出 JSON 格式的作指令,以实现用户的目标。\nXML 中的节点包含格式为 ‘[left,top][right,bottom]’ 的 bounds 属性。你需要计算中心坐标来生成点击指令。\n\n*** 核心判断规则 ***\n1.**不要猜测任务已完成**。只有在当前界面XML中明显看到成功的视觉证据(例如,出现“已保存”、“成功”、切换状态变为checked=\“true\”,或屏幕已导航到目标状态)时,才返回“已完成”。\n2。如果你执行了最后一步,但当前XML还没有反映结果,请返回“IN_PROGRESS”并作“NONE”(或等待)以便在下一周期检查新的UI状态。\n3。如果不确定,保持“IN_PROGRESS”并尝试核实。\n4.如果当前界面的XML是空的,请使用“RECENTS”访问最近的应用列表。\n\n你可以用SWIPE来滚动\/滑动查找目标:\n当action_type = \“SWIPE\”时,你必须提供x1,y1,x2,y2,duration_ms.g.,向上滚动:从下滑到上(y2 < y1)。\n\n请严格遵循此JSON输出格式, 请勿输出任何Markdown标签或额外文本:\n{\n \“status\”: \“IN_PROGRESS\” | \“已完成\” | \“不可能\”,\n \“reasoning\”: \“详细说明:我看到屏幕上具体的文本或状态,判断任务已完成或需要下一步<已编辑>用户目标:将当前MorganArgs应用锁定在最近应用列表中。设备信息:<设备型号>\n\n当前UIXML:<UI>
  • Gemini的回复(作指令):status\“: \”IN_PROGRESS\“,\n\”reasoning\“: \”我已访问最近的应用列表。我能在最近的应用里看到“MorganArgs”。下一步是长点“MorganArgs”应用卡,打开选项菜单,菜单中应该包含锁定选项。\“,\n \”action_type\“: \”LONG_CLICK\“,\n \”x\“: 586,\n \”y\“: 1126,\n \”x1\“: -1,\n \”y1\“: -1,\n \”x2\“: -1,\n \”y2\“: -1,\n \”duration_ms\“: -1\n)
  • 恶意软件后续更新的屏幕结果:之前的作已执行。这是新的界面XML,请确认任务是否完成或提供下一条指令:<当前可见活动>

Gemini 建议的所有作——点击、滑动、导航——都通过无障碍服务执行,使恶意软件无需用户输入即可与设备交互。

PromptSpy 的主要恶意功能在于其内置的 VNC 服务。这使得攻击者能够实时远程查看受害者的屏幕,并完全控制设备。

该恶意软件通过其硬编码的命令控制(C&C)服务器(54.67.2[.]使用VNC协议的84;这些消息通过硬编码密钥进行AES加密。通过该通信渠道,恶意软件可以:

  • 接收Gemini API密钥,
  • 上传已安装的应用列表,
  • 拦截锁屏的PIN码或密码,
  • 将图案解锁画面录制为录像,
  • 报告屏幕是开还是关,
  • 报告当前的前景应用,
  • 记录服务器指定的应用屏幕和用户手势,
  • 按需截图。

PromptSpy 还滥用无障碍服务作为反删除机制。当用户尝试卸载该负载或禁用无障碍服务时,恶意软件会在特定屏幕区域叠加透明矩形——尤其是在包含停止、结束、清除和卸载等子字符串的按钮上方。这些叠加层对用户不可见,但会拦截交互,使移除变得困难。在图11中,我们运行了PromptSpy,并启用了由开发者保留的调试标志,该标志会设置透明矩形的颜色,以便可视化它们具体显示的位置。但在实际设备上,它们是完全隐形的。

Figure 11. Invisible rectangles (displayed in color for clarity) covering specific buttons (1)
图11。隐形矩形(为清晰显示为彩色)覆盖特定按钮

由于PromptSpy通过在屏幕上叠加看不见的元素来阻止卸载,受害者唯一能移除该功能的方法是将设备重启到安全模式,在那里第三方应用会被禁用,可以正常卸载。

进入安全模式时,用户通常应按住电源键,长按关机键,并确认重启至安全模式提示(具体方法因设备和厂商而异)。手机在安全模式下重启后,用户可以进入 MorganArg → → 应用设置,直接卸载,不会受到干扰。

结论

PromptSpy显示,Android恶意软件正以一种阴险的方式演变。通过依赖生成式人工智能来解读屏幕元素并决定如何与之交互,恶意软件几乎可以适应遇到的任何设备、屏幕大小或界面布局。它不再硬编码点击,而是直接将屏幕快照交给 AI,并获得精准的逐步交互指令,帮助它实现对界面变化抗拒的持久化技术。

更广泛地说,这场活动展示了生成式人工智能如何让恶意软件更加动态,具备实时决策能力。PromptSpy是生成式AI驱动的Android恶意软件的早期例子,它展示了攻击者开始迅速滥用AI工具以提升影响力。

如对我们在WeLiveSecurity上发布的研究有任何疑问,请通过 threatintel@eset.com 联系我们。

ESET研究提供私人APT情报报告和数据流。如对此服务有任何疑问,请访问ESET威胁情报页面。

国际象征委员会

全面的入侵指标(IoC)和示例可在我们的GitHub仓库中找到。

文件

SHA-1文件名检测描述
6BBC9AB132BA066F63676E05DA13D108598BC29Bnet.ustexas。myavlive.apkAndroid/Spy.VNCSpy.AAndroid VNCSpy恶意软件。
375D7423E63C8F5F2CC814E8CFE697BA25168AFANLL4.un7o6。q38l5.apkAndroid/Spy.VNCSpy.AAndroid VNCSpy恶意软件。
3978AC5CD14E357320E127D6C87F10CB70A1DCC2ppyzz.dpk0p。ln441.apkAndroid/Spy.VNCSpy.AAndroid VNCSpy恶意软件。
E60D12017D2DA579DF87368F5596A0244621AE86mgappc-1.apkAndroid/Spy.promptSpy.AAndroid PromptSpy 下拉器。
9B1723284E311794987997CB7E8814EB6014713Fmgappm-1.apkAndroid/Spy.promptSpy.AAndroid PromptSpy 下拉器。
076801BD9C6EB78FC0331A4C7A22C73199CC3824mgappn-0.apkAndroid/Spy.promptSpy.AAndroid PromptSpy 下拉器。
8364730E9BB2CF3A4B016DE1B34F38341C0EE2FAmgappn-1.apkAndroid/Spy.promptSpy.AAndroid PromptSpy 下拉器。
F8F4C5BC498BCCE907DC975DD88BE8D594629909应用发布。APKAndroid/Spy.promptSpy.A安卓提示Spy。
C14E9B062ED28115EDE096788F62B47A6ED841ACmgapp.apkAndroid/Phishing.Agent.M安卓钓鱼恶意软件。

网络

知识产权领域托管服务提供商首次出现详情
52.222.205[.]45m-mgarg[.]comAmazon.com 公司2026‑01‑12钓鱼网站。
54.67.2[.]84Amazon.com 公司C&C服务器。
104.21.91[.]170mgardownload[.]comCloudflare公司2026‑01‑13发行网站。

MITRE AT&CK 技术

本表使用了 MITRE ATT&CK 框架的第 18 版构建。

战术身份证名称描述
持久性T1398启动或登录初始化脚本PromptSpy 在设备启动时收到BOOT_COMPLETED广播意图激活。
T1541前景持久性PromptSpy 使用前景持久化来保持服务运行。
防御规避T1516输入注入PromptSpy滥用无障碍服务以防止其被移除。
凭证访问T1417.002恶意第三方键盘应用:图形界面输入捕获PromptSpy 可以拦截 Android 锁屏的 PIN 码和密码。
发现T1426系统信息发现PromptSpy 获取设备名称、型号和作系统版本。
收藏T1418软件发现PromptSpy 可以获取已安装应用程序的列表。
T1513屏幕截图PromptSpy 可以录制屏幕。
指挥与控制T1663远程访问软件PromptSpy 可以利用 VNC 远程控制被攻破的设备。
T1521.001标准密码协议:对称密码学PromptSpy 通过 AES 加密 C&C 通信。
外流T1646通过C2通道的撤离PromptSpy 可以将收集到的数据导出到 C&C 服务器。