|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
! B$ Y0 O/ u Q" p7 C! Y0 e: P" Z( m
书名:《加密与解密》(第3版)
2 h1 _% {% D% Y9 c作者:段钢
% F( _" {2 d3 J! o出版社:电子工业出版社
1 g9 O+ G. n" D+ ?; L$ _出版年:2008年7月1日(第1版)' m6 j9 @( e! Z% z- r6 l! o2 q, w' {
定价:59.00元 F" w' n% d9 d: s
装帧:平装
2 I- U! n; H ~; tISBN:9787121066443
8 Z1 l; A; x2 z# s% u) C1 o5 f! t) o
购买链接:
1 x3 M% t# A) ]
\$ X L, \3 E8 i& ~* Q $ Z$ V- r: |1 N( t8 O
亚马逊(Kindle)-> 传送门; j* I8 w8 [& v
1 ^; ~" e- t- v9 l0 ^- k, x亚马逊 -> 传送门
1 z% u: T; }3 K. F, \/ N" i! h/ t
当当网 -> 传送门# {# O, C4 `5 O, O1 I: j' a$ Y
3 p4 d$ ^4 m5 ~" ?0 \京东 -> 传送门
& U0 \; l' y, I1 I; U7 j: m
1 n+ _) ^3 m2 F; U/ K+ u* R! X& s天猫 -> 传送门" ]# A8 u1 q; _7 W) S0 |" I9 m
: `, G- Q1 E8 s1 S: E! Y9 @8 Y
1 |+ d. h% M+ b6 W/ v! d5 f
内容简介:
; h5 _: I* y9 ?7 e
$ p% t7 d( Z+ r# H) I
; j5 \& C2 n1 X2 F& _2 {2 u《加密与解密》(第3版)以加密与解密为切入点,讲述了软件安全领域许多基础知识和技能,如调试技能、逆向分析、加密保护、外壳开发、虚拟机设计等。读者在掌握《加密与解密》(第3版)的内容,很容易在漏洞分析、安全编程、病毒分析、软件保护等领域扩展,这些知识点都是相互的,彼此联系。国内高校对软件安全这块教育重视程度还不够,许多方面还是空白,而近年来许多企业对软件安全技术人才需求量越来越大。从就业角度来说,掌握这方面技术,可以提高自身的竞争能力。从个人成长角度来说,研究软件安全技术有助于掌握一些系统底层知识。' T. n" V& F2 i6 Z
& ]( t) |, U! [8 y/ j- E# A《加密与解密》由看雪软件安全论众多高手共同打造而成,读者将从《加密与解密》(第3版)中获得许多极具价值的技术,是专业开发人员不可多得的一本好书。
/ Q( z: I5 k7 p Z+ G6 e. s2 \- _$ M3 z5 [
( g: T5 p' ]- }! R4 l
目录:
/ G# \0 Y. R1 C9 w" F" t
2 t3 O% Y* A4 f. q6 x
+ p" n6 G2 r! p% _5 B第1篇 基础篇
# ]3 v' ^( q( Y; A4 o+ M$ p6 `( ^, Z" _
第1章 基础知识
% \/ C- K! y* J/ p
# `! ?! p. N6 a: `& C+ K+ m9 \1.1 文本字符
. y# N5 a2 _( U+ w& d2 K2 k, D# m1.1.1 字节存储顺序
6 y$ `3 L6 g, S4 O$ B6 T8 b1.1.2 ASCII与Unicode字符集
, G; ~; m8 R# J% q* `0 L8 F( t" V* ^3 Q/ `. q
1.2 WINDOWS 操作系统. K# D g3 e: R \6 \
1.2.1 Win API简介
2 j5 O! c3 M: M1 ~+ E6 V1.2.2 常用Win32 API函数; a4 l/ m8 ^. @! o0 ^
1.2.3 什么是句柄
- M/ [* {1 e; r2 X! [3 |3 N1.2.4 Windows 9x与Unicode" ^6 \6 z \5 c0 X
1.2.5 Windows NT/2000/XP与Unicode
1 N7 C- ^1 q# H+ N% Q& r' p3 a8 M0 C( J/ B1.2.6 Windows 消息机制# \" H. M2 L/ Z; H x4 r& N1 r, _
) h: M& r! V( M' ^3 v/ a
1.3 保护模式简介
5 {3 X. V8 ?: i# d* Z1.3.1 虚拟内存 T: ?8 y5 ?) m9 z$ A
1.3.2 保护模式的权限级别! v6 F* i3 ~3 A9 Y3 {4 a" b( B" T
1.4 认识PE格式+ ]1 l& F8 M, N5 y7 W
4 q' ~. b1 P4 M* W* i. x# X
第2篇 调试篇
3 k2 f7 x4 |3 P o' `/ A P; x' {( ]& ?& O. e, r
第2章 动态分析技术
9 X+ W! M1 H6 E' F6 h9 ^/ D o1 g T1 J1 V3 V# j
2.1 OLLYDBG调试器
% f0 ^$ V- g% V s% q2.1.1 OllyDbg界面) p, V3 W& ] e v% b
2.1.2 OllyDbg的配置+ T7 q% I2 `5 H" [1 q0 S
2.1.3 加载程序
: o7 R. d& l1 x; s( t T( A) E2.1.4 基本操作) L- `4 X; G# F6 ]3 \9 x8 f
2.1.5 断点
( |. j& q- Q. A2.1.6 插件6 n1 e2 H9 Z5 b4 ^7 O r4 ]
2.1.7 Run trace
# n2 }" C7 d2 c3 y/ }8 B) }7 t2.1.8 Hit trace8 V r2 C5 C. ]# o5 T% f3 w; T# C0 [
2.1.9 符号调试技术 `8 H& O* c v& G: l
2.1.10 OllyDbg常见问题
' I+ ?, K, Q& `9 R1 u! t$ ]% k' Y6 w2.2 SOFTICE调试器
, l, C. v$ ~0 S' W$ k/ ^2 ?1 e% `, x7 S' K1 t4 H
第3章 静态分析技术' g, U8 y! W0 l2 q# t& z1 m
4 ]' r( v- A. E8 O/ d$ ^: C3.1 文件类型分析
Z; c: c9 s: U' v Q' W/ r3.1.1 PEiD工具- [. n) z; Z9 v: p- N7 N
3.1.2 FileInfo工具: z* i+ `0 u/ r9 S
* P" H; [; n' r2 N1 X7 H) V" r3.2 静态反汇编 Z+ `) J2 M- A4 q" a
3.2.1 打开文件+ E* _0 C: c0 |+ n: i- `
3.2.2 IDA的配置
( g0 y! B& t) A' O: D$ y. c% p* m5 h0 J3.2.3 IDA主窗口界面7 [# Y+ V% Q# z
3.2.6 交叉参考
1 I& T I! o4 J3.2.7 参考重命名
2 _; T; j! @! E: P9 T3.2.8 标签的用法
- F* R, J; h! `9 M" Z4 O2 C3.2.9 进制的转换
" M$ b2 z9 E) A/ ^# \* q6 E" ]3.2.10 代码和数据转换, M! g5 h& @0 S h
3.2.11 字符串3 Q: a: j5 l+ i+ m w" g; C0 g
3.2.12 数组* d2 \/ b; `; F: N$ \3 [ K% x7 u! b
3.2.13 结构体6 L) o2 n0 K. G8 P% H
3.2.14 枚举类型+ A; ?: r) t/ Y* p6 o# W
3.2.15 堆栈变量
2 [$ O0 r9 p% [3 V/ V3.2.16 IDC脚本
0 \# F9 |5 \7 g* o. W. p& @# q" H3.2.17 FLIRT
* e8 e7 n; p* M* e2 R: I. ]. l3.2.18 插件$ g5 }& Z% r, R3 G
3.2.19 其他功能
" a- s3 |# n$ _; P% F7 \6 w$ Z3.2.20 小结
* C1 H7 c& u+ J% N( ^. ~3.3 可执行文件的修改
: T# b" A! ~* G `2 H3.4 静态分析技术应用实例
* m2 J$ U. [) ~# N& e# m% t9 Y3 K3.4.1 解密初步$ B8 Y2 v) l( v. G: e5 E
3.4.2 逆向工程初步/ Q& h* D1 p! I8 g# z# u
% r" ?9 ?: { Z
第4章 逆向分析技术: x) o _& G- k$ }5 F& f
- u2 M! ~: O, G/ q. i* a$ A8 Y4.1 启动函数1 d( q6 `; V% o3 v1 l7 ]
4.2 函数
9 ^/ R( T' ^/ M1 `4.2.1 函数的识别
- H/ z6 ~& G& W9 C4.2.2 函数的参数
7 I9 z/ m5 \4 ^) l2 p2 ^4.2.3 函数的返回值9 _* B! w3 ?" N2 V
, b! ^+ Z; m% @
4.3 数据结构- a: T. V: t0 ?1 a* l
4.3.1 局部变量
2 |8 V# ]9 t, P' P4.3.2 全局变量
$ d# y; n# s$ z. |6 D( d7 y ?, W4.3.3 数组/ \6 b' o# H/ u: F* |6 h3 J4 T1 M
4.4 虚函数- }' x4 y" q" R( c; c
4.5 控制语句
' W- ~) U1 ?4 Y) T4 f4.5.1 IF-THEN-ELSE语句# y; v% O/ ?' Y* Q7 v: }
4.5.2 SWITCH-CASE语句7 j4 t, @( E, {) n/ L
4.5.3 转移指令机器码的计算
/ j+ e' ?: v1 J3 g0 Y1 Q4.5.4 条件设置指令# T/ t2 Q) I0 E4 y, |5 j( L
4.5.5 纯算法实现逻辑判断
3 I2 `5 j" N! F" |/ A4.6 循环语句
& s. x9 U& F; q/ o% b5 U. K- ^7 F4 J @2 K0 I
4.7 数学运算符
6 n" e( t5 R" [0 J6 r6 `3 e/ I/ W4.7.1 整数的加法和减法
, `% h0 a4 U: p4.7.2 整数的乘法
- k& w% I) ~+ D4.7.3 整数的除法# h) U5 v2 Q( F8 b# X0 h
* u/ B9 p6 Y+ I6 _2 a4.8 文本字符串6 I$ ?% t) g6 o' h* Q
4.8.1 字符串存储格式4 @( H* {$ ^2 k d' J1 j
4.8.2 字符寻址指令! p+ O V1 E( s8 d8 f1 w o; r0 {
4.8.3 字母大小写转换
$ \% o0 j( O+ Z7 B9 C4.8.4 计算字符串的长度. F, H% L# ?; ]6 I
4.9 指令修改技巧4 A. M# A/ p+ A& p
" A* [& \: T2 }% L' b
第3篇 解密篇, ?: [3 @( r; _2 F- G1 H- o" p
* P4 ?* E+ ?9 p8 X3 P5 Z$ |, B第5章 常见的演示版保护技术
4 n3 M$ w7 w+ Z+ U2 q$ f( ~- m- B' B- S+ F6 T3 @2 P, T$ G3 y! k
5.1 序列号保护方式! b) ?. i+ d; |& B$ W
5.1.1 序列号保护机制
) V- S& I, Z. O: J7 ]! _5.1.2 如何攻击序列号保护
7 t4 J: {0 I" B$ z+ \5 t. j% O- V1 W5.1.3 字符串比较形式$ j# q8 K1 h, D* M- b
5.1.4 注册机制作+ l5 ^3 Q2 j. a3 U6 y- j- N) Z
5.2 警告(NAG)窗口
`/ W3 U4 {3 u% Y$ T3 m% N7 u' l* I3 P; _# F
5.3 时间限制
$ a! K$ p& N3 |* }9 J5.3.1 计时器
* `3 Y, g% {" f5 u# B8 c5.3.2 时间限制/ o' q( I9 C6 Y" |7 R& ~. k6 b* `
5.3.3 拆解时间限制保护( \& Z# \# l5 J7 X- Q) H% ]/ c
( X- N5 `, i3 k W
5.4 菜单功能限制
9 r9 S6 C' {) _' b, l* |& }5.4.1 相关函数) q1 d! ]1 _4 F7 K* H" C
5.4.2 拆解菜单限制保护) }0 n1 G# I/ L4 h9 h7 m2 S
& t7 k: W* c1 u3 m d$ S2 _5.5 KEYFILE保护8 y. ]6 U& G+ t$ h) T5 A2 y
5.5.1 相关API函数( k' j) r* j, K" t7 B, x5 i. t
5.5.2 拆解KeyFile保护& _5 ~0 x( O f5 \1 U1 \: W
) Z- K$ ]: O1 ~+ I+ C4 o
5.6 网络验证
* d- P V! F) n0 o# ~# c; e& \1 t: I5.6.1 相关函数
8 S- o% n6 V& _2 P5.6.2 网络验证破解一般思路9 [- i' X, |0 u& I2 Y, D' G
* o% j1 `8 `( J- B
5.7 CD-CHECK5 q* b$ C) H# `
5.7.1 相关函数# f( n' K; C, `, q" w
5.7.2 拆解光盘保护8 g' c! x* B( y
( k. Z% L4 g$ S D$ z% p
5.8 只运行一个实例
& j( F& M8 g/ H \& X I5.8.1 实现方案5 B' u6 x6 g1 M& e+ P4 L
5.8.2 实例
3 Z7 y# b8 [ T1 Z) h: G5.9 常用断点设置技巧
* ~; n7 y( _1 H! @" n% o
' ~7 g0 f- ]! T5 C2 j第6章 加密算法
5 N' q9 _$ \+ H) Q& J1 S
8 g$ q; ~5 U8 K2 J) H9 m6.1 单向散列算法
0 P8 G6 ?* I2 q5 [8 ]6.1.1 MD5算法
+ b& x; L: c8 S( f @6.1.2 SHA算法
+ C1 N$ T3 N6 {+ ?8 V1 t( X" w6.1.3 小结
' M) Q0 V z1 c8 g% e# ^- N- V2 |; `7 e( f# n3 F% n. \4 y7 s
6.2 对称加密算法
! e/ @2 w5 ]4 R r% ^6.2.1 RC4流密码
+ b0 h2 Q; ]7 z1 N+ x3 P. R6.2.2 TEA算法' h6 ~& H; `+ w' S' u6 V6 h- t
6.2.3 IDEA算法
# a' U2 w& w% z) g! Y6 Q4 u6.2.4 BlowFish算法
" G4 C2 a, p# q: B# H6.2.5 AES算法0 \! d* H7 }4 u# N' ]/ m% E; O
6.2.6 对称加密算法小结
3 @/ ]$ e9 \) [/ \- f6 v$ O6 S. y
6 r C" R E, l* L( |; `# c. I) C% S6.3 公开密钥加密算法# ]7 A% V) M+ f+ A
6.3.1 RSA算法1 x/ e5 E$ j; \. t' n
6.3.2 ElGamal公钥算法
1 W! ~2 y9 f4 b# q" W6.3.3 DSA数字签名算法
" @. U+ `; Y+ x+ G1 x/ ]- |) u* n) ^/ a6.3.4 椭圆曲线密码编码学% `; d# q3 ]/ B" ?, V5 K, w
# B% [: s; ~: ^1 e$ ]/ R
6.4.1 CRC32算法+ k& C Q3 Z( i- G) K5 J
6.4.2 Base64
4 E. c$ u3 @7 t/ n; l# b6.5 常见加密库接口及其识别
. z }& V4 h, m: c$ z8 A& k6.5.1 Miracl大数运算库* e- |- `$ @; ~- g4 H( g( t3 b" L
6.5.2 FGInt
6 ?# i1 I/ Y/ ]) G6.5.4 其它加密算法库介绍6 N; q/ L8 @. k% d2 } {
$ }6 A5 g( R; m& F第4篇 语言和平台篇
, U% u/ ?9 r2 y: ~- D
. H8 h! I( w5 B# P9 k6 N第7章 DELPHI程序
6 e# ]2 ?/ [$ o5 W! X0 ~) q& z! [0 R/ O2 ?
7.1 认识DELPHI( w1 {8 Z: g- C8 U x0 |" h( ~
7.2 DEDE反编译器3 w! ]+ b" t: Z) x- Y! M
7.3 按钮事件代码5 j7 |' H% |% ]$ z% T" l2 h5 }# N+ D
7.4 模块初始化与结束化
- s4 g1 |1 Y. Z) G+ }- x
2 T. N# H; W; D% o8 Q" u第8章 VISUAL BASIC程序" j: K/ M: R. v) I2 O: { y
$ m$ y N* y0 S2 |
8.1 基础知识! ~1 n2 |/ y; a
8.1.1 字符编码方式
* K0 v8 G' i. I, z& W4 h' I) V8.1.2 编译模式
# j8 P5 p) c! N0 ]1 I3 v& N% B' ]* W, y; |+ e
8.2 自然编译(NATIVE)
8 B% r3 Y4 B% n7 f+ W8.2.1 相关VB函数
& N* Z4 S' {' s0 J8.2.2 VB程序比较方式
1 \) a- X9 e, W% [# w) U
7 w' n$ P/ E+ z4 B9 p: n7 }8.3 伪编译(PCODE)(cyclotron编写)
8 V8 q2 ]# C, Z7 H8.3.1 虚拟机与伪代码) C9 Y0 ?' h7 y V: J( b
8.3.2 动态分析VB P-code程序/ Y; o! G& ~" B: K
8.3.3 伪代码的综合分析! U1 p3 j# c$ ^0 Y8 ^! r
8.3.4 VB P-code攻击实战3 M' l& A/ k# I7 }: Z/ o
$ }! v. z/ F: l第9章 .NET平台加解密(tankaiha 编写) W; F" c, \+ ~
. b$ x7 w6 P& i/ {( u1 M) K( w
9.1 .NET概述1 p! t. ]1 O6 k- D
9.1.1 什么是.Net
0 q* c! \* K0 s. n9 u* H' M3 [; J( W9.1.2 几个基本概念' A, C, t( B: S- Y) j
9.1.3 第一个.Net程序
1 o3 a# r* @5 P
6 J+ `8 x* p7 a4 k; U( b8 @ Z9.2 MSIL与元数据
! V# ]* h% N9 c5 U: `9.2.1 PE结构的扩展$ q8 {) }$ h I; p
9.2.2 .Net下的汇编MSIL
4 R1 Y( W w3 `" I7 P0 ?6 q* A9.2.3 MSIL与元数据的结合! ?+ f! j9 t: ]
* D& g: H3 {6 [( V0 ~9 V d. _9.3 代码分析技术
5 s+ F5 a" S; h! f. b- m9.3.1 静态分析
+ \6 [: i P. G. c# z& q8 L9.3.2 动态调试
( _0 P/ P! G& L( B9.3.3 代码修改5 w& p# n D( H' Y0 B
; ?+ v! l7 u3 j. V9 e9.4 代码保护技术及其逆向
9 u& ~# a+ t" P# F0 s9.4.1 强名称
* C; R; r) q# H% J2 u. B$ ?9.4.2 名称混淆0 Y! q e! o7 w; y Z. j
9.4.3 流程混淆, H4 O H6 K, k0 L
9.4.4 压缩
: d- l; x" w* W+ L9.4.5 加密
( i; R# E9 m" s9.4.6 其它保护手段 Z- |) H& Z; x, \" l
0 b* O6 i: Q: O i3 C! p$ U/ \; l- ~
9.5 深入.NET
5 k/ _* k: z4 l f" |3 l1 M3 Y9.5.1 反射与CodeDOM
0 [# f2 y. B/ l$ c0 a$ @9.5.2 Unmaganed API- ^( t8 A n0 ?; M# m1 |
9.5.3 Rotor、MONO与.Net内核6 f- r4 k6 |+ L+ h
- }+ U3 u- G" a5 u5 F9 B9 i' Z+ Y第5篇 系统篇0 s" ?, f" r4 h. `* d
5 M' N: t9 j6 D8 w: n
第10章 PE文件格式
# i% w% @. E# _ t$ d
( ~- e* Z* o I# P* Y4 x/ D+ x) y10.1 PE的基本概念3 s4 q& g$ R, m9 } D
10.1.1 基地址
9 n9 H4 J. D3 m; K* k$ J4 ]10.1.2 相对虚拟地址
! M: G3 u' d) L5 q# a& |% T: z10.1.3 文件偏移地址! D+ u; @2 V+ a- c9 P2 }
10.2 MS-DOS头部% g/ z, d; I/ h4 B; o# s
. s- x- h% R- n9 Y
10.3 PE文件头4 C# Y' f) w" y& e* h% i9 M% O# G
10.3.1 Signature字段; p( @& l2 ^2 w8 \4 v& M; ~6 M
10.3.2 IMAGE_FILE_HEADER 结构% e7 d* n8 E- D/ x9 y, z
10.3.3 Optional Header
) E0 c" {* t* Z, X) Z, P6 v1 L$ t$ _' g) S9 Q2 }
10.4 区块
$ C% D9 y# c, l- Q2 a10.4.1 区块表
+ \" [, V S/ G% {% I* C* N- q10.4.2 各种区块的描述* @6 U5 H8 Q9 O! R* m* \( K; n
10.4.3 区块的对齐值9 P. l/ z% a+ C( N6 N
10.4.4 文件偏移与虚拟地址转换; C2 |5 ?8 L, ^# u7 i
! n2 g# x- w0 j1 Q
10.5 输入表
; ?7 Q9 V6 k, u2 e, R( P4 S/ [. _10.5.1 输入函数的调用9 }4 G5 r% G5 N H
10.5.2 输入表结构" ^% E( D5 G6 `4 l/ o- s2 W
10.5.3 输入地址表
- j6 N7 u3 @' c. U10.5.4 输入表实例分析 z1 {% ]/ `3 w' Y/ J
10.6 绑定输入
! O( H" |" e9 r8 q+ ]" c! R$ o9 H" H U7 W
10.7 输出表) ?" d3 p1 u' n
10.7.1 输出表结构$ z. W; I/ t- }6 V4 P
10.7.2 输出表结构实例分析7 a( t: O8 Q+ G- X: ^$ }( B3 S
4 \. n6 G$ f7 e! x! d* E* w# t10.8 基址重定位% W z: o: K0 b3 }6 }! z, g1 J0 T
10.8.1 基址重定位概念# _( K+ k; D% b7 l* \
10.8.2 基址重定位结构定义( _2 M# ]+ z" x: F. e
10.8.3 基址重定位结构实例分析, P, S" T& K9 d
' t5 I2 Y- c! X N8 p
10.9 资源! ]$ F- \$ w# |" e$ ^5 }9 D0 F
10.9.1 资源结构) n: U7 W# C8 I2 {5 p3 W) ?
10.9.2 资源结构实例分析* W3 ^% s% N$ k5 a$ V
10.9.3 资源编辑工具" F+ G' n9 K) S8 q$ b
10.10 TLS初始化
5 x9 v- j( w! R4 R10.11 调试目录+ g5 o4 I" z3 I2 }9 f4 b
10.12 延迟装入数据
5 {$ e: A' t; l5 G/ Q* k0 f. |# Q10.13 程序异常数据 L" p- j9 o& e1 z; W" d/ v
10.14 .NET头部/ t$ n) k' q. q3 k( `9 W
10.15 PE分析工具编写/ b8 B# Y2 K, `* z9 h
10.15.1 文件格式检查5 p7 C+ X9 s: N4 f1 }3 S2 u
10.15.2 FileHeader和OptionalHeader内容的读取; y' a% ] }+ a3 R
10.15.3 得到数据目录表信息4 K% U+ K. w' f0 F- r
10.15.4 得到区块表信息
& Z; ^( a4 v$ w10.15.5 得到输出表信息9 O; E( w6 ~5 N4 Y
10.15.6 得到输入表信息( e9 z6 @' t. t
8 z; f0 {) r8 e% t. h( k
第11章 结构化异常处理
$ ?' v: ]+ G7 H$ X; _8 b# }& ?% n' v) d! g9 k' h1 V6 k; F/ Q# c/ C
11.1 基本概念
4 P. @. n2 F% f( R4 p% u) g11.1.1 异常列表
4 I# {0 o& L4 j11.1.2 异常处理的基本过程
" Z" D' l1 M+ U. m11.1.3 SEH的分类+ K1 B: Z! f. m' r
' @5 S0 R5 k% y2 _9 B0 R0 G
11.2 SEH相关数据结构- @- S8 E8 k2 n! D
11.2.1 TEB结构' c$ B& z1 i7 c1 G4 I @
11.2.2 EXCEPTION_REGISTRATION结构
~- a! Y3 i* t& W) U11.2.3 EXCEPTION_POINTERS、EXCEPTION_RECORD、CONTEXT
+ {$ G& m; e/ W) ]11.3 异常处理回调函数6 f1 ^: T7 z9 A E2 f5 d5 B
% d! \2 z2 V6 l/ l- [9 d0 L& ]第6篇 脱壳篇
& A' ^. z& s' _! y" y$ u, ^4 _) k! Q8 X7 {) K+ r; x- e
第12章 专用加密软件+ l/ L: o% P v% B- G4 ^; f
1 e3 {! O; ]! v; X
12.1 认识壳
2 X) j* C! e9 x2 X3 a* }) `12.1.1 壳的概念
# Y# }* d- e* `12.1.2 压缩引擎7 w+ v. N, g- \3 S/ F
12.2 压缩壳! c" `+ E& s! u( I& x6 J, ?" W
12.2.1 UPX
( x% S. _( `8 p8 a1 a12.2.2 ASPacK
g7 Y& W1 j ^6 E0 o G! j7 Y$ g% o: O+ W& Y. c+ v- E
12.3 加密壳% q7 W. w7 r" v! Y$ ^7 m
12.3.1 ASProtect
3 P/ ~8 L C0 [5 `) A0 s$ C12.3.2 Armadillo/ G. X) \* k& \# j# F( n
12.3.3 EXECryptor
- W, ]' y8 J; {3 c! k12.3.4 Themida
( ^$ a; {. n) E p5 ?: j, M" t4 \' x& X* J; r
12.4 虚拟机保护软件* c; ]) s2 g! Z
12.4.1 虚拟机介绍& c r0 Z0 u' H
12.4.2 VMProtect简介
2 t9 U3 K, R2 {7 |6 j! w+ U
5 t+ x2 K7 i# E第13章 脱壳技术
6 }) |3 g% g# ^
7 }2 ^9 c/ L8 P! l5 M1 O13.1 基础知识+ [( e# q8 I! v* a4 G4 p
13.1.1 壳的加载过程
) R0 }; O7 y* D( z0 ~2 x" m13.1.2 脱壳机0 J! B. n; G* X1 x
13.1.3 手动脱壳1 h( L( V p$ M. t7 b
) K d) z' Y& J2 U2 _! O% P! p13.2 寻找OEP
, H* w s. c6 j4 v$ C I3 Q0 s13.2.1 根据跨段指令寻找OEP6 F& _. ~: X9 a" E1 _
13.2.2 用内存访问断点找OEP
2 ?- {9 C0 a$ g" D9 ~4 h- M/ u13.2.3 根据堆栈平衡原理找OEP6 y& i; c2 g' p
13.2.4 根据编译语言特点找OEP
5 j. ^9 W, S; n& Z+ V; y0 s4 W" V# j% w5 Q5 C4 K6 p* W
13.3 抓取内存映像' v4 ^3 H8 Y9 W. n9 G
13.3.1 Dump原理
. S% k* _3 _% W5 Z) V2 w: p) U13.3.2 反DUMP技术8 C6 v. r& ?5 u6 a9 G( M' S
3 o% t) Z- u% r13.4 重建输入表
' F9 e# Y! Q" a/ ]9 {9 h13.4.1 输入表重建的原理
$ W/ B% C" M1 F# |4 H4 A y1 W13.4.2 确定IAT的地址和大小
3 ]- f! M7 D. Y: @13.4.3 根据IAT重建输入表
8 `7 A1 d& v. B: o9 ~! N& d# H13.4.4 ImportREC重建输入表
6 i2 a0 J" w% r" u; {, w* q13.4.5 输入表加密概括; [6 y1 N6 G) S% _' T7 M" r7 ]
4 `8 c" q- Z0 H* b13.5 DLL文件脱壳
) ^6 M! e1 M! ~6 U- T13.5.1 寻找OEP
8 Q5 s x0 V5 i, ?* @, |& G. _13.5.2 Dump映像文件9 \ Q6 @ B, Y5 e
13.5.3 重建DLL的输入表
0 \( g6 q3 s$ V% T1 f8 ]% s13.5.4 构造重定位表
) O4 t" @2 V0 j* n13.6 附加数据
$ @' U! B$ W ~' x13.7 PE文件的优化0 ?; l) H% P) K' q, ~/ {( M( q
13.8 压缩壳9 |8 H0 f1 X" q" A5 X7 p
13.8.1 UPX外壳
/ ^ E6 |) M" B- s! m6 j; o13.8.2 ASPack外壳
- Y$ B1 o$ B) i5 o2 `- h13.9 静态脱壳% }) T3 ?) J6 Y6 G" i
13.9.1 外壳Loader的分析
0 t8 J6 t" P! c8 {8 w5 U& P* U6 D13.9.2 编写静态脱壳器
( n! {, B% _5 F; X5 |# F! _7 W5 j* l13.10 加密壳% c$ l! V9 m: \+ R( o
13.10.1 ASProtect
/ y/ C8 \# G6 u+ b13.10.2 Thmedia的SDK分析
; y% Q0 W1 u2 q* o) [* p& a1 I$ t% e$ k9 c0 i8 X
第7篇 保护篇. ]: R) ~+ q: k; G
+ o+ r) E0 B1 m2 y1 O# O7 _第14章 软件保护技术
) S: N* r- j& T0 y" |5 t9 o) J5 c4 `+ c3 l: H9 i8 D9 H, q; e, {
14.1 防范算法求逆
- P+ {; F! v" N* [# L, }; M9 n14.1.1 基本概念
+ y5 z, w8 A0 g14.1.2 堡垒战术
6 k; M/ e. V( R2 x/ c* f5 Z14.1.3 游击战术% K) z0 ~4 T) y" @1 ^) a. Z0 X! k
! q Y u- @4 o; c0 k3 y
14.2 抵御静态分析
; Y* A( X: ]2 p8 S V. f! S14.2.1 花指令3 |$ W; Q/ h5 [& Z: c h. I
14.2.2 SMC技术实现
) y/ ^/ O( A, l' Z) n3 l14.2.3 信息隐藏
- z9 l3 E8 a+ I6 K14.2.4 简单多态变形技术# Q, u- D# I* T5 y& d' R* d
- u/ \( {1 j" Q14.3 文件完整性检验
+ b, {# k" `; h" Q* o' R14.3.1 磁盘文件校验实现) k1 X# q" e) @1 _" V6 C% n3 ^
14.3.2 校验和(Checksum)
# c5 G) {5 k% c/ |2 c14.3.3 内存映像校验& G: M- z# u% i9 p! c
" r0 }3 c4 b4 _5 `8 M14.4 代码与数据结合技术
3 n' w5 g4 J9 _. s8 g0 x14.4.1 准备工作
) |$ F& N' D/ H- K9 L2 z14.4.2 加密算法选用! o. l) R% d6 |: Z
14.4.3 手动加密代码
4 ]8 d3 {- I$ B. i14.4.4 使.text区块可写, c* V5 j9 p) q6 C, c
14.5 软件保护的若干忠告
' |! `6 z* K4 U) e/ D, J3 {+ _# U. n7 f. P u
第15章 反跟踪技术(forgot编写)
2 b3 j- Q& t# \) {& \! o9 w) k+ j
' O0 E' L6 k, w$ I. s& n8 A# k6 a' n: [15.1 由BEINGDEBUGGED引发的蝴蝶效应
( g8 ?. h1 S# o# I1 S2 g15.1.1 BeingDebugged
7 \ y/ X4 ~- d/ {5 Z5 T% D% |15.1.2 NtGlobalFlag: d5 V& u$ \; m O
15.1.3 Heap Magic
- ]+ s8 Y' I( h1 j, _6 e5 ^; I15.1.4 从源头消灭BeingDebugged* B2 a! \. Y* q4 f$ S; G' V; {
6 a, ]( M+ o5 L7 F" c( N! {9 [15.2 回归NATIVE:用户态的梦魇
9 T8 Q+ k0 p% O15.2.1 CheckRemoteDebuggerPresent! _8 F- Q/ |3 i6 E* H
15.2.2 ProcessDebugPort& o! T; F5 J( x! W- n
15.2.3 ThreadHideFromDebugger
0 h p# F+ t! z8 k( P15.2.4 Debug Object
# a9 M2 z- o/ c/ `15.2.5 SystemKernelDebuggerInformation# k# A1 r- @ ~' P6 u, N
15.2.6 Native API, j5 `1 {4 D2 x1 a7 F8 B5 h5 ]+ e
15.2.7 Hook和AntiHook! l- e( M3 b% r9 @# b$ `. r% `1 Z% C' u
6 Q" Y8 ~+ ?5 H# j15.3 真正的奥秘:小技巧一览
8 R& T8 q! l% E" \2 b15.3.1 SoftICE检测方法/ E2 ^8 {+ {4 o8 z& n- z
15.3.2 OllyDbg检测方法
6 M2 d0 x- ]2 K15.3.3 调试器漏洞, n: U7 U7 s6 _
15.3.4 防止调试器附加
( M( N* K( ?/ l' [6 l, J1 E15.3.5 父进程检测4 f& t/ N, r0 b8 Y" M
15.3.6 时间差3 |( U5 D4 U6 c5 g4 c( d# i
15.3.7 通过Trap Flag检测' X* i `. w4 C
15.3.8 双进程保护; h A) f/ w% V8 r1 P% a+ V
& Q& _$ }" X1 Q, s# T* A: A第16章 外壳编写基础(Hying编写)+ T# C0 |+ f k$ N9 C; ?( ^
+ g4 F" `; z. F7 @ Q8 t! f6 k
16.1 外壳的结构2 z6 q' c- Q+ T; S# W# `
16.2 加壳主程序
) t2 w7 Y; ^# ?) i16.2.1 判断文件是否为PE格式7 h- p) ^9 R$ m, O5 d ? r6 K
16.2.2 文件基本数据读入
* K& l: x! p1 }: ?8 O0 I16.2.3 附加数据读取, D% Q% V% S* `9 _* I: u: o! r) c h" C' N
16.2.4 输入表处理
, N8 h' U5 Y* i16.2.5 重定位表处理. R- y; m' V3 T$ k2 R' q
16.2.6 文件的压缩1 N' t6 ~5 Z$ P/ R+ ~: r2 k) q
16.2.7 资源数据处理, m6 e: @; R9 n$ d$ k
16.2.8 区块的融合
I! k1 Y7 ^) q$ t- {5 z, h! k9 Z* ?0 h% O; P
16.3 外壳部分编写
2 F5 P8 x. X: Z' S" r2 Y: R+ ?3 n16.3.1 外壳的加载过程6 V+ V% Y F: w7 ~* q
16.3.2 自建输入表
% O8 }- f' r |* q16.3.4 外壳引导段
& M4 ~. U3 _" B16.3.5 外壳第二段
, \& a/ Z& e# X/ R' k16.4 将外壳部分添加至原程序
; A! Z$ @7 @1 r; g
n4 `4 @7 K& O2 k第17章 虚拟机的设计5 K+ x* B# U" d, h" B
% L" y$ L3 u9 X3 a9 n17.1 原理- \2 H9 L- q9 R
17.1.1 反汇编引擎
- B$ v1 j; M+ D* v17.1.2 指令分类" q6 }+ u- m6 g# q) T7 l8 ]
5 v! a' r4 h2 B6 [6 O# Z3 O17.2 启动框架和调用约定+ Z7 _* W( m4 D4 m
17.2.1 调度器VStartVM
9 P( o: p) D9 k* J17.2.2 虚拟环境:VMContext2 S5 H0 ?, s0 U: N2 W
17.2.3 平衡堆栈:VBegin和VCheckEsp
7 N2 k+ e8 g3 k. l! Q4 w7 b0 _7 W7 L/ [4 a5 }
17.3 HANDLER的设计- }' b# q Q m2 L9 f1 a, A
17.3.1 辅助Handler
/ s. ^- x7 ?& ]7 @17.3.2 普通Handler和指令拆解
8 e* d' z0 r6 q17.3.3 标志位问题
2 I$ e6 M7 X; F/ A17.3.4 相同作用的指令
, r4 o5 d- a% ~; @: r' V17.3.5 转移指令 y% v( m1 @6 `+ e3 h: q
17.3.6 转移跳转指令的另一种实现. z# u3 }8 x0 q' B1 I
17.3.7 CALL指令
$ L, F4 Q, ^# e5 x17.3.8 retn指令( A: B, S4 F9 a( r" g
17.3.9 不可模拟指令
- }- f# r( u) O$ c. J" Z. A. n8 ]+ P: B1 e$ a$ z" c
17.4 托管代码的异常处理
% i5 z8 B1 z! W, V17.4.1 VC++的异常处理
1 q- P1 W. y" ]0 X. Z17.4.2 Delphi的异常处理
( q! T) K# |; a' V- z! M2 ]( }- v17.5 小结
6 q2 c4 ]# V) K9 W6 ~ q# h& ^; H' _
第8篇 PEDIY篇' x* V7 w& Q* `
6 E$ q Z5 o4 N# Q
第18章 补丁技术! M' e* H, v9 b7 P
; M* {* I/ D9 F% T7 w4 s18.1 文件补丁) r* G, O# l' `! Y# G
18.2 内存补丁6 }1 E, m8 w' N, r q
18.2.1 跨进程内存存取机制
7 ?. O: }* B2 Z% F* ?' p18.2.2 Debug API机制
& T5 |# X% f! m1 ?8 D; l18.2.3 利用调试寄存器机制
$ O0 d7 D1 ?: j8 o18.2.4 DLL劫持技术3 D3 A' h9 O: Q- ?8 X
/ A+ ?8 V0 c1 n- T5 U18.3 SMC补丁技术( a) E1 Q5 x6 R* s$ B% e/ ^
18.3.1 单层SMC补丁技术5 V! ~- u' _- Z
18.3.2 多层SMC补丁技术
. p* S @. j6 a I* z1 \18.4 补丁工具7 @' d) n) ^% s( f
[6 F1 P1 v0 z8 X0 t; l3 P! a7 a第19章 代码的二次开发 B. f5 q$ Q4 Q! Y0 h
8 ?2 y) ]( `% f( }
19.1 数据对齐' L; t9 z$ ?( l6 b
19.2 增加空间
0 O* p3 n( A s, X" y9 G19.2.1 区块间隙
' m' f1 p8 X( K) N+ l, L6 M19.2.2 手工构造区块
( `# M" x( `3 T4 _19.2.3 工具辅助构造区块
8 k, C T5 w4 x r" p& Q* a8 i* K5 I# q( M7 X# ~4 s5 K( R
19.3 获得函数的调用
) `6 D( v9 k" {* S- D7 q' `19.3.1 增加输入函数0 ~( F$ `/ O# L: @1 R! C) ]
19.3.2 显式链接调用DLL
7 I7 ?0 g2 ?" r. |1 V1 X% Y# U! s- E/ `5 Y3 g6 j
19.4 代码的重定位
; R, U2 [ l& p; v5 B \19.4.1 修复重定位表0 H) E, n+ c# f" V- f- S% z
19.4.2 代码的自定位技术6 g( K& W, S0 g( z+ T. ?6 l
19.5 增加输出函数
# G u p7 r, f
3 s$ i1 i. t/ @19.6 消息循环
6 {( j" e U* O5 r19.6.1 WndProc函数! z9 b( l; c, \0 w% D$ Z
19.6.2 寻找消息循环
* W; [. k- ^5 i& a19.6.3 WndProc汇编形式
: z* f+ s. G3 U( `7 Y+ N* m& c E4 {5 H
19.7 修改WNDPROC扩充功能8 N* ~" b. l% F: a
19.7.1 扩充WndProc
! a! Q8 |& C* H, W19.7.2 扩充Exit菜单功能
1 e+ X# z/ @8 G& q9 r- ~19.7.3 扩充Open菜单功能
$ Y% {3 Z/ f6 N6 _6 u4 g$ `4 Z: {% n) Z5 S9 ?- f# ^# k, Y2 f3 I& [7 p
19.8 增加接口
: ?( Z C! r- k, a; l1 c19.8.1 用DLL增加功能- g X0 ]" u$ L1 N, g
19.8.2 扩展消息循环
1 v: h$ D" B0 s8 C% y* w) ]/ f! |% ~; e9 i& ^
附录
0 \) c+ t: q; c0 S* Y {% W. [ S
" z d# S5 \* j: w E附录A 浮点指令
! o* G/ ~9 B; ^. h6 z, P1 B$ s& o% R% I
附录B 在Visual C++中使用内联汇编; U% T) a7 I, i% ^; O% ]
; G, V2 X( t" v# r# ]) a
术语表
8 i3 {% N" i& i1 t: c0 F8 a: _$ H. r) `& T! P
参考文献4 B, m I6 P: ^3 X& A" D. F
. U- y: i9 m5 I0 s4 w6 j |
|