|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
. |2 o7 j, n5 h4 y' U1 j, b2 n6 l7 D8 l
书名:《C++反汇编与逆向分析技术揭秘》
2 U; {" H+ G, V作者:钱林松,赵海旭
% \, V* o, W6 X% \" q/ C2 H出版社:机械工业出版社
+ a% Y4 e- W9 ^/ ^% c出版年:2011年10月1日(第1版)
( B$ R/ `$ }. y4 J5 c' c定价:69.00元
6 K) a0 s; [) A0 ?- p装帧:平装" s: x d6 `0 Q2 z, D( Y
ISBN:9787111356332
" X/ X7 W2 A6 ?$ i$ ?
) K v% S( W3 f9 ^# T h购买链接:8 F" ?/ p9 w. e0 f/ u3 [8 `! k
' \' a. l; d6 J, } q* g0 } # a1 S; w' ?9 I1 m
亚马逊(Kindle)-> 传送门5 w2 Z- w! C4 y0 i( b. W3 ^
* i" n6 D- U9 B% O U }$ \; |亚马逊 -> 传送门
: `5 Z: }% B7 g# M4 t3 \# ]" J, K1 m8 Z( R4 g
当当网 -> 传送门
& K5 a- L9 M/ u9 Q0 Z/ k7 o" i4 \0 o2 t2 D( U% k8 Y8 a. `# x
京东 -> 传送门
" b; z. ]2 I7 O2 F
! C, f6 [9 D% z3 p( |. B天猫 -> 传送门
: ]$ f( x3 C, R# `. s! x
+ ^$ {: R( C2 i& ~( Y7 D3 t& G+ w W) n
内容简介:
3 G1 R% y/ p- }# ?% o0 U' {0 q: @0 ]7 X( V4 \
3 c1 V0 }1 F, j& }) I
《C++反汇编与逆向分析技术揭秘》从介绍调试工具开始,到语言特性的分析,反汇编代码的重建等,再到逆向分析技术应用,内容逐步深入。软件分析技术重在方法,所以《C++反汇编与逆向分析技术揭秘》以启发方法为导向,逐步培养读者的分析和推理能力。全书共分为三个部分:第一部分 准备工作;第二部分 C++ 反汇编揭秘;第三部分 逆向分析技术应用,逐步引导读者,结合具体的应用掌握逆向分析的关键技术。. U7 Z& [6 R8 t/ d' S0 k
' _/ i' |; n& Z) i
《C++反汇编与逆向分析技术揭秘》对所有软件安全领域工作者, 想了解 C++ 内部机制的中高级 C++ 程序员以及 对 Windows 底层技术感兴趣的技术人员来说,是一本很好的学习 C++ 反汇编与逆向分析技术的参考书。
. T' F' ?; z7 O9 H% W. V% p% _
* y& {3 y. v- j& a& U! b, M目录:
1 {2 z+ v& V1 y+ z$ `1 r" J4 [4 j' U5 w! z
4 [+ H( q& g- d! B' z9 {: Q前言
6 O# I5 F. Z0 B) i1 P' J
, v9 t+ X, C# |5 f$ Q7 N9 \第一部分 准备工作3 ?' b/ K3 ~6 @
& h! a Y8 D* o. [/ O4 T, X, h第1章 熟悉工作环境和相关工具 / 2
) Q. ?5 z- ~ I$ J Z4 L% Y/ ~2 y9 y2 [: _7 y9 ~
1.1 调试工具Microsoft Visual C++ 6.0和OllyDBG / 2
. e7 e2 [! o# E C6 k U1 E1.2 反汇编静态分析工具IDA / 52 }# k7 V8 U/ i. i! \4 `
1.3 反汇编引擎的工作原理 / 11
0 I( ~8 r" j! k1.4 本章小结 / 16' `* y) Y+ ?* ?: n
6 l3 L$ s4 j2 x$ f; @: _! S' M: @第二部分 C++反汇编揭秘
x$ `/ e% w# U- ^+ u+ ?2 O
6 x% g$ ^+ A! f: H/ L3 [第2章 基本数据类型的表现形式 / 180 N0 U' h7 B) O [! a3 |/ K
$ m" {$ E4 B) N3 ]; G2.1 整数类型 / 18
- _8 r* n/ X% a* w ^2 `2.1.1 无符号整数 / 18& y( m! L/ ^' h+ ]) r6 _
2.1.2 有符号整数 / 18
" D% w4 C0 Q( X3 ^& ]2.2 浮点数类型 / 20
9 M8 }3 I( a* @0 W- B% a2.2.1 浮点数的编码方式 / 21
9 ]7 Q- H) R! j$ z* E5 V2.2.2 基本的浮点数指令 / 23
& T& w, k4 ?7 u( D. ^2.3 字符和字符串 / 260 m4 ~5 V; h( H5 o: N2 U: N6 K: e
2.3.1 字符的编码 / 27 Q0 t& {8 b* N# x
2.3.2 字符串的存储方式 / 28
) P' Z! j- z# e& r7 C4 Z2.4 布尔类型 / 29
4 |7 o$ q, s9 e2.5 地址、指针和引用 / 29
^* X4 L, J4 m3 s2.5.1 指针和地址的区别 / 30
2 `2 ^/ X8 P0 ~ \, p2.5.2 各类型指针的工作方式 / 31# p0 t8 I: @# F5 \- C: Y& F5 G
2.5.3 引用 / 34, H% j( z* m. b
2.6 常量 / 35( z1 e X, m1 I% c) A' `
2.6.1 常量的定义 / 36
$ G6 }. \9 m& @3 V: |4 m; v2.6.2 #define和const的区别 / 378 s- R+ p, y: X i. D
2.7 本章小结 / 388 j8 D* A u6 ]! D
6 a' K0 h, z, S2 L
第3章 认识启动函数,找到用户入口 / 400 n Q& P) U: |. r
+ v2 c/ Z. z, |5 z0 i" h+ a3.1 程序的真正入口 / 406 e. s' G+ x1 ?7 {1 _
3.2 了解VC++ 6.0的启动函数 / 40
1 u2 p- L7 X# q3.3 main函数的识别 / 448 A8 G7 o6 O- [. x8 |
3.4 本章小结 / 46
$ Z6 W/ [+ {, X( |$ V$ Y$ v" w e0 A- N, I' E ?
第4章 观察各种表达式的求值过程 / 47' l3 Z& @5 j3 r9 T J Z( P: |
9 z/ X6 w/ c, V+ f
4.1 算术运算和赋值 / 47
- d ~0 f$ N) ^4.1.1 各种算术运算的工作形式 / 470 _+ J3 Y: S/ |% d
4.1.2 算术结果溢出 / 82
" _5 I" u' m3 P9 ~7 j& x! n- d4.1.3 自增和自减 / 83
9 ~ D+ u# v* d, C8 u1 D( {4.2 关系运算和逻辑运算 / 85
$ M% G) k3 M$ Z1 s1 K) r8 Y4.2.1 关系运算和条件跳转的对应 / 857 I4 t |7 X! y8 l0 x% n% t
4.2.2 表达式短路 / 86/ K" d) n3 a& {7 }; X- }
4.2.3 条件表达式 / 884 `; F* r: s/ _& g
4.3 位运算 / 92
/ O- \( ?) z! A( g/ {/ b }0 x4.4 编译器使用的优化技巧 / 94; N) l+ }! t: W! `2 k! c9 q( S0 D
4.4.1 流水线优化规则 / 97; n% x% }0 j* c+ v. C# k
4.4.2 分支优化规则 / 101+ [9 p4 J0 ~/ ~% f8 N" _$ ~7 F
4.4.3 高速缓存(cache)优化规则 / 1011 d+ q4 `% O, }- {3 a/ |% Z
4.5 一次算法逆向之旅 / 102
# D$ {. b. P, t* n7 }6 _4.6 本章小结 / 109! y$ x" ?( l% x- o! M/ `
/ d8 m3 H M2 p0 I( P第5章 流程控制语句的识别 / 110
8 r, H }; G. O$ ?$ u
! M6 p/ B9 U" [* G( e+ C9 |; F" O5.1 if语句 / 110
' Z8 t! K. i2 I$ t5.2 if…else…语句 / 112
: N% Y$ y% e' T: d5 |* F: K8 Y! n4 T5.3 用if构成的多分支流程 / 1154 u+ Z6 r" T( i) D2 |
5.4 switch的真相 / 119
- E$ V. n( G" G; X$ K0 l0 L5.5 难以构成跳转表的switch / 1280 O/ y( P5 A* c& Y4 R
5.6 降低判定树的高度 / 133
' m* w" G% t' B" f' k5.7 do/while/for的比较 / 137
, H0 r1 C# X" J* C; p j5.8 编译器对循环结构的优化 / 143
& t; f% F6 Z) B9 I, p5.9 本章小结 / 148
8 d2 ?( B" \: Q2 q- @ N* o6 X
7 Y+ W$ C4 c# Q第6章 函数的工作原理 / 149
3 D7 a5 b0 P, Y7 s2 |- y% u* e6 y
% u& n, w$ z; u* U1 n8 I6.1 栈帧的形成和关闭 / 149
! ~& A* B- B( E% m# Q( y3 o7 P6.2 各种调用方式的考察 / 152
; d1 }9 x# Z1 |6.3 使用ebp或esp寻址 / 155
) \4 A! A! S% J# \6 F. `* n) R0 l( P# C6.4 函数的参数 / 158
' y2 r( y/ P7 a. f6.5 函数的返回值 / 160
. Z% N8 M) J" I$ q7 Q6.6 回顾 / 1633 _0 P5 s$ c% u* ?: R
6.7 本章小结 / 165" C6 d# ?& [! X) {7 p
7 N6 c+ k* [# m$ J
第7章 变量在内存中的位置和访问方式 / 1663 u' O7 U: E( `' r0 j0 k v1 k; d
% D7 i* l# ^$ j% ~( Y+ |7.1 全局变量和局部变量的区别 / 166
# I# i u( j! @( p& c. N7.2 局部静态变量的工作方式 / 169: x1 F7 _, ]& O4 C5 h# O1 S
7.3 堆变量 / 173
: r% R9 \. w+ ~7.4 本章小结 / 177
; K0 F8 k. B! m3 @" U! l s( L" `
2 X B0 L, q" G V! o$ r2 N第8章 数组和指针的寻址 / 178! i( x* N8 U6 w3 Y0 t3 h
& `0 X- t1 i% P) L, Y8 {: s" P8.1 数组在函数内 / 178
& A, X7 N1 V# D( Z5 e( M8.2 数组作为参数 / 181
4 i b; B; k: m' a ?; q. b. `0 o8.3 数组作为返回值 / 185- ]1 |# A, t. L; l! }
8.4 下标寻址和指针寻址 / 1892 s R) A4 ~6 |4 X9 d* O
8.5 多维数组 / 193
1 a" f* t& G7 H* s+ e2 [8 J8.6 存放指针类型数据的数组 / 199% F3 z& r. Z P! Z; O) x7 A$ k
8.7 指向数组的指针变量 / 201
- E& w+ G' y% o5 A# ~* s! F% S( A8.8 函数指针 / 204
2 ~6 a( \+ w) y; u( X! T7 E6 |8.9 本章小结 / 206- I1 a1 S" y4 g
[) J) v( ?8 Q9 z4 S) s第9章 结构体和类 / 207$ A# u% ^4 `& }3 `. }! C( H' Q
4 l( t3 o3 U; }1 T9 ^; Y9.1 对象的内存布局 / 207
+ J. z Y$ O. I% K6 o( H9.2 this指针 / 212% F* [ c3 j8 q% f$ ] v
9.3 静态数据成员 / 2171 p! F r W0 X3 h- t& c: ?8 A# t
9.4 对象作为函数参数 / 219( E; P& O! _4 m: g* K
9.5 对象作为返回值 / 226
( s' g+ b- o7 I- S4 y# s, N1 e9.6 本章小结 / 2314 w0 }8 k3 ?0 d5 f) b
6 {% v. K+ V' l. w: _! B8 |
第10章 关于构造函数和析构函数 / 233$ ]$ N& m/ |7 P9 n
0 Z5 i; M; N O4 _0 N- k0 s0 a
10.1 构造函数的出现时机 / 233
9 ?6 H' v5 {: }6 c( c1 W6 U" V1 n1 Z10.2 每个对象都有默认的构造函数吗 / 243; ~8 Z- P6 P' p; g
10.3 析构函数的出现时机 / 245
: ~4 ?" h5 D6 X10.4 本章小结 / 254: y$ r4 m7 `+ P2 U- G
$ ~2 ?! |. q- d2 T2 G" a' p9 C
第11章 关于虚函数 / 256
5 `! B0 M& p& U7 j
- p" ^# E) }4 X: g' E9 h9 ^11.1 虚函数的机制 / 256$ V/ M2 U4 h8 z( s4 } [
11.2 虚函数的识别 / 261
! v9 b+ Y) W* f2 B; A. {11.3 本章小结 / 268# i' B& n6 t1 Q, H+ k2 T7 X6 R& G
0 U9 J7 k% s$ ?( V
第12章 从内存角度看继承和多重继承 / 269
& A) ^ w0 }4 v
/ K; Z7 |1 W( P# ^$ w1 m1 H12.1 识别类和类之间的关系 / 270
# _) V5 B0 u6 e12.2 多重继承 / 2926 m1 `+ W6 a1 ?0 j( x" ?
12.3 虚基类 / 298$ t- ~/ ^% {/ k6 x p9 F$ V' [
12.4 菱形继承 / 299
}. u1 X0 G$ k E7 U# K8 T) ? K12.5 本章小结 / 307
& K* G$ {9 Q: x: f# c+ Q, D" b S8 V8 o" q
第13章 异常处理 / 308; B5 }; N1 u; M9 I' k
' k7 A5 U) ?! u# E$ w) x0 w13.1 异常处理的相关知识 / 308/ h: L; E7 B. u# F" D
13.2 异常类型为基本数据类型的处理流程 / 3144 v) O- |2 k4 O% z8 v
13.3 异常类型为对象的处理流程 / 323- G9 y4 ?& D9 d
13.4 识别异常处理 / 3292 i% ^3 s7 k! z! G. g+ w7 H
13.5 本章小结 / 341
# ?4 M" E( J& l! J% s" h/ {% p& \$ w: |4 B0 R& l$ I& B+ r
第三部分 逆向分析技术应用 H3 p+ l, | g1 \3 {
( s$ u$ y. e$ K7 l( r; P4 |第14章 PEiD的工作原理分析 / 344
! U' |: N0 Y$ }: g
8 u+ g6 _9 H/ p( J* ]14.1 开发环境的识别 / 344# y4 f7 J, c. K7 k
14.2 开发环境的伪造 / 353# I4 b- H7 ?% I( p" s
14.3 本章小结 / 356' _: x* |& S5 a) D5 s
/ v$ x% d0 a8 p0 o1 W5 i第15章 “熊猫烧香”病毒逆向分析 / 357
" B* _% Y/ U, |) X5 ]) {
/ l( I" z, K3 _$ W& Y; y15.1 调试环境配置 / 357
5 l# _' Y+ H& n, o) _15.2 病毒程序初步分析 / 358) t3 v4 c$ C k- v8 G3 x% L, ^
15.3“熊猫烧香”的启动过程分析 / 3608 w" o$ m; H* V7 F' n+ l
15.4“熊猫烧香”的自我保护分析 / 366$ T6 s5 W# \" ] h
15.5“熊猫烧香”的感染过程分析 / 369* L' Z# Y ]4 i; Y5 x# g$ b7 }% @
15.6 本章小结 / 3794 i: e" f5 L4 [: C2 ]
4 C- f: ^9 X; W6 K; d第16章 调试器OllyDBG的工作原理分析 / 380
8 l9 L3 ]" p8 `$ o& |
; V# n' p* Z: e& {! d3 K; g5 K16.1 INT3断点 / 380
; Z- [! F2 N0 {& F* T16.2 内存断点 / 385; Q4 x0 P! E) ?0 l# u0 F3 }
16.3 硬件断点 / 390: G& U) s4 H. j( M
16.4 异常处理机制 / 396
b" X% @. h4 S$ j' h16.5 加载调试程序 / 402
2 |* |3 s# Z* w: R. u% M16.6 本章小结 / 406; E# L4 U7 ?3 O% Z
' F( Y! X- b H7 l( e4 ]+ I% X/ H
第17章 反汇编代码的重建与编译 / 407! ~' b% F0 z3 l% W" P
, S' v! U' H+ M: n! c3 t; x17.1 重建反汇编代码 / 407; ^) o; K- c% S* n
17.2 编译重建后的反汇编代码 / 410% W8 ~. B: _3 Q, ?/ Q9 o6 o
17.3 本章小结 / 411
- Z0 l5 p4 D7 M5 L( R+ Z3 K9 U0 @6 @# J, ]* \; j
参考文献 / 4122 f6 h, P! r1 n7 i4 A% k; }
5 R# h" Z7 k" |# _* Y0 r7 |
, ^: y T5 p6 V; N. G
|
|