逆向分析:被 Chrome 标记"包含恶意软件"的图片查看器扩展,实为 ChatGPT 对话窃取器
分析环境:macOS + Chrome(Manifest V3)。样本为 Chrome Web Store 官方渠道分发的商店版本,分析基于磁盘上的已安装文件(
Extensions/<扩展ID>/6.21_0/),未运行样本。
TL;DR
Chrome 弹出"此扩展程序包含恶意软件"警告的 Enhanced Image Viewer(扩展 ID gefiaaeadjbmhjndnhedfccdjjlgjhho,v6.21),表面是一个功能完善、翻译成 31 种语言的图片查看器,但其后台代码会:
- 监听你在 chatgpt.com 上的每一次发消息;
- 用你自己的登录态重新拉取整个会话内容;
- 提取你的提问原文与 AI 回复全文,连同 IP 地理信息、浏览器指纹一起;
- AES-GCM 加密后悄悄上传到厂商服务器
enhancedimageviewer.com。
而这一切在其设置页、隐私说明、31 种语言文案中零披露。商店条目已被 Google 下架。
样本信息
| 项目 | 内容 |
|---|---|
| 扩展名称 | Enhanced Image Viewer(更好的 Chrome 图片查看体验) |
| 扩展 ID | gefiaaeadjbmhjndnhedfccdjjlgjhho |
| 版本 | 6.21(Manifest V3) |
| 分发渠道 | Chrome Web Store(from_webstore=true,非侧载) |
| 商店状态 | 已下架(详情页已变为空条目) |
| 商店条目最后更新 | 2026-06-11(即当前版本至少自该日起在店分发) |
| 技术栈 | PureScript + Halogen(编译产物,非手写 JS) |
| 官网/收集端 | https://www.enhancedimageviewer.com |
申请的权限:
- API 权限:
contextMenus、storage、webNavigation、webRequest、scripting、declarativeNetRequest - Host 权限:
<all_urls> - 内容脚本:
<all_urls>+document_start(所有页面最早时机注入)
表面功能:伪装非常"正经"
抛开后台不谈,它的前台确实是个完成度很高的产品:
- 点击图片放大、缩放、旋转、拖动,带多语言教程页、changelog 页、联系页;
- 内置一条
declarativeNetRequest重定向规则(Reddit 的preview.redd.it图片转直链i.redd.it),完全良性; - 代码中引用了数十个图床域名(imgur、pixiv、pinterest 及各类图床站),是图片查看器的正常兼容列表;
- 31 种语言的
_locales文案,设置页用 Halogen 框架精心搭建。
这种"真实有用 + 工程规范"的外壳,正是它能通过审核、积累用户的原因,也让恶意行为更难被普通用户察觉。
恶意行为链(background.js 逆向)
第 1 步:安装即建档,生成持久用户指纹
安装时生成一个 UUID 作为用户标识,POST /user-api/installed 上报 {userId};通过自家 /welcome-api/json 接口获取 IP 地理数据(代码中该模块就叫 DataCollection.IpApi);再叠加 userAgentData 浏览器指纹。卸载时还会带该 UUID 回调 /uninstalled/?userId=<UUID>,用于统计流失。
第 2 步:监听 chatgpt.com 的发消息动作
后台注册了两个 webRequest 监听器(均限定 frameId === 0 主框架):
onBeforeRequest过滤https://chatgpt.com/backend-api/*onCompleted过滤https://chatgpt.com/backend-api/f/conversation——这正是你在 ChatGPT 里发送一条消息时触发的接口
同时用正则 ^https://chatgpt\.com/c/<uuid>$ 从标签页 URL 提取会话 ID。也就是说:你每发一条消息,它都会知道。
第 3 步:用你的登录态拉取并解析完整会话
收到发消息事件后,它调用 https://chatgpt.com/backend-api/conversation/<会话ID> 拉取会话完整 JSON,fetch 请求显式设置 credentials: "include"——借你的登录 Cookie 访问这个只有登录用户才能访问的接口。
拿到 JSON 后遍历 mapping 消息树,沿父节点回溯配对,提取出结构化记录:
{ assistantMessageId, promptText, promptResponse, timestamp }
// assistantMessageId: 消息节点 ID(用于去重)
// promptText: 你的提问原文
// promptResponse: AI 的回复全文
// timestamp: 时间戳(只挑时间窗口内的新消息,避免重复上传)
已上传过的消息按 assistantMessageId 去重,只增量上报新对话。
第 4 步:AES-GCM 加密外传
最终载荷为:
{ userId, ipGeoData, userAgentData, conversationId, assistant: "ChatGPT", pairs: [...消息对...] }
经 AES-GCM 加密(密钥以 base64 硬编码在扩展内,IV 拼接在密文前),以 Content-Type: text/plain 的普通 POST 发往:
https://www.enhancedimageviewer.com/stats-api/update
https://www.enhancedimageviewer.com/stats-api/update-inter
https://www.enhancedimageviewer.com/stats-api/update
https://www.enhancedimageviewer.com/stats-api/update-inter
加密细节(已从扩展内硬编码常量还原):
- 算法:AES-256-GCM(32 字节 raw key,
crypto.subtle.importKey导入) - 硬编码密钥(base64,即代码中常量
BS):mXmNqOSY72M1Vs0bbGg/CYaQ4zGspd9ab6uPHjxQ/cU= - 密钥(hex):
99798da8e498ef633556cd1b6c683f098690e331aca5df5a6fab8f1e3c50fdc5 - IV:每次加密由
crypto.getRandomValues生成的 12 字节随机值,直接前置拼接在密文头部([IV(12B) || ciphertext+tag])
加密 + 伪装修文本类型,使得无论是肉眼抓包还是企业流量审计都无法直接看出传了什么——但密钥就明文放在扩展里,任何人都能提取,只有厂商能解,这正是典型的间谍软件外传手法。也因此,研究者可凭该密钥解密自己机器上捕获的上报流量,直接验证外传内容(取请求 body 前 12 字节为 IV、其余为密文与 GCM tag,用上述密钥解密即可)。
隐蔽性设计小结
- 功能外壳真实有用,权限申请(
webRequest、<all_urls>)对"图片查看器"勉强说得通; - 数据外传加密、低频、走自家域名;
- 零披露:设置页、31 种语言文案中没有任何一处提到 ChatGPT 或该数据收集行为——这是定性最关键的一点。
严谨排除项:它没有做的事
为避免误伤,以下行为经逐一排查未发现:
- ❌ 键盘记录(仅有图片查看器自身 UI 的 keydown/keyup)
- ❌ 读取
document.cookie或调用chrome.cookies - ❌ 抓取密码框/表单
- ❌ 广告注入、搜索劫持
- ❌ 远程代码加载/动态 eval(grep 到的
eval(均为 Halogen 框架component.eval()方法调用,属误报特征)
它是"专注的"数据窃取:只偷 ChatGPT 对话内容 + 使用统计 + 设备/网络指纹。
为什么这构成"恶意软件"
Chrome 商店政策对恶意软件的定义包含"与声明功能无关的隐蔽数据收集"。一个图片查看器,偷偷把你的 AI 对话原文发到自己服务器,且不做任何披露——完全落入该定义。Google 已将其商店条目下架,已安装用户的 Chrome 会收到"此扩展程序包含恶意软件"警告,属正常联动机制。
自查与处置
查自己是否装了:
- 打开
chrome://extensions,搜索gefiaaeadjbmhjndnhedfccdjjlgjhho或 "Enhanced Image Viewer"; - 或检查磁盘:macOS
~/Library/Application Support/Google/Chrome/*/Extensions/gefiaaeadjbmhjndnhedfccdjjlgjhho、Windows%LOCALAPPDATA%\Google\Chrome\User Data\Default\Extensions\gefiaaeadjbmhjndnhedfccdjjlgjhho,目录时间戳即安装/最近更新时间,可作为数据暴露窗口的起点。
处置:
chrome://extensions中直接移除(卸载回调只上报 UUID,无其他副作用);- 评估 2026 年内你在 ChatGPT 中的敏感对话(代码、密钥、内部信息、隐私)——提问与回复成对泄露;
- 它未获取密码与 Cookie,无需改密码;但 AI 对话中若出现过口令、API Key 等,按泄露处理;
- 替代品选择知名开源的图片查看扩展,安装前核对权限与功能是否匹配。
时间线与本文局限
- 商店条目最后由开发者更新于 2026-06-11,当前 6.21 版本至少自该日起分发;
- 在本次分析所用机器上,该扩展(含目录时间戳与 Chrome 安装记录)于 2026-08-01 落地;若你更早安装过旧版本,暴露窗口可能更长——旧版本是否已含此行为,本次未取证,请以自己机器上的目录时间为准;
- 分析仅覆盖 v6.21 静态代码;加密载荷的完整字段清单以代码中可确认的为准(已列)。
IOC 汇总
| 类型 | 值 |
|---|---|
| 扩展 ID | gefiaaeadjbmhjndnhedfccdjjlgjhho |
| 扩展名 | Enhanced Image Viewer (v6.21) |
| 收集服务器 | www.enhancedimageviewer.com |
| 上报端点 | /user-api/installed、/stats-api/update、/stats-api/update-inter、/welcome-api/json、/log-api/log-error、/uninstalled/ |
| 监听目标 | https://chatgpt.com/backend-api/f/conversation(onCompleted)、https://chatgpt.com/backend-api/*(onBeforeRequest) |
| 窃取数据 | ChatGPT 提问原文、AI 回复全文、会话 ID、IP 地理、UA 指纹、持久化 UUID |
| 外传特征 | AES-256-GCM,硬编码密钥 base64 mXmNqOSY72M1Vs0bbGg/CYaQ4zGspd9ab6uPHjxQ/cU= / hex 99798da8e498ef633556cd1b6c683f098690e331aca5df5a6fab8f1e3c50fdc5,12 字节随机 IV 前置拼接,Content-Type: text/plain |
PS:还好我不用web版本的chatgpt!去除ChatGPT 监听、遥测域名、卸载回传 + DNR 兜底阻断:https://github.com/Mr-xn/enhanced-image-viewer-clean







