文章总结: 本文剖析Steam假入库灰产陷阱,攻击者以低价诱导用户运行恶意脚本,利用DLL劫持植入恶意组件,劫持进程窃取用户JWT令牌等敏感信息。火绒安全指出该程序具备云端控制特性,建议用户彻底卸载重装Steam,删除特定目录与注册表项,切勿轻信非官方低价工具以防范账号失窃风险。
综合评分: 94
文章分类: 恶意软件,应急响应,逆向分析,威胁情报,安全意识
请勿轻信低价骗局!Steam假入库灰产陷阱手法剖析
火绒安全
2025年10月27日 19:17
北京
近期,我们监测到一类通过低价出售Steam游戏激活码的恶意攻击活动。攻击者通过伪装官方工具诱导用户执行恶意脚本,进而植入恶意组件并窃取用户信息。
查杀图
Steam 是一款游戏整合平台,其平台的部分游戏商品需用户付费“入库”后才能游玩。目前,网络上存在一类售价远低于官方渠道的Steam游戏激活码,且商家宣传其是 “正版游戏”“永久激活”“绝非共享”等承诺。
商家描述图
部分商家会明确告知其激活码需借助第三方软件运行;另有部分商家通过具有欺骗性的宣传话术诱导消费者,让消费者误以为其所售产品是官方正版密钥,进而促成购买。
在完成购买后,商家会向用户发送一个伪装为Steam官方提供的软件或命令行工具,要求用户运行该工具后,再向Steam客户端中输入其提供的“正版激活码”以完成“入库”。
使用说明图
目前,火绒安全软件已具备对该程序的核心组件及网络连接进行拦截查杀的能力。若您尚未安装火绒安全软件且系统已经受到影响,建议您参考下方我们提供的手动清理案:
[1]建议彻底卸载、删除 steam 客户端及文件,然后重新安装并执行步骤[4]。
[2]尽快删除 steam 客户端根目录下的 hid.dll 和 zlib1.dll 。
[3]在资源管理器中输入 %APPDATA% 并删除 Stool 目录以清理衍生文件。
[4]在注册表中清理HKEY_CURRENT_USER\Software\Valve\Steam\Steamtools键来清理衍生注册项。
[5]在 steam 根目录下删除 steam.cfg 来还原官方客户端配置,使官方客户端能够正常安全更新。
一、准备流程分析
商家首先会要求用户运行其提供的第三方程序或脚本,这些程序或脚本通常会伪装成Steam平台官方工具。本文以商家提供的PowerShell脚本为例,商家会指示用户在终端中运行其提供的PowerShell脚本,具体代码如下:
其中irm 为从对应的网址下载内容, iex 为将前面下载的内容作为 PowerShell 脚本执行。
其执行流程图如下:
通过irm 下载的脚本主要内容如下:
PowerShell脚本主要内容
文字版描述脚本运行逻辑如下:
-
删除a.ps1(部分版本通过a.ps1文件运行)。
-
创建%APPDATA%\Stool 目录。
-
通过注册表读取Steam 路径并终止正在运行的 Steam 进程。
-
从gitee 仓库下载 legit, appdata.vdf,hid.dll,zlib1.dll 文件并解密。
-
删除Steam 路径中的 steam.cfg,version.dll,user32.dll 文件 (其他版本的假入库利用文件)。
-
修改loginusers.vdf 文件中 WantsOfflineMode = 0 来关闭离线模式。
-
修改config.vdf 中 DisableShaderCache = 1 来关闭着色器缓存。
-
通过steam://open/activateproduct 来打开 Steam 并启动激活窗口。
利用hid.dll 篡改程序执行流程是网络灰黑产常用手段,因其隐蔽性和优先级高、实施简单且兼容性好,深受黑灰产从业者青睐。
由于hid. dll 是 steam 客户端运行必需的系统 DLL动态链接库,脚本将伪造的 hid.d1 放在与 steam 可执行文件相同的目录中。系统会优先加载该目录下的 hid..1,而非系统路径中的原始文件。通过这种优先加载机制,伪造的hid.dll 可以在 steam 初始化前执行其代码,从而篡改客户端的运行逻辑。
HID.DLL代码
该hid.dll 携带由已注册公司提供、状态正常的签名,公司信息为“临沂追风艾美信息科技有限公司”。
状态正常的签名信息
当Steam客户端运行后,其会自动加载hid.dll。该文件首先从系统路径载入原有的hid.dll,以确保相关程序功能正常运行;随后对先前释放的appdata.vdf文件进行解密与解压,并在内存中直接执行所得到的DLL动态链接库文件。
由于此DLL由appdata.vdf解密并解压生成,下文将其称之为appdata.dll。
该appdata.dll 文件读取其内存中的一系列 hash字符串并将其在内存中解码为新的 DLL动态链接库文件,然后在内存中不落地执行该终DL动态链接库,我们将其称为unpackerdll。然后, wnpacker.dll 读取 legit 文件并在解密解压后内存执行,我们将其称为1egit.dll。后,核心动态链接库1egit.dll 执行程序的主要逻辑。此时,程序中共有 3个内存 DLL文件(Memory-PE)。
内存中DLL文件表
二、核心流程分析
核心动态链接库文件legit.dll 的主要逻辑代码均由代码虚拟化保护壳保护,分析难度较高。
[1]程序在Steam 进程空间中劫持系统库、加密库、UI库、客户端库的执行逻辑。
程序劫持的程序流程表
[2]程序请求托管在公开网站上的数据,获取可更新的服务器地址。
首先,程序从内存中解密、生成配置并解析配置来控制后续的行为。
内存中生成的数据
解密后的数据包含用于替换用户数据的Steam用户ID、存储云控配置所在的GitHub仓库路径与分支信息、待启用功能特性以及访问时使用的UA等配置参数。
配置中还包含多个镜像地址,用于确保全球不同地区均可访问获取云控配置数据。程序将通过访问指定的代码仓库来下载经过加密的云控配置文件。
云控原始数据
[3]程序在本地生成数据库,将劫持得到的Steam数据保存到本地。
程序运行时会把本地数据以加密sqllite数据库的方式保存到 %APPDATA%\stool目录中的info,info-journaljnfg-wal 文件中。其中info 应为加密后的数据库长期存储文件,info-journal 和info-wal 是在 sgllite数据库操作的过程中产生的临时文件,程序会在使用后立即删除。
产生的文件
经过对程序逻辑的详细分析后,解析得到程序数据库文件结构如下:
程序数据库文件结构
程序可以通过劫持crypt32.CryptUnprotectData 的方式过滤获取所有将解密的密钥数据,使得用户数据不再安全,并将用户的敏感信息字段: AuthSessionTicket 的二进制源数据,jwt 的完整字符串数据完整保存到数据库中。
AuthSessionTicket 是 Steam 中的用户身份验证令牌,持有令牌后可以使用用户的账户请求任意 Steam API ,从而窃取账户所有权。在Steam平台用户数据中 jwt 全称 JSON Web Token ,持有者可以获得 Steam 账户的登录权限,从而窃取账户所有权。
将插入JWT事务提交到数据库中
其中插入语句如下:
插入语句
程序所收集的JWT数据包含用户的完整令牌以及与之对应的数字签名信息,其过期时间约为八个月,并且具备更新(renew)权限。
收集到的JWT数据格式
收集到的JWT数字签名信息
此外,程序会获取并保存一系列用户数据至其自身数据库,同时通过该数据库保存自身的数据及配置信息。
[4] 用户通过激活码兑换游戏时,程序劫持原本控制流并下发虚假的清单文件。
为了确保灰产手法不被复现,此处简略叙述该方案。
在Steam平台中,每个游戏对应一个 depot (仓库),其中每个下发给用户的版本对应一个 manifest (清单)。在平台用户获取了对应游戏的所有权后,平台才将对应的 manifest 资源和解密密钥下发给对应的用户,从而使得用户可以下载和启动对应版本的游戏资源。
该“假入库”程序借助修改Steam客户端代码的手段,使客户端得以获取“数据来源账户”所购买游戏的清单(manifest)以及对应的授权密钥,进而借助“数据来源账户”的数据来下载并启动相应版本的游戏资源。由于仅在Steam客户端实施了相关欺骗行为,实际上云端并无供游戏提供方获取的对应真实数据,因此通过此方式下载并启动的游戏仅可使用离线游戏功能。
其在密钥激活时,通过隐蔽TCP且加密请求的方式携带用户的数据和机器特征信息请求服务器地址45.207.10.185来从服务器下载与密钥对应的游戏数据文件。
创建与服务端的连接时,程序会收集用户的一系列关联信息例如用户名、机器特征等并上传。此处通过监控程序中OpenSSL 库的 AES128 解密函数可以获取程序的请求:
图中的代码可以通过 55 53 56 57 8B 4C 24 1C 83 F9 00 0F 84 D4 01 00 00 特征码来定位。
携带机器码和用户信息的请求格式
用于获取游戏假清单的请求格式
返回的格式如下:
游戏数据返回格式
其中 user 和 AppOwn 为“数据来源用户”的名称和 Steam ID 。
通过相关平台查询,发现“数据来源用户”的信息如下:
数据来源用户信息
[5]程序按照时间生成序列化的数据,目标地址为服务器地址。
即便未进行激活操作,程序亦持续处于活跃状态,且准备将要被发送到目标服务器的序列化数据代码。
准备在队列中将要被发送的数据
数据以队列的方式在内存中准备,每条数据携带其生成时的时间戳和将被发送的加密数据,队列中可见 SteamId ,features 等字段,推测这些数据为分散式队列加密发送程序在运行期间所收集到的信息。
抓包加密数据图
[6]程序修改Steam配置项禁用自动更新。
通过设置Steam 根目录 \steam.cfg 中 BootStrapperInhibitAll = Enable 的方式,禁用Steam 客户端自动更新,防止程序失效。
禁用Steam客户端自动更新
三、关键风险总结
[1] 部分售卖该程序的商家在发布或推销时通过模糊的说辞欺骗并诱导用户下载程序。
[2] 程序通过修改 Steam 客户端的方式提供服务,通过恶意手段破坏官方客户端的安全性以实施注入操作,使用户数据陷入风险。
[3] 程序将用户的敏感数据,甚至是登录令牌收集至自身数据库进行存储与传输。
[4] 程序所采用的一系列运行方式与病毒的行为特征极为相似。
[5] 程序配置可以由云端服务器随时修改控制,存在极强的安全隐患。
从Gitee 仓库日志能够得知,在文章完成定稿的前 14 天,作者仍通过云端仓库对下发的数据进行修改。
云端仓库下发数据
四、附录
HASH:
HASH
C&C:
C&C
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:火绒安全 《请勿轻信低价骗局!Steam假入库灰产陷阱手法剖析》