商家Steam游戏激活软件分析
本帖最后由 jjjzw 于 2023-11-25 10:24 编辑## 0x1 前言
某宝上有不少商家以极低的价格出售“游戏激活码”,诱导想低价购买游戏的玩家购买。最近有朋友购买一款游戏后,商家给激活码后声称:需要使用激活软件激活,我意识到这绝不是正常的激活,风险极大,于是建议退款,并要来了软件尝试分析一波。虽然本人纯小白,但IDA能翻译成伪C代码,便想尝试一番。
商家给了:
1. 激活码(尝试激活入库发现是假的)
2. `steambeta.exe`(声称为激活软件)
## 0x2 激活软件逆向
`steambeta.exe`64位程序,Exeinfo查壳:
[!(https://z1.ax1x.com/2023/11/23/piddQQU.png)](https://imgse.com/i/piddQQU)
无壳,IDA打开软件进行分析
程序入口函数`start()`
[!(https://z1.ax1x.com/2023/11/23/piddtF1.png)](https://imgse.com/i/piddtF1)
首先调用了`sub_140188460()`函数,进入函数,`F5`查看伪代码:
[!(https://z1.ax1x.com/2023/11/23/pid0hZQ.png)](https://imgse.com/i/pid0hZQ)
这里是计算`_security_cookie`的地方,`_security_cookie`是编译器的保护机制,对我们的目标没有帮助
接着进入`sub_140187A60()`函数:
[!(https://z1.ax1x.com/2023/11/23/pid04aj.png)](https://imgse.com/i/pid04aj)
其中对程序当前环境做了测试,大部分都是做一些计算,并使用了之前的`_security_cookie`计算新的变量,没有实际功能
关键语句是`v0 = sub_1400041D4();`,进入函数
查看一下`sub_140005C70()`
[!(https://z1.ax1x.com/2023/11/24/piwMnL6.png)](https://imgse.com/i/piwMnL6)
对传入的字符串进行一些操作,根据上下文推测是复制操作,将传入的Unicode字符串`a2`复制到`_QWORD* a1`中,
这里定义了四个Unicode字符串,这里的三个链接是阿里云存储服务的链接,看样子接下来需要下载一些东西,这就非常危险了!
[!(https://z1.ax1x.com/2023/11/23/pid0oin.png)](https://imgse.com/i/pid0oin)
接下来一部分是对进程进行扫描,这里首先通过`CreateToolhelp32Snapshot`创建了一个进程快照`v1`,用于保存当前所有的进程,然后使用`lstrcmpW`对其中的进程名逐个进行比较,如果是`steam.exe`则强行将其结束,最后关闭进程快照句柄
[!(https://z1.ax1x.com/2023/11/23/pid05Is.png)](https://imgse.com/i/pid05Is)
这里使用`shell`运行命令`cmd /c TASKKILL /F /IM "steam.exe"`再次对`steam.exe`进行了终止,防止复活?
[!(https://z1.ax1x.com/2023/11/24/piwMMdO.png)](https://imgse.com/i/piwMMdO)
接着是一个处理注册表的函数`sub_140003050()`,伪代码:
[!(https://z1.ax1x.com/2023/11/23/pid0Wqg.png)](https://imgse.com/i/pid0Wqg)
这里检测了是否有注册表`HKEY_CURRENT_USER\\Software\\Valve\\Steam\\ActiveProcess`,如果有,则打开注册表项取出键`SteamClientDLL`的值到`Data`,随后进行一些操作,得到Steam安装路径
[!(https://z1.ax1x.com/2023/11/24/piwMmsx.png)](https://imgse.com/i/piwMmsx)
接着是一个函数`sub_140003354()`,检测是否存在路径`C:\\Users\\UserName\\AppData\\Local`,并获取该路径
接下来继续对电脑环境进行检测,如图所示很明显,检测的有:
1. 是否安装steam
2. 是否运行有360杀毒软件(问题更大了!)
[!(https://z1.ax1x.com/2023/11/24/piwMKeK.png)](https://imgse.com/i/piwMKeK)
通过检测是否存在`SteamInstallationPath\\steam.exe`来检测是否安装Steam
其中`360Tray.exe`和`360sd.exe`两部分是差不多的,查询是否存在这两个进程,如果存在则弹出弹窗并终止
[!(https://z1.ax1x.com/2023/11/24/piwMeQ1.png)](https://imgse.com/i/piwMeQ1)
接下来传入了上面得到的Steam根目录和`AppData\\Local`根目录,对其中文件夹做一些验证,`sub_140003F28()`如下:
[!(https://z1.ax1x.com/2023/11/23/pidBmFA.png)](https://imgse.com/i/pidBmFA)
这部分代码在Steam根目录下创建了文件夹`depotcache, appcache, logs`
在`AppData\\Local`中创建了文件夹`steamActive`
对于3个dll文件和`MyTemp`文件夹,如果存在则设置文件属性为NORMAL,并删除文件。这一步是为了删除原有的dll文件,重新下载云端被修改过的dll文件
[!(https://z1.ax1x.com/2023/11/23/piddGw9.png)](https://imgse.com/i/piddGw9)
接下来出现了两部分相似的代码,看字符串就知道是要下载新文件了,通过分析得知,先获得完整的文件下载路径,和目标文件路径,随后传入`sub_14003860()`进行下载:
[!(https://z1.ax1x.com/2023/11/23/pidd8eJ.png)](https://imgse.com/i/pidd8eJ)
进函数一看,果然有`curl -o`,这里就是将两个文件:
1. `http://xxx.com/dwf/H`下载到`SteamInstallationPath\\hid.dll`
2. `http://xxx/com/dwf/hid`下载到`C:\\Users\\UserName\\AppData\\Local\\steamActive\\hid`
[!(https://z1.ax1x.com/2023/11/23/pidd1L4.png)](https://imgse.com/i/pidd1L4)
最后通过`start`命令来启动Steam,流程结束。
## 0x3 模拟Steam环境
在E盘中创建`Steam\`文件夹,创建如下文件:
+ `steam.exe`
+ `steamclient.dll`
+ `hid.dll`
+ `User32.dll`
+ `version.dll`
`win+r`-`regedit`打开注册表编辑器,在`HKEY_CURRENT_USER\\Software`下创建项`Valve\\Steam\\ActiveProcess`,创建字符串值:`SteamClientDLL`-`E:\Steam\steamclient.dll`
[!(https://z1.ax1x.com/2023/11/23/piddNJx.png)](https://imgse.com/i/piddNJx)
运行软件,提示`缺失自带Windows文件!`,IDA中找到其中部分字符串:
[!(https://z1.ax1x.com/2023/11/23/piddlyF.png)](https://imgse.com/i/piddlyF)
虽然没有找到引用,但是在附近地址发现了和`curl.exe`相关的字符串
[!(https://z1.ax1x.com/2023/11/23/pid0RsS.png)](https://imgse.com/i/pid0RsS)
一搜索果然Win7虚拟机中没有`curl.exe`,前往官网https://curl.se/windows/下载压缩包,把可执行程序复制到`C:\\Windows\\System32`和`C:\\Windows\SysWOW64`中
最后打开steam的部分是通过注册`steam:`协议实现的,可以手动注册一个URL Protocol来模拟
再次运行软件,成功获取了两个hid文件,文件夹也成功创建,说明上文分析的流程没有问题!
[!(https://z1.ax1x.com/2023/11/23/piddJoR.png)](https://imgse.com/i/piddJoR)
[!(https://z1.ax1x.com/2023/11/23/pid0TGq.png)](https://imgse.com/i/pid0TGq)
这两个`hid`文件只有1KB,用记事本打开发现是一段xml
```xml
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>NoSuchBucket</Code>
<Message>The specified bucket does not exist.</Message>
<RequestId>655C207C6F8C2637327FEFEF</RequestId>
<HostId>hz-config.oss-cn-hangzhou.aliyuncs.com</HostId>
<BucketName>hz-config</BucketName>
<EC>0015-00000101</EC>
<RecommendDoc>https://api.aliyun.com/troubleshoot?q=0015-00000101</RecommendDoc>
</Error>
```
原来是资源没了,拿到样本有一周了,估计已经转移到其他地方去了
## 总结
非正常添加游戏的办法有很多种,
+ 用商家账号下载游戏,steamtools共享入库
+ 通过DLL注入欺骗客户端,使得其认为你有这款游戏
+ 。。。
由于本案例没有提供账号信息,推测是采用注入的方法添加游戏的,这种方法添加的游戏在每次重新安装Steam后需要重新“激活”
后续:本人又前往某宝对线拿到了新软件,已经技术升级了,加了VMP3.5的壳,待本小白研究一番(
## 附录
`steambeta.exe`样本:https://wwch.lanzoul.com/iqn6A1fomvyd 密码:bqf7提取密码:52pojie
请勿在安装有Steam的情况下运行该软件。运行后建议卸载重装。
PS:支持正版游戏!支持购买打折游戏! 很凶险,还好不用steam 这种低于市场价,又低于史低太多的,基本上就肯定不会走正规程序,除非写明了是小白号(只有某一个或者某几个游戏的账号)这种会便宜点,别的写什么steam正版,全DLC一律默认tools注入或者离线共享账号,有想玩便宜的正版游戏,第一个建议去海鲜市场看看有没有人卖CDK,第二个可以去PY看有没有人卖CDK(CDK无法退款,请确定你是真的要玩这款游戏)。 最便宜的应该是绑定机器那种。便宜,还是正版。 本帖最后由 Jien 于 2023-11-25 10:54 编辑
支持正版游戏,支持购买打折游戏,但原价不建议。{:301_1007:}。事出反常必有妖珍惜账号 好家伙,支持正版,只买官方打折,这种渠道怎么都不正经 感谢楼主分享,支持正版 支持正版,新游戏加入关注列表,等打折,打骨折{:300_966:} 感谢,支持正版 感谢分享 很有用 学习了{:1_893:} 感觉就是木马软件了,很危险