|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
0 E8 |/ P) q: `7 N6 ]
H/ e2 |3 a# a+ g+ {* M# {# g书名:《恶意代码分析实战》! v$ K8 p! |; N8 u+ X8 F
作者:迈克尔·斯科尔斯基 (Michael Sikorski),安德鲁·哈尼克 (Andrew Honig)
# a- L+ W, s; L译者:诸葛建伟,姜辉,张光凯 # S% P) Z8 J5 D b- Z
出版社:电子工业出版社: }$ A+ j" V5 ^. } b' }: E
出版年:2014年4月1日(第1版)$ W( ? N# |* {: H- Z
定价:128.00元
4 W3 j; L% p h3 o装帧:平装
. r h: D7 ], L. H h' SISBN:9787121224683/ p8 }. ^( N$ w& m2 {) Y
& o1 R. I% s% e2 `6 n4 T% }( M购买链接:
7 W" P. E4 e* Z5 L% f0 a: M, W, o- i0 b @4 N5 g
/ L( J: W2 n* B, q' \# R9 B+ i
亚马逊 -> 传送门' I2 G6 R% T2 K5 p2 U
0 _9 y3 L. V: W! E$ P$ F当当网 -> 传送门3 `5 t0 d V- f* k$ V/ a/ m6 c* z* ?
& M2 |" C3 v5 C4 |9 @8 `9 C京东 -> 传送门) O( N. J4 |$ p7 Y, H) I, f. ~
. D8 Z8 v$ K! v7 w' s( I
天猫 -> 传送门 v2 }) ?& x7 [" K2 L( C
6 I, A2 `. ~) I; ~* I
3 _* i( m5 l5 `* u" P内容简介:
- n& O* R7 C1 }' g N
; m1 M' c1 C* w( E2 J3 J
. C3 c6 [) U+ [* n' z3 F《恶意代码分析实战》是业内公认的迄今为止最权威的一本恶意代码分析指南,《恶意代码分析实战》也是每一位恶意代码分析师都必须作为指导手册珍藏的案头必备。
$ p6 X: A/ r0 |4 _+ l% w9 Y# E" F, h% h5 W+ p9 a) H
《恶意代码分析实战》既是一本教材,也是一本动手实践的指南。不仅教会你如何分析恶意代码(技术指导),而且配了大量的实验练习、案例、答案以及详细的分析过程,同时还包含了所有用作案例的恶意代码样本,提供了丰富、安全的学习环境。
3 `! b0 @: h) l7 R
- u* [: j w I9 Z针对初学者:本书的技术内容、实验作业可以帮你渐入佳境;# j2 j8 U0 j/ l6 I
针对中级读者:本书大量的分析实践会直接带你进入更高的级别,臻入化境。3 f A' d7 }2 F- N+ A
: x: D% X7 h/ w" y7 B! s4 L6 n目录:+ Y' B' I4 k, P( A/ a. ~# L
* ?: C$ L* B) Q' n! s
+ ]: [" y9 c2 ~* s; L* L
第0章 恶意代码分析技术入门1
) X* O# _4 N1 D9 L% C. B X0 |
& @! ` o& w( P5 I6 F7 c0.1 恶意代码分析目标1
1 O# h' R( s, M4 {, H& {0.2 恶意代码分析技术2
2 Z9 q; o" A! o, u7 v" B0 O0 n% b0.2.1 静态分析基础技术2
* |# x- j4 H. l4 Z! o% t0.2.2 动态分析基础技术2
' I' _4 i5 y2 ~# |0.2.3 静态分析高级技术27 o4 M7 z- f4 d/ k- _. x9 F5 t$ Y
0.2.4 动态分析高级技术2
) |& X5 U, ]3 M0.3 恶意代码类型3
9 p [) x* t$ u' |; v9 l1 G2 L) c H0.4 恶意代码分析通用规则4( @7 D$ l% w( m$ Z, F* p
. a. ]2 A& w4 d( N: \% Q3 p
" U7 C7 V; T8 Y7 X3 J P/ J第 1 篇 静态分析
( \$ a4 a- p6 X: M3 f* k, \& s( F$ B2 q5 ? D
第1章 静态分析基础技术 6, J, U4 g" Z# i4 r+ i9 ~
1 G* D6 i& x/ I8 @1.1 反病毒引擎扫描:实用的第一步63 V7 H3 _4 ^6 E4 P/ u! Z
1.2 哈希值:恶意代码的指纹7
' e! J; {# Q+ v, D1.3 查找字符串7* z. n8 p9 Q7 U" t6 n5 C! U
1.4 加壳与混淆恶意代码92 W5 P5 V y3 b( ^! D5 B
1.4.1 文件加壳105 \/ o- |3 K" J# [2 X, _
1.4.2 使用PEiD 检测加壳10
! u/ ~" K& @- f1.5 PE 文件格式11
4 {- N# B( ^* A3 D1 k1.6 链接库与函数12' Y0 B& B5 q8 J( K
1.6.1 静态链接、运行时链接与动态链接12
9 s3 N% u0 @6 I5 v- {1.6.2 使用Dependency Walker 工具探索动态链接函数13
( q& o. h% i5 f6 J. ?, F1.6.3 导入函数14% K2 p9 C4 g b, K8 d4 X+ [' |0 N
1.6.4 导出函数15
6 z' m* W0 _3 j' w& z0 x, }: C1.7 静态分析技术实践15
7 \' r9 S8 R0 S* g1.7.1 PotentialKeylogger.exe:一个未加壳的可执行文件15' P+ c7 o d$ X9 a6 t- e& X
1.7.2 PackedProgram.exe:穷途末路18% N* U- l& z9 A7 y5 Y4 @3 Y, r/ N8 r
1.8 PE 文件头与分节18
- A5 j1 d/ l* M' I- L1 g4 X: E1.8.1 使用PEview 来分析PE 文件19
* \1 ?. }( \+ C5 V: a! ^5 i6 `& U1.8.2 使用Resource Hacker 工具来查看资源节22
% {; j$ {9 I+ X- _' O* Y! J6 W1.8.3 使用其他的PE 文件工具23
0 D/ g b0 Z; m# I. W1.8.4 PE 文件头概述23
9 D* i9 _3 o' f2 Y) m i1.9 小结248 x. W: c; S# s' \) h |
1.10 实验24
# ^6 V( Y2 B( N! Y$ T8 ^$ u) E: g6 s# \! I$ N
第2章 在虚拟机中分析恶意代码 27
4 c5 l, [* k8 j/ u: Y+ J) N0 m" X7 i) W( g0 x) W1 q! B8 B* c; k& h: B
2.1 虚拟机的结构27
6 y& K1 |+ O4 j# ~" a1 S P2.2 创建恶意代码分析机28* S) E/ ^- C. g2 s# I& Y$ ]) j
2.2.1 配置VMware295 A) C( _+ k$ r/ _+ O* y0 l
2.2.2 断开网络301 ]) d; `8 Q* ~
2.2.3 创建主机模式网络305 g( Y7 V; X7 p
2.2.4 使用多个虚拟机30
3 ^' b, S4 V4 O2.3 使用恶意代码分析机315 d' n& ]: @. P
2.3.1 让恶意代码连接互联网31, q9 C3 q8 C6 m. s1 L. d
2.3.2 连接和断开外围设备326 a+ c, q8 _* f9 {" e6 B8 C
2.3.3 拍摄快照32$ N3 c0 g4 m9 ^. J
2.3.4 从虚拟机传输文件33
7 y) U9 y; h& ?# V$ }2 ]2.4 使用VMware 进行恶意代码分析的风险34' v( S9 q8 Q- V2 i% q j! r Z
2.5 记录/重放:重复计算机运行轨迹34& p- r5 `$ S( Y1 h0 y: n' K
2.6 小结35
/ k* _* Q* t- W; M0 B" a+ b0 n% L: }4 [. i- e) m
第3章 动态分析基础技术 36
& |# X: F a7 w6 ~+ @
4 E( l) ^) C# t3.1 沙箱:简便但粗糙的方法36
8 Y7 ?4 M8 T* ?: E3.1.1 使用恶意代码沙箱36
* z, }- k( S7 m( I: w( p3.1.2 沙箱的缺点37) x' F! a2 C9 j& \; b; \( o4 k
3.2 运行恶意代码38
! }9 x ^+ z1 g7 p2 V& m3.3 进程监视器399 a4 Y+ v( P' j7 X8 E
3.3.1 进程监视器的显示40
, I2 m; D- k) \% Q" a& Q! C/ n3.3.2 进程监视器中的过滤41
% K8 J3 g: c2 f; c3.4 使用进程浏览器(Process Explorer)来查看进程43
6 N, n$ y" Z) w! l" B. ~7 x0 @ B3.4.1 进程浏览器的显示43) w; |$ i2 t- g4 A \
3.4.2 使用验证选项447 r" |$ {! i, E5 ^% s. x
3.4.3 比较字符串45' u, ^0 V0 N9 v/ V0 M, s
3.4.4 使用依赖遍历器(Dependency Walker)45; O+ W d8 R g# H7 a8 W
3.4.5 分析恶意文档46
1 M# `: `0 l( R3 e/ m3.5 使用Regshot 来比较注册表快照46
_/ `- a; t$ \1 t. ^( L4 t, u/ j; L3.6 模拟网络47! D' ^) @) Z; l+ c- z
3.6.1 使用ApateDNS477 U" w |7 I5 B& O7 T9 S, ?
3.6.2 使用Netcat 进行监视489 l5 A* T! G& {/ z
3.7 使用Wireshark 进行数据包监听49
; a' y( H X) X2 J3.8 使用INetSim51; W q. a- v( A( O+ c
3.9 基础动态分析工具实践52
6 y$ {9 u4 s; ~, t" ~. A3.10 小结55
8 j9 ]* [1 M+ G3.11 实验56) `( y5 q y; O2 @- L+ J p
+ Y0 {. z0 b% Y: c9 P( F
' Q/ n" b% b4 I! \% Q第 2 篇 静态分析高级技术篇
1 f+ P/ I5 u) L2 i+ \
% s: J6 N$ B3 d% Z第4章 x86 反汇编速成班 600 {9 C4 Q' J, M9 z; _2 d: T
5 P3 v( ~. G$ \2 W& _- p/ _; _4.1 抽象层次60
3 j; P0 l, M1 Y+ w4.2 逆向工程62
# k- V" [5 X, z4.3 x86 体系结构62) C7 _9 m: ^0 @2 c6 X6 O
4.3.1 内存63
7 |' i* _$ A. o% u' S4.3.2 指令64. P; R; C4 Z" _6 t8 O
4.3.3 操作码和字节序64$ B! i! `% U1 M3 F9 h3 h
4.3.4 操作数65! }+ N Z, j9 U' z% q1 m
4.3.5 寄存器65* b2 \" u% P- z
4.3.6 简单指令67
/ y% G% ?% X! q7 r# Z# C0 O4.3.7 栈701 x- ~) h8 N* |! g7 h9 a
4.3.8 条件指令73/ x" I" h5 \% Z/ z) q o4 n
4.3.9 分支指令73) b, |! Y) X; K) g$ z* Q
4.3.10 重复指令74( f& O# n* h$ }% h
4.3.11 C 语言主函数和偏移76
5 s( r* b# D" A& V: G/ A% F4.3.12 更多信息:Intel x86 Architecture Manual77
) S: O) {; e' i6 i/ o4.4 小结78* p R1 ?* D; {' \$ C
3 Y0 y) F7 I; M9 B* ~
第5章 IDA Pro 79
& O0 R1 ^& j+ t7 H% {1 Y Z z, T4 H- }! G8 o* b% I0 N; N; t9 S* U
5.1 加载一个可执行文件79
9 r7 x9 G- x9 {( C& l5.2 IDA Pro 接口81
7 ~. d5 V: B# Z. u5.2.1 反汇编窗口模式81) e) r+ Y3 [! U
5.2.2 对分析有用的窗口83
& M3 Z9 }$ s) m. f8 c6 w; @2 u5.2.3 返回到默认视图83
% ], F8 E& x6 T5.2.4 导航IDA Pro 83+ K1 X9 q& c5 e: n
5.2.5 搜索853 a8 y/ q3 w. ]: R e2 s1 e% r
5.3 使用交叉引用86
3 ]$ I# ?* L4 z* T' M6 @& H; r5.3.1 代码交叉引用87
; C x4 Z6 x; J6 m8 b4 s& o5.3.2 数据交叉引用88
5 Q+ z5 b$ R" r5.4 分析函数880 u6 ?6 s8 a3 X
5.5 使用图形选项89
" H9 B* S/ E9 J. Y4 m5.6 增强反汇编91
# R7 ~3 o$ u) m2 i/ i5.6.1 重命名位置91
* ?' m; O; A o' n! E* e5.6.2 注释929 P% y$ N5 o) P; C* Q9 V, ^! k2 \
5.6.3 格式化操作数92; V: w7 A7 ~% h+ _( A5 r% H* j5 D' x
5.6.4 使用命名的常量93. A) E$ p5 N$ u: k7 n8 |5 i
5.6.5 重新定义代码和数据940 n5 I4 v( g7 D: h( A
5.7 用插件扩展IDA954 O, m9 w7 z4 v ?3 w
5.7.1 使用IDC 脚本96
( e3 I9 }2 K6 ~( ]+ ^" i5.7.2 使用IDAPython97
" A g! N6 w5 n7 k, W+ Z4 D! f5.7.3 使用商业插件97
6 y1 s: }5 s' g0 y5.8 小结989 U a* B/ X1 g) P# i, N
5.9 实验98# X/ }- t- O; C, N4 g1 W+ I
$ u/ q. W. }1 E% p& _# e' `' ?0 k第6章 识别汇编中的C代码结构 100
/ A. U I% f% f, |, ]% I5 j c5 Z# j- G: {# r/ F2 F p
6.1 全局与局部变量101
3 |, b6 X7 v- p: J6.2 反汇编算术操作102: |; G4 u" u' I: n
6.3 识别if 语句104
- |( y6 n+ r5 Q7 I6 g6.3.1 用IDA Pro 图形化分析函数105' |+ U9 z# x8 Z" }
6.3.2 识别嵌套的if 语句106
) D4 i- g$ R, E) P/ h6.4 识别循环107* Y4 ]6 d) P$ a( c" a. w* i
6.4.1 找到for 循环107
, ~- l9 [4 Y" x/ b& f" d8 l2 ?6.4.2 找到while 循环109
6 i9 ?9 Y$ d# j0 t6.5 理解函数调用约定110
, ]2 J& N1 r. }; `, P; U k; H% A6.5.1 cdecl110* b9 _6 |& i1 `" m
6.5.2 stdcall 111. d5 u8 S8 l; q# u# w6 f1 C
6.5.3 fastcall 1113 I0 C% ?' {: _9 [; r
6.5.4 压栈与移动 111
- ?1 C. w G2 b3 B$ c; ~% x3 _6.6 分析switch 语句1120 L3 `; q d G% e3 X- ?
6.6.1 If 样式112: d" m, u* Q4 \' u5 w
6.6.2 跳转表114
2 j! N8 r' g8 z& ]" \3 a) h' h6.7 反汇编数组118
/ p: M* Z8 U5 G6.8 识别结构体119
: x; C/ S" }9 Y6.9 分析链表遍历121 R1 I4 J" T2 W4 K4 F
6.10 小结123, U! c2 X) y1 ]( k1 F: V
6.11 实验123
. t/ o% @) V# J. Z
5 F. {5 d% _8 b第7章 分析恶意Windows程序 126, h- k" s) }' Y& _/ _" z, y
( G( f( g7 Y) l& |) l2 X
7.1 Windows API126
: P" G$ s: e6 x2 }* `/ _% k6 e7.1.1 类型和匈牙利表达法126
" r3 n& N+ E4 b5 F& {( R+ }7.1.2 句柄127) ?# ?9 g0 s- s( Q" }( F9 u
7.1.3 文件系统函数1271 s" V$ B' ^& T/ f% n8 F1 m! ^
7.1.4 特殊文件1288 e% z, j( v# G3 V7 s4 C3 B9 p
7.2 Windows 注册表129
0 v5 M9 l, x' K* z/ x* d i7.2.1 注册表根键130
+ P, d1 f0 Z% B# O7.2.2 Regedit1313 ^4 C1 P6 x" E7 u: t
7.2.3 自启动程序131; T' i/ j7 b6 h
7.2.4 常用注册表函数131
! C* j, W3 B; a0 `. e2 T1 m2 u7.2.5 练习分析注册表操作代码132
6 N6 {# H, b {9 e% C: H* _7.2.6 使用.reg 文件的注册表脚本133
# X/ [ _3 Y @7.3 网络API133, Q4 ~' t- B- @4 O5 P$ j% t
7.3.1 伯克利兼容套接字134
1 y7 l( f5 d/ Q% {7.3.2 网络的服务器和客户端134
# d+ b: G$ k5 t! T- [7.3.3 WinINet API 135
% `1 M4 g( Q, n7.4 跟踪恶意代码的运行1360 w0 D$ U1 }6 P3 S# g, S4 C/ c
7.4.1 DLL136
& e; G+ J! D# p2 J7.4.2 进程1373 n0 v6 H& R9 E; h
7.4.3 线程1397 `& R5 S& S5 r. q' B
7.4.4 使用互斥量的进程间协作142
& z, i4 ~1 T* }$ y7.4.5 服务143: D9 Y. c! u2 y1 j0 P8 K
7.4.6 组件对象模型145
+ A0 c3 {. x# p' V7.4.7 异常:当事情出错时147
% c9 h. F7 R4 e7.5 内核与用户模式148
, Z; u# u ^8 h9 R7.6 原生API149$ R' X+ R3 m! o* n+ {
7.7 小结1514 y2 b' ]3 R( D' u% V6 U0 K
7.8 实验151, O# ?7 V9 s* |! s
9 J$ ?3 S d$ R3 k" O1 d7 g. B
% s% w9 d) Y7 l' r9 p( o
第 3 篇 动态分析高级技术篇4 @! b" W2 s/ A
& t4 t0 ~" e+ Z4 @第8章 动态调试 154( W, D" N) g% V b6 ^) K& t
9 L j3 z% p0 E. s1 b8 N8.1 源代码级与汇编级的调试器154
* G' R, F7 k, J; w3 p0 R& m- R8.2 内核模式与用户模式调试155
% `) E( u( K6 x; \7 ]8.3 使用调试器155
# ?! s; E8 p* n+ F' H3 b+ E7 D$ _8.3.1 单步调试155
' y0 L" Q* F1 l# S8.3.2 单步跳过(Stepping-Over)和单步跳入(Stepping-Into)156) I! h; L# W: n0 }, o2 T2 Q' I
8.3.3 用断点暂停执行157: k3 O6 }! `4 K& L8 R, _
8.4 异常161/ J" ^& H" p+ c. w: K
8.4.1 首次和二次异常处理1620 t4 t9 o0 q9 P" V3 e2 M8 M% B
8.4.2 常见异常162
* a, u; {" [- u5 G8.5 使用调试器修改可执行文件163: z8 V8 ~8 s d. x( K, c) t
8.6 修改可执行程序的实践163* X, r- s/ T J. F$ i
8.7 小结164- O, O' P! i) X- {
9 d: V! z, W' `" [, M. h
第9 章 OllyDbg 165
. `4 L) C2 O7 ]: E S1 K& g
' v+ q/ w! F% V" y* r9 Q9.1 加载恶意代码165
0 n9 `: n" u* B! M9.1.1 打开一个可执行文件165' c8 W s" E: g& Z
9.1.2 附加调试器到一个运行程序166
) t" f4 f X g# D9.2 OllyDbg 的接口167
6 [# J% K5 A6 d2 Y, A3 t3 `9.3 内存映射168
1 R) J( }" ]- { _0 r7 o& y! ^9.3.1 基地址重定位169
5 X+ _* A! L4 k9.4 查看线程和堆栈1704 v* A r( _3 v H t
9.5 执行代码171" I/ v6 |1 }- D# } e& b9 _7 b1 a
9.6 断点1728 o& W0 Z ^4 s
9.6.1 软件断点173$ j1 d" o9 {9 f, _2 M- r0 C
9.6.2 条件断点174/ o% e0 ~+ D3 o
9.6.3 硬件断点175% D# k1 E" f! g8 L$ S# {
9.6.4 内存断点175
; i r# q. M; o9.7 加载DLL176+ g; a* _0 i' H/ T& j$ R% E) [
9.8 跟踪177! I' D6 S( H) {* V
9.8.1 标准回溯跟踪177
+ k& H" d( |$ X9.8.2 堆栈调用跟踪178
) `6 |0 \& ^$ ]3 }9.8.3 运行跟踪178
: b; r" \; l/ u" U4 i9 W9.8.4 跟踪Poison Ivy178
$ E, ?$ F. @8 {' a6 L6 [8 B9.9 异常处理1797 ?5 B' C, W/ } {
9.10 修补1800 z. f2 x- s+ n; i2 \) K6 |; M/ X
9.11 分析shellcode1814 Z0 I G& R8 m% }; r
9.12 协助功能182
) p( }- v+ t# @( z- z& i6 F9.13 插件182& | I, D9 E' |4 W; O
9.13.1 OllyDump1834 t2 j/ r: z4 l7 q4 r! g# |0 t. P
9.13.2 调试器隐藏插件183: L3 _# [6 \& P; X, E1 b" `
9.13.3 命令行184# ?2 c$ r* q9 |: w( w
9.13.4 书签185) T' S6 D5 [ k- U: x
9.14 脚本调试185$ v9 W; W7 c$ b
9.15 小结186% h6 E* g6 |; s& f* ?( o: g( k7 r
9.16 实验187
* c2 b- }0 e# {
" I$ p/ D/ i* a; c7 a6 ]第10章 使用WinDbg 调试内核 1892 X9 T/ S- x" T& ^5 `) P' B- {% h
0 E2 g$ s- d2 I9 v
10.1 驱动与内核代码189; [0 }' F$ g1 @& G( {" o6 S
10.2 安装内核调试191+ ~ P* T$ K, V. Y# I
10.3 使用WinDbg193 W% S$ k* g/ \/ p' c6 y' K) }
10.3.1 从内存中读取194
, F/ C; c0 f$ ~ J6 t0 U( F10.3.2 使用算术操作符194
& D* T; w, ]0 v- {, {10.3.3 设置断点194
6 F8 b `" j" \( q10.3.4 列举模块195
9 `. k8 s3 Z8 i2 W5 Z# s10.4 微软符号表195
- u6 {' ]. _" {$ e1 `* Q10.4.1 搜索符号195
$ H( G1 \8 k2 i7 |10.4.2 查看结构信息196
+ k& A+ ^% j, P& k5 D8 d10.4.3 配置Windows 符号表1981 `; A D# c* P
10.5 内核调试实践1986 N+ ~- [0 O' ^9 j5 @" a. K
10.5.1 用户空间的代码1982 c$ |$ ]& L3 m. L/ ~1 x5 l8 L
10.5.2 内核模式的代码2005 p' W" A: Y8 ^2 x
10.5.3 查找驱动对象203! F9 i6 d. [. u/ ^% c1 ]
10.6 Rootkit2042 Q5 ?9 ?4 H4 ~
10.6.1 Rootkit 分析实践205& k- t& a9 g4 }$ q* n
10.6.2 中断208. C% v) I6 Q d) I& F: T
10.7 加载驱动209
% @' _# e! e) Y, h. m10.8 Windows Vista、Windows 7 和x64 版本的内核问题209! U( a! A- C9 V- h7 ]3 M6 z
10.9 小结210- g2 U# G/ m3 E6 S
10.10 实验210! i3 a1 F7 ?! {2 `4 F
1 R/ g$ p" t! W
% }+ u( k0 w+ C$ Q* G$ J第 4 篇 恶意代码功能篇
6 h9 N+ }5 M# [3 V$ |
- K( |* X1 H, L第11章 恶意代码行为 2142 ]7 G7 P: d+ {/ _0 {9 x
' F. T9 t. k1 l, n) V11.1 下载器和启动器214
4 P* c5 _( M1 h3 [5 w' p3 w11.2 后门(backdoor)214
9 G! |3 r6 M$ x ]11.2.1 反向shell215$ [- S5 f5 I- C5 y7 I, I( `
11.2.2 远程控制工具216
6 Q1 l# r" }* `6 i% y9 l# T) {11.2.3 僵尸网络216- c. E) G1 a' p' v* c( ]3 b
11.2.4 远程控制工具与僵尸网络的比较217& Q' z8 {6 n& k- ]
11.3 登录凭证窃密器217
) N ~! `* K: V7 V* h# @ R11.3.1 GINA 拦截217" V2 J5 @5 d8 P( l! I
11.3.2 口令哈希转储218
! \# A/ J# p# d+ I/ r5 K/ l5 @11.3.3 击键记录221! L& U! w2 F! {+ {: n
11.4 存活机制223) Q" `' V7 t$ F
11.4.1 Windows 注册表223
" U6 k1 K7 S9 K0 N: ~11.4.2 特洛伊木马化(Trojanized)系统二进制文件225
# A5 M- f& U0 f! z \' h# i* E2 [11.4.3 DLL 加载顺序劫持227; V# \7 q9 W* Q) ^6 S k
11.5 提权228
' e' ?9 X* p7 J' |' J11.5.1 使用SeDebugPrivilege228
) B! g: z! a' g8 b11.6 隐藏它的踪迹——用户态的Rootkit229
. _% n1 b, ]3 D4 P& r1 U11.6.1 IAT Hook 230
& T9 o0 |% h7 t+ }: D11.6.2 Inline Hook 231* |* r' y& n+ O
11.7 小结2327 @! D2 O0 e3 M5 r# J: q4 e
11.8 实验232
' {( {2 a# Q4 Z2 m, w, G6 ?* E* b( K
第12章 隐蔽的恶意代码启动 234
; q9 F0 u+ |# U, |9 ^
5 m/ b9 e- r) x* V8 `12.1 启动器(Launcher)234
" b4 r& H3 c# t# C12.2 进程注入234
: V3 `( ?& S" h12.2.1 DLL 注入235
( A( f5 O6 O/ ]" k' f; y12.2.2 直接注入237
: y# f' l9 V% ^# I+ |8 k12.3 进程替换2387 a5 ^) \# z+ W. i/ c: h: K
12.4 钩子(Hook)注入240
$ B; v9 c; h- X* {9 Y$ S8 A12.4.1 本地和远程钩子(Hook)240
6 _5 R' S1 h8 m8 g% L0 ?4 D12.4.2 使用钩子的击键记录器241& K( ]. a' J9 R9 r' l5 s4 l
12.4.3 使用SetWindowsHookEx 241& w; j7 @* w5 E. r
12.4.4 目标线程241. w9 M$ C, u7 x0 Y, n% Q1 L
12.5 Detours 242
1 y1 H. [* T+ c12.6 APC 注入243: s. i1 U* m4 r/ n s2 O
12.6.1 用户模式下APC 注入244
+ j. o; [6 J+ _4 s, t( R! O! q' ?9 ~12.6.2 内核模式的APC 注入2450 i# t7 M+ M- u' h
12.7 小结246
$ e% R- u! N. c9 i2 k3 {12.8 实验246
) R2 Q, S0 ]7 E& i2 ]% x' B0 I3 g+ c8 W3 b5 J+ a) h
第13章 数据加密 248
- d6 Q- [" l" G$ m1 u: |2 d$ U
13.1 分析加密算法的目的2489 B- H* }0 N' G5 R
13.2 简单的加密算法2482 {* w3 S; E( m/ }8 U
13.2.1 凯撒密码249" `% [. w$ s& C: b$ J1 V" K
13.2.2 XOR249
9 d9 U$ a9 C" D8 J$ d. ~, a13.2.3 其他一些简单的加密策略254
; H8 y! }, J8 ^. |% u( [2 A13.2.4 Base64255
8 |. F! S$ t' s) z$ ^13.3 常见的加密算法258/ M7 R; e2 p3 L' p: X6 |1 m8 w1 u
13.3.1 识别字符串和导入259
' j# \- i. x" R! K3 u5 j, t$ W13.3.2 查找加密常量259
0 m3 F4 e2 R* n; i2 S; ]% ?13.3.3 查找高熵值内容261* Y# C% E2 `- G5 v4 O3 M7 {7 y7 `" s
13.4 自定义加密262
+ k# L3 t4 ]0 ?) v13.4.1 识别自定义加密2638 V: T4 i" D) H: X
13.4.2 攻击者使用自定义加密的优势265/ C; u: ~7 n- P$ W& F) i
13.5 解密265. A2 O& V$ K- W* r
13.5.1 自解密265' j$ b" Z0 {- }0 i" P* z: t; F
13.5.2 手动执行解密函数266* ^% {3 @5 m# \) W
13.5.3 使用通用的解密规范267, O( D2 _7 d: a3 N
13.6 小结270
, W* p, V" |' z8 ^13.7 实验271/ h# P) n6 q+ A: K- [4 Y
3 b- U7 r2 C2 j! L
第14章 恶意代码的网络特征273
2 i2 L ^ o) `; F* B5 j6 U) Y) e
4 h8 I7 R9 c. S5 `& x/ t% y& [14.1 网络应对措施273
" `5 }2 @& f- {6 x14.1.1 在原始环境中观察恶意代码273* C8 ~! k* }1 ^& k
14.1.2 恶意行为的痕迹274& g/ m- [* a6 S* ]
14.1.3 OPSEC=操作安全性275) M& _; t) }& _" z" W F
14.2 安全地调查在线攻击者275, n1 x# R0 c' @! f" h/ n
14.2.1 间接性策略275( p, M; W8 O: a5 Q4 s
14.2.2 获取IP 地址和域名信息276- T; j& P2 [/ b* R7 f+ s; ^ K$ J2 Y
14.3 基于内容的网络应对措施278
q$ z0 W7 f1 a, n14.3.1 使用Snort 进行入侵检测278
0 V6 s4 Y" V/ R; S0 D, `14.3.2 深入观察279
% f9 r+ c4 F( T# Q! \14.4 结合动态和静态分析技术282: o9 N; t5 g$ u. n) w
14.4.1 过度分析的危险283
# H# y" f3 z. H4 m6 o14.4.2 在众目睽睽下隐藏283
# ]: O$ q7 `, I0 j14.4.3 理解周边代码286
( X# E1 V4 e0 e5 U/ j2 n$ f14.4.4 寻找网络操作代码287
) R2 G: p _( \( [) b' `* B5 a14.4.5 了解网络内容的来源288" ^$ s: L1 d% A# `" M& f
14.4.6 硬编码数据 vs. 临时数据289" ~% h. ?9 }( l& \) l: L1 O# E6 U
14.4.7 确定和利用编码步骤289
$ E* |: S& h: ^) G" `3 n7 T14.4.8 创建特征291 F9 A6 t0 l4 s- I* u
14.4.9 分析解析例程292
9 t: c9 B1 E# u" U' O# d14.4.10 针对多个元素294% ?; C$ j2 J3 |7 k
14.5 了解攻击者的意图295
# l# `& ^! N8 y, J) y" Y# a5 A# G14.6 小结296
2 i& N' i7 r- N' ^4 n# L( t6 S14.7 实验296
& s4 ?& b. ?* R
( I L1 i' |& B* T' d. i
2 {, h' z1 X; x5 k# J$ O8 c第 5 篇 逆向工程! y* v3 j& y" Q/ ~# m
# R- N$ K$ _$ o) ~* z2 Q3 i4 N第15章 对抗反汇编 3004 k& {' A" v# i/ D
$ x/ j+ \: C! G) v( B15.1 何谓对抗反汇编技术300
, a) \3 e& {7 u4 v _3 r* \15.2 挫败反汇编算法3010 O# Q% h) i" V# K+ u
15.2.1 线性反汇编302
' _ t2 a h3 L) F9 }1 u8 _+ P15.2.2 面向代码流的反汇编3030 o- h: q+ d# m2 F6 }
15.3 对抗反汇编技术3063 B$ V' p+ z- ^4 A
15.3.1 相同目标的跳转指令306' s" g1 ]2 m, o# G2 ?+ `3 h
15.3.2 固定条件的跳转指令307
3 d: l+ R4 m3 d3 g6 g# x15.3.3 无效的反汇编指令308+ O" @" a* S N/ u. i4 W
15.3.4 用IDA Pro 对指令进行NOP替换311& |6 e9 P' X* J& n8 J2 M7 B
15.4 混淆控制流图312' S; ^4 v2 u: P; {8 E
15.4.1 函数指针问题312
) N% J* @$ I5 \$ c15.4.2 在IDA Pro 中添加代码的交叉引用3131 N+ o& t$ n+ K. G( q
15.4.3 滥用返回指针313
5 a; G3 X0 X/ @1 M15.4.4 滥用结构化异常处理315
8 V$ _# K/ y: U, I15.5 挫败栈帧分析317( ?' i& K/ D) m, V9 y& F
15.6 小结320
1 @+ S' X u [ G15.7 实验3204 {! ^2 a4 d3 ?6 a
6 ~* h8 {2 G4 o8 c8 s4 V# x
第16章 反调试技术322. c: J/ ~: I% L1 d0 c
9 l( w* |' K8 F% k8 K) l; B4 h16.1 探测Windows 调试器322
" E- W) g; ^6 }3 w) f16.1.1 使用Windows API322
' C% I, p4 N8 q/ l8 G16.1.2 手动检测数据结构324" z. r2 \! b6 D8 G6 m% r
16.1.3 系统痕迹检测326
. ^: _6 G; I8 W- ]" Q16.2 识别调试器的行为327
( l" \, n/ c1 B# q& C16.2.1 INT 扫描3278 x; I8 t3 Q- }5 Q1 m$ T9 R3 Y
16.2.2 执行代码校验和检查328! R a; C+ j! F% B: B
16.2.3 时钟检测3284 U) m& I; c4 U) H: l) i
16.3 干扰调试器的功能330
! z; P3 h' f4 \* m' M16.3.1 使用TLS回调330
3 B& U5 D' t; k1 f) m16.3.2 使用异常332
9 x# H: M5 g% k; \16.3.3 插入中断333! z6 S, z l9 c+ H C
16.4 调试器漏洞3340 x9 b5 K& w! u9 G
16.4.1 PE 头漏洞334
% _6 ~' l5 T% A% }9 V* O3 z* l. C16.4.2 OutputDebugString漏洞336, G; O, n0 H- b1 o1 {
16.5 小结336
$ t& z! W& D9 b& q1 b* e16.6 实验336
& Z) C# S. i1 ~4 K) y2 R3 F0 k+ _# j, C z2 t9 o/ ~+ h# I7 X
第17章 反虚拟机技术 3382 `0 O: ^" X9 ~$ Z
/ D9 p/ h* q% ^; v+ r, p9 S17.1 VMware 痕迹3389 ?, C6 l$ [7 H1 c6 u1 ~5 B, l
17.1.1 绕过VMware 痕迹的探测340
7 S9 k1 u& Y: ^; A* A17.1.2 探测内存痕迹342, U6 k( w w* h7 M. v6 K
17.2 查找漏洞指令342
' B/ q `+ U2 r. r/ L: A4 T4 C17.2.1 使用Red Pill 反虚拟机技术343! d/ ^% }7 U+ a0 W3 p
17.2.2 使用No Pill 技术3445 z: H* _9 S4 Z2 v; j
17.2.3 查询I/O 通信端口344
0 ]5 F/ X& M' w4 H6 u17.2.4 使用str 指令3455 `$ _) x/ ~6 c0 e7 ~% `' z$ |+ }
17.2.5 反虚拟机的x86 指令346
. E! L8 v2 Q2 d3 H5 h$ t17.2.6 在IDA Pro 中高亮显示反虚拟机代码347
) w1 }/ ^, M3 G- T17.2.7 使用ScoopyNG3475 E" j7 |6 |5 B3 e0 @% e7 ?" i
17.3 调整设置3484 x/ S2 X- o+ f* ]5 e9 g' S5 O; ?$ @
17.4 虚拟机逃逸3495 u- B$ i, I- Z3 x
17.5 小结349
2 A6 ]5 S# g4 m- ]; j17.6 实验349" g, K+ l2 k* b
* ?. R' F; m) n4 |3 u; V
第18章 加壳与脱壳 352/ ]( m7 k& S7 i* _: g2 Y
5 S. ~1 R4 B- m2 W* B18.1 剖析加壳352
j N; `3 H$ _18.1.1 脱壳存根353
; `! V' D: O" g: f- c18.1.2 加载可执行文件353
1 p: @3 x/ F" t3 n2 a& f! |18.1.3 解析导入函数表353! N$ d# Q' w( C8 W$ r
18.1.4 尾部跳转354
3 L: O v: m( I0 n- Z18.1.5 图示脱壳过程3543 A9 Z1 h0 v* I/ X
18.2 识别加壳程序355
/ D7 C# e! f4 Y: q5 k18.2.1 加壳程序的标识355% V. H. s# h" B, f
18.2.2 熵计算3565 n! [- f* n' \: ]. o5 I& E7 x$ @
18.3 脱壳选项3560 V2 A! j" {( U& x$ Y
18.4 自动脱壳356
0 o" S1 n: }" B$ M! _" U+ N2 i18.5 手动脱壳357
0 t6 ]7 [9 X: C18.5.1 使用导入重构器重构导入表3588 }0 n* ~5 m" o7 y, W* O
18.5.2 查找OEP3594 s3 U1 ~/ X! f% R- ]. Q
18.5.3 手动修复导入表363: V! }2 C& ~1 `2 Z* l
18.6 常见壳的技巧与窍门364
, `- U6 d6 q w; [18.6.1 UPX 3641 h Q8 o* {6 S5 m$ f R: I
18.6.2 PECompact 365
% Y+ }/ q: a9 b* z! C18.6.3 ASPack365- F( E, z/ N7 j5 d9 R, g1 u1 w
18.6.4 Petite 365
1 A( ~! v+ A5 G) g+ B; d* w v18.6.5 WinUpack 366; d/ J: F, E) m. ~. l# _, ]
18.6.6 Themida367" a5 R5 r. ^7 o
18.7 不完全脱壳情况下的分析3689 x3 N" R( [' o$ a
18.8 加壳DLL 368; V+ z& L" F; [1 Z% _2 ]/ t
18.9 小结369& \. q3 i3 i2 y, r0 ~
18.10 实验3697 l7 l, y7 P* U' {0 _; |% O5 r
8 h& b! z2 O/ |/ m( j# @4 X$ P% I+ q0 T# x4 W9 J& A1 L
第 6 篇 高级专题" J g$ @ D2 k# |" D4 W
2 `7 C& _! [2 e9 g: h
第19章 shellcode 分析 372
0 b7 n9 e) {) Q3 O; Y6 e
+ j; M9 Z& r+ R# v* @: ^19.1 加载shellcode 进行分析372/ ]$ \; N2 F5 H! L$ @0 j( a
19.2 位置无关代码373% N( I2 r. h. d: M! N
19.3 识别执行位置373
S" N$ ?# i' X19.3.1 使用call/pop 指令374
% g2 P t0 V( f R. f6 G! d19.3.2 使用fnstenv 指令376
; c1 X$ K+ ?9 g; p, T19.4 手动符号解析377) P- |7 v( I1 Q: }0 H+ F2 p0 `- k8 A
19.4.1 在内存中找到kernel32.dll378" _) G* V, l& P1 F0 P+ w; D( f6 z8 `
19.4.2 解析PE 文件导出数据380
# A. |; y+ K+ w9 _2 e X4 h- a+ O19.4.3 使用散列过的导出符号名382# k4 `! ~. z Q1 [. Q! J
19.5 一个完整的Hello World 例子383
. T g5 l- h5 J; s% w- }2 B: U+ l/ v19.6 shellcode 编码3850 L4 w1 E* c2 l' C0 Q# a1 ~
19.7 空指令雪橇387
. Z$ R0 D$ \1 i/ S19.8 找到shellcode387; h7 g! D0 M1 F5 c2 A: u' s
19.9 小结388
# x' I# I" J) t3 R9 E) v, \+ i19.10 实验3898 [/ ]7 a; [* W t& B5 w
$ T% {7 |' l; w( {9 F/ X, y3 ~
第20章 C++代码分析 391
( O) x' l; V" A7 o- T0 X: e: E# \1 G$ k) ]; l. u: j6 J( M; E
20.1 面向对象的编程语言391
& x: ?! i- H) n$ g" `20.1.1 this 指针392) w: m* k' \7 B. Z
20.1.2 重载与修饰394+ L3 U5 }5 R- s Y( H
20.1.3 继承(Inheritance)和函数重写(Overriding)395
1 n9 c0 P; M5 h/ ^! W d) h7 @20.2 虚函数和非虚函数396
% l& G8 s% ?- a/ B/ j20.2.1 虚函数表的使用398
h. H& C- J s1 B8 Y: l20.2.2 识别虚函数表399
4 n3 L4 l1 C. w- ~& F6 K$ h0 D; s: V20.3 创建和销毁对象400; b$ `9 j- J& k
20.4 小结401
+ ~; P% m @% t4 I) }% ^2 ]. W2 F20.5 实验401; t) s' T+ e. ~. g% Q
6 E( N p3 x! l第21章 64 位恶意代码 403: Z4 H7 x7 W) R6 `3 R! p
4 {- J' Q' z1 h+ _) C21.1 为什么需要64 位恶意代码403$ L% d, y) m+ Q
21.2 x64 架构上的差别404
Q5 I2 \/ A) s" e21.2.1 x64 调用约定和栈使用上的差别406
' Y5 T# N: r: w0 a4 T' w21.2.2 64 位异常处理408% ^' j/ b. f* `' F3 V. ]3 |
21.3 在Windows 64 位上的Windows 32 位408
8 M: o$ T, b6 N, E21.4 恶意代码功能上的64位提示409
+ I# v9 [% a% E7 N9 P21.5 小结4107 i% [0 k. Z) K% Q7 ^, g
21.6 实验410
/ u s3 [* e: q! u8 g6 g; J/ M
2 ]2 ^0 ?: a# b) u2 x附录A 常见Windows 函数列表 412
' e. M! @! X! Y, z' n+ J/ J4 J( W8 y( B1 [4 A
附录B 流行的恶意代码分析工具列表424* Y5 r G* ?* u
" A! x6 Q8 Y1 l) s附录C 实验作业参考解答435
u6 [: u+ P/ t9 r9 a& F/ V
8 N* P2 Q7 V+ a, a附录D 致青春,基础软件开发的中国故事 691
. A L5 V& y: ^) W' T- [" E
' R: t* q) U& `& [& U4 y附录E Syser 操作入门 695
0 c0 [: B* J$ P- A; s
/ }3 {5 y; A/ p# ?# e. x4 S: |
' L8 z0 C$ N9 M$ j; P |
|