0x1 前言
某宝上有不少商家以极低的价格出售“游戏激活码”,诱导想低价购买游戏的玩家购买。最近有朋友购买一款游戏后,商家给激活码后声称:需要使用激活软件激活,我意识到这绝不是正常的激活,风险极大,于是建议退款,并要来了软件尝试分析一波。虽然本人纯小白,但IDA能翻译成伪C代码,便想尝试一番。
商家给了:
- 激活码(尝试激活入库发现是假的)
steambeta.exe
(声称为激活软件)
0x2 激活软件逆向
steambeta.exe
64位程序,Exeinfo查壳:
无壳,IDA打开软件进行分析
程序入口函数start()
首先调用了sub_140188460()
函数,进入函数,F5
查看伪代码:
这里是计算_security_cookie
的地方,_security_cookie
是编译器的保护机制,对我们的目标没有帮助
接着进入sub_140187A60()
函数:
其中对程序当前环境做了测试,大部分都是做一些计算,并使用了之前的_security_cookie
计算新的变量,没有实际功能
关键语句是v0 = sub_1400041D4();
,进入函数
查看一下sub_140005C70()
对传入的字符串进行一些操作,根据上下文推测是复制操作,将传入的Unicode字符串a2
复制到_QWORD* a1
中,
这里定义了四个Unicode字符串,这里的三个链接是阿里云存储服务的链接,看样子接下来需要下载一些东西,这就非常危险了!
接下来一部分是对进程进行扫描,这里首先通过CreateToolhelp32Snapshot
创建了一个进程快照v1
,用于保存当前所有的进程,然后使用lstrcmpW
对其中的进程名逐个进行比较,如果是steam.exe
则强行将其结束,最后关闭进程快照句柄
这里使用shell
运行命令cmd /c TASKKILL /F /IM "steam.exe"
再次对steam.exe
进行了终止,防止复活?
接着是一个处理注册表的函数sub_140003050()
,伪代码:
这里检测了是否有注册表HKEY_CURRENT_USER\\Software\\Valve\\Steam\\ActiveProcess
,如果有,则打开注册表项取出键SteamClientDLL
的值到Data
,随后进行一些操作,得到Steam安装路径
接着是一个函数sub_140003354()
,检测是否存在路径C:\\Users\\UserName\\AppData\\Local
,并获取该路径
接下来继续对电脑环境进行检测,如图所示很明显,检测的有:
- 是否安装steam
- 是否运行有360杀毒软件(问题更大了!)
通过检测是否存在SteamInstallationPath\\steam.exe
来检测是否安装Steam
其中360Tray.exe
和360sd.exe
两部分是差不多的,查询是否存在这两个进程,如果存在则弹出弹窗并终止
接下来传入了上面得到的Steam根目录和AppData\\Local
根目录,对其中文件夹做一些验证,sub_140003F28()
如下:
这部分代码在Steam根目录下创建了文件夹depotcache, appcache, logs
在AppData\\Local
中创建了文件夹steamActive
对于3个dll文件和MyTemp
文件夹,如果存在则设置文件属性为NORMAL,并删除文件。这一步是为了删除原有的dll文件,重新下载云端被修改过的dll文件
接下来出现了两部分相似的代码,看字符串就知道是要下载新文件了,通过分析得知,先获得完整的文件下载路径,和目标文件路径,随后传入sub_14003860()
进行下载:
进函数一看,果然有curl -o
,这里就是将两个文件:
http://xxx.com/dwf/H
下载到SteamInstallationPath\\hid.dll
http://xxx/com/dwf/hid
下载到C:\\Users\\UserName\\AppData\\Local\\steamActive\\hid
最后通过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
运行软件,提示缺失自带Windows文件!
,IDA中找到其中部分字符串:
虽然没有找到引用,但是在附近地址发现了和curl.exe
相关的字符串
一搜索果然Win7虚拟机中没有curl.exe
,前往官网https://curl.se/windows/下载压缩包,把可执行程序复制到C:\\Windows\\System32
和C:\\Windows\SysWOW64
中
最后打开steam的部分是通过注册steam:
协议实现的,可以手动注册一个URL Protocol来模拟
再次运行软件,成功获取了两个hid文件,文件夹也成功创建,说明上文分析的流程没有问题!
这两个hid
文件只有1KB,用记事本打开发现是一段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:支持正版游戏!支持购买打折游戏!