|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
5 V3 _; ?* G. e% _! U$ {
0 R: c& f/ J$ E7 Q书名:《加密与解密》(第3版)
6 q" y* ^& i/ ^* e7 N( Y作者:段钢8 W, a2 Y( J4 o- i1 w3 h) l" o% P6 ?
出版社:电子工业出版社# {3 I: b+ d& C: Z- D" P
出版年:2008年7月1日(第1版)
; {% K/ m5 @2 w5 e7 A定价:59.00元! A0 U3 P) w% z
装帧:平装- F. c( a2 c( ^
ISBN:9787121066443
& c; D# K# L& j" V% U* |* y6 r4 h7 n3 V* }% A
购买链接:% X& V K2 ~* i" h
7 u5 m" N- w8 Z, G6 g' J' {
, `5 P! D5 q e/ q) E& x亚马逊(Kindle)-> 传送门* C9 k7 v) Z* g; Q2 e3 L" n# ]2 c
$ \: E) I& y1 I9 U4 ~, ~
亚马逊 -> 传送门
9 c! X* ^7 d6 `! ]2 l0 ^1 y; X$ {- d" M/ |7 X( V# M- r7 d$ X5 e
当当网 -> 传送门
h2 T( w: s c/ Y/ C; M+ X0 M6 ?+ Q, Q" A: [1 Z V/ P
京东 -> 传送门
9 x* [+ \* j7 g8 b
8 @" |' X4 f- m% m$ x天猫 -> 传送门
l8 C: \: u8 D
* X& r3 O( I' M' M1 f% ^7 E- P: N2 k7 A# a! }: ]! D8 o$ y, s; o
内容简介:
" w8 u, g# n7 _2 E/ }0 r7 T' o7 X& \9 s& Z4 ^' J6 r
9 d5 R! M" j S8 b
《加密与解密》(第3版)以加密与解密为切入点,讲述了软件安全领域许多基础知识和技能,如调试技能、逆向分析、加密保护、外壳开发、虚拟机设计等。读者在掌握《加密与解密》(第3版)的内容,很容易在漏洞分析、安全编程、病毒分析、软件保护等领域扩展,这些知识点都是相互的,彼此联系。国内高校对软件安全这块教育重视程度还不够,许多方面还是空白,而近年来许多企业对软件安全技术人才需求量越来越大。从就业角度来说,掌握这方面技术,可以提高自身的竞争能力。从个人成长角度来说,研究软件安全技术有助于掌握一些系统底层知识。
. O: A% a% X* p" H h& Y$ F
$ E1 h- Y7 [9 @3 Z: X《加密与解密》由看雪软件安全论众多高手共同打造而成,读者将从《加密与解密》(第3版)中获得许多极具价值的技术,是专业开发人员不可多得的一本好书。! V/ Q3 y$ f' H3 N
; r- W% g% Q, E, W0 n# B: K1 k, h% x7 W$ T) P+ ?
目录: F" [5 V! G& d* J& j* m
4 I* [% C7 c& p1 |! Q' ]8 Y 3 [7 p7 A5 R# s5 A) E! d: v1 D
第1篇 基础篇3 k. s4 }: s" T- a" F* X# Y
/ P9 X6 j4 e" o+ j+ N4 w
第1章 基础知识
. j% o/ ^3 f$ X: I9 I
- i" ?& s/ h; ^% s: q4 m- t1.1 文本字符0 }3 T( \7 k$ x' `0 g
1.1.1 字节存储顺序
' y' o0 a I7 Z0 O* y1.1.2 ASCII与Unicode字符集
+ n: C( X. M1 z; h0 X0 L2 I+ l" z1 B ~+ C, J7 E8 \
1.2 WINDOWS 操作系统
$ @- H9 v: z, {- [1.2.1 Win API简介
1 n: y, G! y3 g, V, D. p4 L( C; c0 g1 t1.2.2 常用Win32 API函数5 m( ?! q" a& y/ v f' V3 I
1.2.3 什么是句柄
* V7 Q6 |% R0 i. V( i3 H$ \1.2.4 Windows 9x与Unicode
% B% c) C2 G. L1.2.5 Windows NT/2000/XP与Unicode
3 ]3 @% i% z' ^) T1.2.6 Windows 消息机制
( S2 {3 i1 x3 Z4 B- B2 R% P7 g( y+ ~8 [& _. N) _
1.3 保护模式简介
2 j' j$ |; W) J+ @, g( }" Y1.3.1 虚拟内存
4 X: U( I! @0 c& P5 B1.3.2 保护模式的权限级别
! x" L. @: Y1 @7 ]% m1.4 认识PE格式; T! n6 K$ F- M( g6 |
# N* ^2 V" K/ N+ H$ H/ W+ w( @
第2篇 调试篇
! w( W0 W/ N" o! p7 |: x1 _% _% [7 G, R# I, l& U7 e
第2章 动态分析技术6 g* h @2 V9 X% v% |
; f3 G9 q7 q! Y) A
2.1 OLLYDBG调试器" N6 C, M, F: ^$ t
2.1.1 OllyDbg界面$ X, @' E; l- f# Y3 N
2.1.2 OllyDbg的配置% e/ a% c' ]4 I( ?
2.1.3 加载程序& V3 @9 J# i2 H( g* c$ [
2.1.4 基本操作
( q8 O1 L* P9 j0 a) A2.1.5 断点
# u5 f5 S1 w- _' D2.1.6 插件
# ~0 v6 A1 Z+ q* K3 S$ W0 a. J2.1.7 Run trace* t9 M* i; o+ C! Y' B3 t" X
2.1.8 Hit trace# L+ x: E: p5 a2 j; c
2.1.9 符号调试技术
5 W- c, L: n- @2 |# Z. J- [2.1.10 OllyDbg常见问题: q. K x q) G
2.2 SOFTICE调试器; d$ O$ b+ ^# I& f7 s/ ^
|7 m, c3 w7 h5 d8 v, J3 a0 w9 k% x7 P
第3章 静态分析技术& D! Y; I' k/ L; N. r
# { H: A* q4 o0 K4 v7 s3.1 文件类型分析3 M4 S+ \+ L+ y; f
3.1.1 PEiD工具3 @: d# l2 e2 u/ g
3.1.2 FileInfo工具
$ c; ]% U) [1 w" c8 J1 g3 o9 i3 f7 G; _" U) H9 b2 F
3.2 静态反汇编
, T+ S3 R3 \9 F2 x/ T3.2.1 打开文件7 m1 R: L# I; n6 h: C- n
3.2.2 IDA的配置5 z V/ |+ |# `- d' @! h
3.2.3 IDA主窗口界面" b+ J# ~ T5 ] s4 O6 u
3.2.6 交叉参考
6 e$ C( }" d* n. A( ^9 x3.2.7 参考重命名
{9 H6 a3 t9 r! A7 L3.2.8 标签的用法
9 H6 D/ k& O/ T0 F8 W# o; U" P3.2.9 进制的转换
- I; M, S# a& Y0 S, e0 p3.2.10 代码和数据转换& S' {: V( k% P0 I5 `" z
3.2.11 字符串
6 K# o! l& L; T: H3.2.12 数组# x9 ^- D- l6 p d7 c
3.2.13 结构体
0 f# b x/ V. a- ?9 O3.2.14 枚举类型
! t* }/ q& L% ]2 z3.2.15 堆栈变量
: I/ g& E, m/ H# ~, u( k8 k3.2.16 IDC脚本
6 d! b8 [, o1 D5 ~9 t4 p5 X3.2.17 FLIRT4 G- i* |8 k) f( x' M
3.2.18 插件
' s! }6 C6 S' \7 O2 r3.2.19 其他功能1 I0 C8 u, c: g
3.2.20 小结! k; m2 T' Y- Z
3.3 可执行文件的修改
1 h: [- Q$ n! S* D: V; y: x. P$ e1 r3.4 静态分析技术应用实例6 w# a) ^& l: N- N$ N8 z
3.4.1 解密初步
* _0 B# O! B7 c) q4 N3 d7 h3.4.2 逆向工程初步
. \: p9 y( }8 N3 _: F' D- z
; U* x& U- z$ p! e2 t2 \第4章 逆向分析技术* l$ G9 v2 l" Z+ X
2 k2 u+ I$ l$ L4 l. K( X
4.1 启动函数
/ P- S9 w$ ^8 |: C5 I4.2 函数
! ~7 h2 G- h; p" c4.2.1 函数的识别; O4 w9 j9 s" w7 b2 T( Q
4.2.2 函数的参数
4 i4 L$ F! h8 R( o7 z8 h4.2.3 函数的返回值
" |- e8 x( x, D% _; z5 |6 E. F/ i: W8 \1 \' t' }$ n$ h/ P3 G& Z4 _
4.3 数据结构& }5 u- E9 S* W9 k; o* N/ D; a# |
4.3.1 局部变量
, Y5 H& w* G- K1 w- R9 D4.3.2 全局变量/ K7 \& a7 ~6 ?# P5 [$ u
4.3.3 数组4 F- m' O$ F% l) p* y
4.4 虚函数' U, {5 c$ E ~: B4 F& k9 n
4.5 控制语句
( C, _+ f9 f$ A6 p" @4.5.1 IF-THEN-ELSE语句1 H- x3 ]! ? C3 L# D! X
4.5.2 SWITCH-CASE语句/ Z5 |1 S( N( b1 Z
4.5.3 转移指令机器码的计算! {1 I v; W7 G" Y( l
4.5.4 条件设置指令
/ _- v$ o% e5 h- H- R9 ~9 N4.5.5 纯算法实现逻辑判断
0 z R$ a5 S9 d& y( [: A4.6 循环语句" M; T7 p* P( S) H! [$ e5 d; d+ Z
: j' I0 u# N0 [! ~, O8 c
4.7 数学运算符: }* P2 I0 N9 g' a# `/ h
4.7.1 整数的加法和减法
0 n4 c1 j d, b- X6 c/ ~% A3 [* e4.7.2 整数的乘法! T1 Q: ]4 G/ x( b+ @/ ~0 C
4.7.3 整数的除法
" u+ U/ D/ W+ o* m' g+ h( x0 b: w4 j! Q$ I; t6 d8 Y" \* [
4.8 文本字符串
r# a* v/ B5 Z& S! _0 `* r4.8.1 字符串存储格式
" p4 E, {0 u% b k$ `2 B4.8.2 字符寻址指令
3 N9 L8 ]1 [+ _; h& Q3 V3 U( x4.8.3 字母大小写转换/ B0 i* F) Y6 @& s8 S& W
4.8.4 计算字符串的长度
. t" d# e" t, {/ j9 O T2 p4.9 指令修改技巧
0 I" }' G, B+ _! h. @5 s3 |
4 Z2 E N, q& h; \# f: _9 g6 _' R第3篇 解密篇1 p2 _! M- S! C/ l8 n
8 u5 C6 l; w/ G" W1 q* D. z+ `
第5章 常见的演示版保护技术/ G7 `" K! m0 O. M+ l5 T
" z$ [) R B1 t
5.1 序列号保护方式/ t" i( y, }& n5 S
5.1.1 序列号保护机制% p* ^0 {' `5 W' k# B$ J0 `
5.1.2 如何攻击序列号保护8 b; v3 ], \- x9 V8 N7 u
5.1.3 字符串比较形式
" c" u, \0 A* S5.1.4 注册机制作8 P9 ]7 s8 S8 f. h4 f: U7 v
5.2 警告(NAG)窗口
1 u1 d+ q; n; d) M- L
8 B9 t" c( R; r. E5.3 时间限制
/ ~2 O$ e5 I: B. L, r3 ~8 D5.3.1 计时器
# E8 d7 I2 I9 V6 W6 X/ g: O, j5.3.2 时间限制 E, y! {. o6 N
5.3.3 拆解时间限制保护
: o8 c( ^& k. [; Y& Q! v
9 Y" X. V# R+ u, N7 e/ u4 ]5.4 菜单功能限制0 L. c( Y; p# R
5.4.1 相关函数; y% C& _( U% u. u3 n5 y% b
5.4.2 拆解菜单限制保护
% n' u8 ]8 H9 \$ I; i" V- W+ K! b E1 E" l& E E$ F0 D9 X$ x
5.5 KEYFILE保护
- E+ _4 E8 B1 R( G6 b$ c5.5.1 相关API函数 g K& z& J8 G2 A# o5 r( r4 @5 \( G9 J
5.5.2 拆解KeyFile保护6 N9 s+ s) S6 a+ m) A( V
J3 n( d4 a! o! F% K
5.6 网络验证
( r$ E* I: S5 e4 w I0 J5.6.1 相关函数
8 K7 W7 J& ]7 d5.6.2 网络验证破解一般思路
* e8 G, C; Q/ p& G; W( i
% D, i# w% S5 N6 O) W2 n5.7 CD-CHECK
5 |3 E/ t- N6 {* ?6 ]0 y5.7.1 相关函数" I6 E F: y+ T3 T% X! E' g
5.7.2 拆解光盘保护
. D. I/ q/ y" Q9 |" p$ H: c0 r: v1 l
5.8 只运行一个实例
+ B0 b# [, Q; r# e5.8.1 实现方案
@! n& A7 X* C# k8 m/ y' n8 P5.8.2 实例( J& R8 b% P" d2 |" z9 H: H" h% R# @
5.9 常用断点设置技巧
+ V! ]2 y- N/ T- K
, w$ P/ z4 d# v+ F+ ^+ K第6章 加密算法
3 _8 _& r' S( b; y1 W! C9 R1 Z+ E k& W( i: v
6.1 单向散列算法1 ^9 P) _: o1 J# s, M9 A
6.1.1 MD5算法
+ K+ B/ N( p4 h6.1.2 SHA算法3 R, g3 D$ f5 b' v) B) |
6.1.3 小结
% T1 p6 |0 V2 [1 S/ V8 `* p1 \0 z5 m
6.2 对称加密算法7 q) W8 m) _+ p" p
6.2.1 RC4流密码4 s& P: `/ j/ t# R
6.2.2 TEA算法
% }/ W1 F2 a( F4 j1 j; a3 K2 p6.2.3 IDEA算法/ J2 j( M. V# n/ T' L
6.2.4 BlowFish算法" x0 \8 W/ A h3 k( t
6.2.5 AES算法& f J4 K' C9 b3 D" Z* U
6.2.6 对称加密算法小结7 s R* u' f3 X4 R u! K6 ~: Z
5 }# p4 j% ^3 G/ W9 L5 i* m* ?6.3 公开密钥加密算法8 y" X _& K' t% n
6.3.1 RSA算法
, r7 K: h' X0 U! F5 u$ U& V6.3.2 ElGamal公钥算法
8 H& U3 E1 K# `0 g6.3.3 DSA数字签名算法* Z* w+ o5 }9 x8 v2 h
6.3.4 椭圆曲线密码编码学
* M: U1 R5 Z" G8 W2 q/ d6 K6 X3 \& g& b! c, O, }
6.4.1 CRC32算法
4 T8 `& D4 J- H6.4.2 Base64; Z3 h! D! f! Z# R
6.5 常见加密库接口及其识别
4 ?; C, f9 v" x* }$ G; M+ P5 d6.5.1 Miracl大数运算库8 A% O; C* U8 M
6.5.2 FGInt
9 f) D5 j% B& C! b, H- C6.5.4 其它加密算法库介绍2 ~' x# D K* Q6 X1 |$ d
; y$ D- ?# I' i. @/ O o第4篇 语言和平台篇
U% ]0 Z! Q! R+ b! f% ]" Y I9 U4 b- g
第7章 DELPHI程序: b2 m1 [) ]$ q) ?$ c) r
4 w! T1 J& M5 P6 X ^6 Q& d3 H
7.1 认识DELPHI! Y2 B+ a0 I2 O% N4 P
7.2 DEDE反编译器: b0 x! f: R `
7.3 按钮事件代码5 B' M: w! s8 ]1 m: K
7.4 模块初始化与结束化3 T4 y* w$ ~' Y& w2 i2 [4 d
9 n ^4 b d9 [8 F& ?# u1 S: L7 l$ k第8章 VISUAL BASIC程序; q& i% [+ L5 v' V) r2 P2 S1 w6 X
0 P, ?! Y6 k5 h" k' v8.1 基础知识
1 F( e2 I# n1 p) |+ Q! R8.1.1 字符编码方式
, f3 Z" e( i& P. U8.1.2 编译模式
& z5 X5 \0 J- X. W3 {, M3 d% R& x! K* y/ w. Y. P& Z
8.2 自然编译(NATIVE)0 N! I( n! e R6 r9 Q
8.2.1 相关VB函数
$ k r6 ~+ _' U$ {. k# k( ]8.2.2 VB程序比较方式' b$ k2 M: P* O! K2 P2 t( g, i9 O
2 {' b8 N' z! O, G* b+ \
8.3 伪编译(PCODE)(cyclotron编写)
# G! A% \+ _3 p8.3.1 虚拟机与伪代码: W6 q; \' w. k
8.3.2 动态分析VB P-code程序
5 Y1 _4 g. R+ B0 J8.3.3 伪代码的综合分析
" u8 Z& l5 b) n' v8.3.4 VB P-code攻击实战- f8 G! R! B& @2 U0 e9 D: E
: f1 j# {% e' |6 @第9章 .NET平台加解密(tankaiha 编写), F& E e* T' u6 g5 p
; f( e: \$ }# q: S4 J
9.1 .NET概述
; X, a* { K! J0 D! P E5 b& Q9.1.1 什么是.Net" @; c* s5 J {, A# }" t: Y% u2 o
9.1.2 几个基本概念( d! ]) _8 J8 S$ a8 O) I
9.1.3 第一个.Net程序
& R5 L; I1 b: q9 |0 M6 ?% e5 `5 ^3 k* C5 @% ?7 a: W
9.2 MSIL与元数据( l* S, M8 N2 h& g
9.2.1 PE结构的扩展
$ K$ t4 z, f1 b }# ~. A9.2.2 .Net下的汇编MSIL
6 b9 R: C1 x7 v. M# y/ l" S1 q9.2.3 MSIL与元数据的结合
+ x/ A o- ]/ @/ L* i3 d
2 b, p* |' ^; d; ^% U7 k' i9.3 代码分析技术6 u8 M2 K! s8 s' @% p S S
9.3.1 静态分析
- D. r1 C$ ]. a, G* T6 \9.3.2 动态调试
1 z' U' r/ d- n. Q+ ^" L9.3.3 代码修改7 m+ L+ \ @5 V# P( G
% V/ o. N3 e. L7 n: @* F
9.4 代码保护技术及其逆向
0 L+ f5 o7 t6 _) K$ T* @+ {; p9.4.1 强名称
, f, C! T1 z, q# N. }9.4.2 名称混淆
; c' p+ J* S% b9.4.3 流程混淆& T0 ^8 W- ~4 t9 T
9.4.4 压缩
8 J: m' m$ i/ b5 w3 [6 a8 n. G9.4.5 加密
; d! r/ m4 |8 d/ r+ L7 V9.4.6 其它保护手段0 Z5 g. H6 Q. ?; z) n
8 h! l1 k) I0 W4 ?* m5 q! Y% \. S9.5 深入.NET K$ A- G1 R6 t* Y, a
9.5.1 反射与CodeDOM0 m! G4 M" n5 @
9.5.2 Unmaganed API5 k6 X3 W9 b/ H6 F) `
9.5.3 Rotor、MONO与.Net内核" K4 p) |; g8 y1 T0 P$ C5 O
~! D- ~5 E* D+ q; g" d4 W8 }3 J
第5篇 系统篇3 I M& M3 q$ ^ X6 c
$ ]( s& `& F2 V4 S
第10章 PE文件格式
% i% x* a, J0 |! c& c, O, C
0 k. p% e" t+ {) S6 c, l! [10.1 PE的基本概念
3 @5 N" T$ C# a10.1.1 基地址
2 u( W# s' E) l- W @* Z10.1.2 相对虚拟地址
7 w: G5 }6 D% V# ^1 S( h10.1.3 文件偏移地址, Q, i% m9 n& {; e
10.2 MS-DOS头部" ^2 N5 `" E9 m
0 b6 R2 D* w. V: f10.3 PE文件头4 M/ Y, ~% Q! O
10.3.1 Signature字段
% V& F0 B4 Y* U) x B. G6 a10.3.2 IMAGE_FILE_HEADER 结构
: [" |2 [0 P* ~- b; g r, S# K10.3.3 Optional Header
' c2 z" F' X# t J% C( ]$ y4 X6 } G. @
10.4 区块
/ y, Z. N' \$ Q M0 i, z L! Z10.4.1 区块表0 H% J; ~9 A. t+ ^+ Z7 T3 \
10.4.2 各种区块的描述- s+ H0 S- D2 ^
10.4.3 区块的对齐值
& N9 L' O# v+ N: u1 J+ L4 B10.4.4 文件偏移与虚拟地址转换8 p0 w* z$ H" ]. ^
/ k) k+ \2 b7 h! ~& d' [1 Q x) i10.5 输入表
! v- g! z, I* Z6 L8 j) X$ F7 [10.5.1 输入函数的调用! z. q, K( e! s" e
10.5.2 输入表结构% e! w; g1 O8 H* q' [1 U% D, \& z$ I
10.5.3 输入地址表8 B/ U+ M! _. c9 z3 ?5 O. M2 ^
10.5.4 输入表实例分析! W3 k; Q' d- Q r9 {4 v
10.6 绑定输入9 s. r; T& i5 W; F2 g- Q
, n/ m6 P" i1 U10.7 输出表; l) \+ M& a0 r( s1 P, ~
10.7.1 输出表结构' U' s) \" L6 M$ w( W& u
10.7.2 输出表结构实例分析4 u. u o( Q [, q
/ B1 K, A5 a* S1 c$ y; d( C10.8 基址重定位6 S, ~/ }, R: R$ |9 [
10.8.1 基址重定位概念0 e! F" W6 F! G! m: b
10.8.2 基址重定位结构定义$ g# i8 y9 M* z9 Y
10.8.3 基址重定位结构实例分析
* o2 r2 S5 O8 s& t [ @# ^5 V |, [+ m' J8 T! r' p( e, N3 R3 X& A8 J; U
10.9 资源" n" C) `- q4 C7 t' ]& t2 `: T
10.9.1 资源结构- F( @+ }, g/ J+ i$ l+ [
10.9.2 资源结构实例分析# S4 \1 @- `- x5 }4 ^$ G$ D
10.9.3 资源编辑工具
+ x: r+ d+ T8 R* ^10.10 TLS初始化
7 [$ Y a4 p6 s' U+ @! P* r10.11 调试目录
9 M4 @) w* q% p% p8 M0 p' _10.12 延迟装入数据
% h# t* h6 ]$ i* |( @10.13 程序异常数据
' x' |. U( ~7 e2 O( J/ j10.14 .NET头部
) s8 X6 Q8 Z7 A/ X9 m6 `+ x10.15 PE分析工具编写
- _" a5 q: z' O" q, y% y; c10.15.1 文件格式检查
1 t! f* ] ?" C10.15.2 FileHeader和OptionalHeader内容的读取
, M! W2 |& ]) B10.15.3 得到数据目录表信息
: _! Y3 @8 Y6 W10.15.4 得到区块表信息+ U0 M7 G" K3 y* M: R$ H
10.15.5 得到输出表信息
$ q. P6 R& c. o, [9 ~10.15.6 得到输入表信息6 N- i9 x2 K0 d5 P( j7 I% v
8 j0 l, O3 K# `; l第11章 结构化异常处理+ ~5 a2 x* Y1 K# O8 G/ D( O
( ]" a* r r1 _' p/ P' z5 u$ w4 q11.1 基本概念2 o0 w5 a% L5 t# M1 a, d
11.1.1 异常列表7 J5 U, z0 |+ D9 v$ m
11.1.2 异常处理的基本过程8 k: U: t! N( r: w0 u% W, z1 X6 A
11.1.3 SEH的分类
0 u1 |0 Z8 k" I4 c- ^2 x Q" x6 Q
11.2 SEH相关数据结构% x/ e0 e& J8 B
11.2.1 TEB结构
2 F( C# d' H3 c/ \11.2.2 EXCEPTION_REGISTRATION结构
5 ]5 i7 v9 |& r# C" S11.2.3 EXCEPTION_POINTERS、EXCEPTION_RECORD、CONTEXT
( j% M- f/ H9 l/ m1 Z B2 @& a11.3 异常处理回调函数
7 Q7 e" o) a/ f, ~/ P. T: f
+ a7 v/ r* ]5 m! W' ?/ s x第6篇 脱壳篇
/ v4 ~ P& P u8 T8 A2 K5 X* C) U/ H7 C7 O) Y
第12章 专用加密软件, t3 z; S6 M4 f9 V0 Z8 J
6 ]2 b$ j/ L( o, n2 Z6 L( ]1 y( Z12.1 认识壳
5 W2 P8 u0 `& j8 z5 y5 \12.1.1 壳的概念1 c1 W+ P7 M F3 V3 D
12.1.2 压缩引擎
( ^: s& R2 m! S' @4 T v12.2 压缩壳6 g7 W7 b! @) R3 W' X2 n
12.2.1 UPX
* f3 ~& }& b4 K+ [2 w, [12.2.2 ASPacK1 J0 q9 @9 N' ]+ j
- }% s! G' _7 c/ Y6 B; {12.3 加密壳
% H. A" m% P) I12.3.1 ASProtect2 \' s" [2 [1 c7 H( @0 l% t
12.3.2 Armadillo
* G+ F* Z# ~' X+ s& ~12.3.3 EXECryptor* l6 L# M+ U7 o& f" ~6 a6 T! R
12.3.4 Themida, V; R/ G& J' b6 A/ X+ p( D) M
5 B3 f, l3 x& ~5 ]1 P( p12.4 虚拟机保护软件0 W3 E7 Q) t5 j& y
12.4.1 虚拟机介绍6 W. p1 M5 W4 h1 \: A
12.4.2 VMProtect简介1 {. f( E& j( @9 v1 P
" |' P* M5 B7 z& z第13章 脱壳技术
N# t. V, ^; Z! ^) `) P8 {, h
7 z6 ?! b2 {! \, `, g/ {$ o" c( ^13.1 基础知识
- ~ {' R# G( u- B, G4 z8 ]13.1.1 壳的加载过程
8 g) k g9 W! D) N! Q13.1.2 脱壳机
" B$ _. X( w3 q# ^13.1.3 手动脱壳( F5 {# p$ f5 W8 s( u, ?
1 w: Q4 H7 k; ]2 [1 X13.2 寻找OEP
3 i( y* I$ w$ S* r: ^" i13.2.1 根据跨段指令寻找OEP
+ b% e7 @0 ^* H& x% ]/ s& S13.2.2 用内存访问断点找OEP( A+ J8 J" ~+ u( ~& v2 {
13.2.3 根据堆栈平衡原理找OEP9 [0 i6 R: t9 B& J- G
13.2.4 根据编译语言特点找OEP/ d- z8 i0 j3 ]1 |" m
- v/ Z. L- W8 ~ u0 Z( Q13.3 抓取内存映像
$ q# K" G6 h. A- o13.3.1 Dump原理
' O ` h3 Z, r \1 L- d- I7 M13.3.2 反DUMP技术# L5 h4 h& x! Y: N3 q
% b: e9 u/ X, y# D13.4 重建输入表
6 }" ?6 A7 x7 g# X/ O5 O- a! G13.4.1 输入表重建的原理
* Z% W1 j) |/ G13.4.2 确定IAT的地址和大小; ~2 e1 d" P2 Y$ ?. D$ P
13.4.3 根据IAT重建输入表8 ?% `: z3 e" R ?3 O: K
13.4.4 ImportREC重建输入表0 P' f( w% d& S- c1 b' {$ q6 u0 S
13.4.5 输入表加密概括
2 j+ ~3 I1 f4 g* c6 f C2 Q! H/ J. O _4 T; b( n- f$ ?
13.5 DLL文件脱壳7 x# a1 ?6 k: Y
13.5.1 寻找OEP9 _" C3 x) W9 v* s2 M- g
13.5.2 Dump映像文件
$ }" _5 r. y: d! J. M0 Q: Y13.5.3 重建DLL的输入表
$ [ A8 H! V8 X, t/ l3 K8 u- W+ w. u' Q13.5.4 构造重定位表$ A# D7 P8 I& `- e' p! D3 _
13.6 附加数据$ q6 Q! I" m% A8 b# T% I9 f) O
13.7 PE文件的优化
$ P$ q8 C' H+ A7 j1 U13.8 压缩壳
5 K5 q6 d9 r4 \# ~9 q6 p6 x13.8.1 UPX外壳4 H, D4 Y# Z6 W/ s6 \
13.8.2 ASPack外壳* I) J% Y1 S2 r% g3 y
13.9 静态脱壳
+ O, L! J3 a3 Q13.9.1 外壳Loader的分析
0 l' S$ c0 E" }# _' A+ S% ]13.9.2 编写静态脱壳器9 S' e4 [. k; Y# d, W
13.10 加密壳3 m$ Q' M( c, r% N f8 x" a
13.10.1 ASProtect+ Q0 A) }- r# d5 v# ], j5 b
13.10.2 Thmedia的SDK分析6 w# l7 w1 s& V* ~/ I
1 H' @, Z$ w8 o2 h' P9 W+ W第7篇 保护篇$ p- D* A5 b* k; \+ \/ W
7 B- l; P4 [" y8 s$ X6 C$ Q# a: H第14章 软件保护技术5 _& ?) H1 o. N H) E% j8 H; I
# j1 k5 I( B; h, D! v( I, e( C9 ]
14.1 防范算法求逆
^; ]4 f; y- {5 b# N9 H, {14.1.1 基本概念
* O! T$ u, M" I9 J; r14.1.2 堡垒战术- P$ Z, P* Z' A# i3 D
14.1.3 游击战术
' |$ @9 _0 }6 ?8 Q) M8 d- x4 e$ T- s/ E0 \; n9 B
14.2 抵御静态分析
& G+ k/ |4 a a: t- [7 g14.2.1 花指令; F7 @& b! _4 z2 w) ]8 f
14.2.2 SMC技术实现
6 T0 j# M; d7 G- B; _14.2.3 信息隐藏; ~( ^3 u) q3 n h! a
14.2.4 简单多态变形技术+ k0 K1 [; k& k- [
. H; n" @, u# ^6 S+ Y5 `/ Q5 L
14.3 文件完整性检验
+ w- [- w# Q' I! W; Y# Z14.3.1 磁盘文件校验实现
8 Y9 @+ {# a% Y& Y14.3.2 校验和(Checksum)
' D" A3 N0 ^' o' T) Z$ a' t14.3.3 内存映像校验
8 ^; a$ w0 x& a, Z* J% V4 C* _- r+ o; H, \! c6 M( u$ v
14.4 代码与数据结合技术
, B ?' H& O! y* g14.4.1 准备工作
+ Z) W% P. K4 s& W/ U14.4.2 加密算法选用3 l' Z- R& [/ `: E' O+ ?4 r0 P
14.4.3 手动加密代码
3 k1 g# E$ }5 x. W% n1 D- c14.4.4 使.text区块可写
+ H1 i' g. b1 E2 B14.5 软件保护的若干忠告% m3 L* h, j; m( p; H
7 {7 e( b6 v' C; Z第15章 反跟踪技术(forgot编写)2 I. W$ ^! _$ P9 P* a+ k2 ]
7 B" j% g0 ~; D/ H15.1 由BEINGDEBUGGED引发的蝴蝶效应* x4 {/ `- |9 X2 g& i% |0 w/ n, E
15.1.1 BeingDebugged
. \7 Z7 |5 q, q15.1.2 NtGlobalFlag
! H9 N# J2 a8 _' ~9 M15.1.3 Heap Magic( A+ P) M5 d- m$ y
15.1.4 从源头消灭BeingDebugged
. w6 |7 K% Q v4 a7 L& \" D$ ^. L0 s$ }" h7 g2 D. t- u
15.2 回归NATIVE:用户态的梦魇
/ n4 ]: t+ m, q* q# a9 t6 ?15.2.1 CheckRemoteDebuggerPresent+ v: t" D. k; K& T' p- ~1 I$ R
15.2.2 ProcessDebugPort' a' C, P5 ?, i) T4 L$ M
15.2.3 ThreadHideFromDebugger
+ @5 B# ~% b. b15.2.4 Debug Object. P+ l3 ]$ m. a( z5 v8 Y
15.2.5 SystemKernelDebuggerInformation
9 U0 n: `* t; |15.2.6 Native API5 N9 O* W: [* X4 i+ s: J
15.2.7 Hook和AntiHook5 o' N! h* w1 c% x+ l! I( n0 n
" `' u5 y: f/ z: ?! \15.3 真正的奥秘:小技巧一览
?) Q2 S h: l6 q0 n) z- D15.3.1 SoftICE检测方法
6 p2 q! Q8 M* u% P( a( J; r* m15.3.2 OllyDbg检测方法
) m6 b. y% U( `. l9 p: h) |15.3.3 调试器漏洞* x9 z6 {$ e8 v! O& K6 F0 j) ?
15.3.4 防止调试器附加- y, P' B/ l$ @, n" ^; [4 s* Z
15.3.5 父进程检测
, q5 o7 v+ M/ s* U- V2 \$ s15.3.6 时间差
( }7 c" \6 U2 }8 {8 e1 U15.3.7 通过Trap Flag检测4 f p5 I# I. A2 e7 w
15.3.8 双进程保护
4 a- c. @( v C( ?' M' a% |; y9 s3 K) c4 |; D6 ^3 t
第16章 外壳编写基础(Hying编写)
2 ~) n1 `( |/ i9 C) @
: {# x' ]% ?* a3 T0 E* u! B! ?: v16.1 外壳的结构
# a, `6 k% c$ {: e8 z C16.2 加壳主程序. R7 G# P5 Q0 f! `3 C
16.2.1 判断文件是否为PE格式7 X; q' |. m7 T1 q8 O( Z
16.2.2 文件基本数据读入* v0 T+ z$ b( a5 r
16.2.3 附加数据读取: {* b- y* [% N; N- Y
16.2.4 输入表处理
/ x% w* [( c* G, Z# w8 `6 _. A16.2.5 重定位表处理- M8 o, r; W' a: b! g0 t
16.2.6 文件的压缩( e9 r+ V% T/ y+ c
16.2.7 资源数据处理
! p, E" c! ~0 K16.2.8 区块的融合
" B# ` V9 V& ~6 l1 {9 v7 s; q: F/ z5 a5 j9 L% X. e9 Z
16.3 外壳部分编写
5 X [( f0 S" r0 q16.3.1 外壳的加载过程1 k1 X) e0 b4 m! f* d
16.3.2 自建输入表
# _. c' y8 L( z, t% h! @16.3.4 外壳引导段
4 U; W" z% s% B0 a, f0 j16.3.5 外壳第二段
" v% M9 a2 f, B; l16.4 将外壳部分添加至原程序6 u( P, c7 |/ q+ _
! L+ u2 {: P8 M* K9 W5 g5 S第17章 虚拟机的设计7 K" b0 o/ z5 F+ Z8 s
+ p; [2 ]' F, E) M
17.1 原理
! |; p. C* R6 f9 h' h+ [$ k( J17.1.1 反汇编引擎
2 D6 d/ O$ B8 C( M" F17.1.2 指令分类
4 k; l/ H4 ?4 K' n4 E8 M+ k5 H1 U- `7 X) L0 O3 n$ g# ^& A: G
17.2 启动框架和调用约定2 l6 f7 O( L" j0 v; p* w
17.2.1 调度器VStartVM
8 K9 m( W, x } s# Y# h9 B17.2.2 虚拟环境:VMContext; N; ?3 `6 n. J& W" B w+ d* p
17.2.3 平衡堆栈:VBegin和VCheckEsp4 r; I9 @8 W8 ]3 r7 R9 j
* k0 E8 m# f1 i0 N2 r
17.3 HANDLER的设计
: e5 e8 ?! b/ M7 H- M% @0 D F" Q17.3.1 辅助Handler
" p( U9 ]: B# U9 p; M17.3.2 普通Handler和指令拆解
% ?+ Q, L& S8 C: ]' L! A17.3.3 标志位问题! z) N( j& }: Z7 k$ @* @
17.3.4 相同作用的指令1 o/ s( h7 |/ C) S
17.3.5 转移指令& i* v# [3 Q2 f
17.3.6 转移跳转指令的另一种实现( b% v; r% K% }3 w
17.3.7 CALL指令
5 ^* T' m+ l5 v9 Y$ ~, S. B2 w# k9 }9 C17.3.8 retn指令
5 O( r5 z7 I' N17.3.9 不可模拟指令
" r6 {+ w& T, B$ @+ X) [+ t$ k. A2 }$ [3 q
17.4 托管代码的异常处理* U! l9 R/ y; A7 @; F. ~9 _8 A# j
17.4.1 VC++的异常处理7 M p: t7 Y* v6 J- i$ d0 f/ l
17.4.2 Delphi的异常处理$ o7 G* u0 R3 t' c0 D$ X; o
17.5 小结
, I' U! Q1 ]7 k1 [* N6 N, b% I/ U
4 Y0 q) L) F3 i3 k/ _% }! W第8篇 PEDIY篇( b U9 l% b0 m% {. l
* v; M- f9 R. d1 x; [1 o第18章 补丁技术
/ p. v. F7 l4 U( j
5 `' z! c! I9 W! {2 y18.1 文件补丁
+ X8 t9 v7 H" t8 Z18.2 内存补丁) c& T& f; H+ i
18.2.1 跨进程内存存取机制; P) B# x- h$ {4 P+ I) Z) \1 r
18.2.2 Debug API机制
* {4 t8 V4 x2 s" ]8 o( v1 x18.2.3 利用调试寄存器机制# ]* N- V( ~5 G S1 d
18.2.4 DLL劫持技术
j: F# J2 x7 ?" r" `) i4 E3 ]1 X) X1 k2 A7 S0 ]6 S( \
18.3 SMC补丁技术
9 z# C' s! Y* A4 z) d g' ?18.3.1 单层SMC补丁技术, P/ {( k% X' C* [) S5 K
18.3.2 多层SMC补丁技术
& `9 T$ b9 f- L6 Q& y18.4 补丁工具7 @7 q/ v& o, W
+ n% N$ v# i6 F0 ?$ E; A, N第19章 代码的二次开发
$ O. c* h4 [/ ?$ E* ~3 |& |2 g6 t; H3 j A% S. ~
19.1 数据对齐
! Q8 x; n/ q2 |/ F; c! R6 `19.2 增加空间
$ m7 g# d0 ?$ U$ S19.2.1 区块间隙, ^8 z( G1 N% {) D/ x
19.2.2 手工构造区块- S2 t* p9 ]1 m. Y% ^4 b
19.2.3 工具辅助构造区块
# D0 I5 T6 E7 c/ l# T. z3 M" T( _2 L0 u9 p& I7 e% R. I
19.3 获得函数的调用
# @+ c6 B6 Y' B+ p8 ~19.3.1 增加输入函数% V0 B9 c3 a. T- t2 W* O
19.3.2 显式链接调用DLL& ?8 k+ {+ L! M
5 }2 n( N! R# D/ j9 C4 B) o2 E
19.4 代码的重定位
/ |( e8 R. k# H ^2 h5 }8 ]: h8 W19.4.1 修复重定位表0 V# t+ j9 Q m X( q) z+ C
19.4.2 代码的自定位技术
- k; M0 Z# G* O7 b3 H19.5 增加输出函数: _ f6 k: ` @2 ~' j# Z
" ]! U/ A9 w: @0 U* M: r4 s
19.6 消息循环( X `6 g L% J5 P6 u& m$ e3 w
19.6.1 WndProc函数
/ d0 f" x( E3 t K+ H19.6.2 寻找消息循环" h2 t* s g1 z4 p2 d& W
19.6.3 WndProc汇编形式
! O1 K/ i O7 ?. @
+ J$ s- S$ S8 L: h# U8 u# c w' a19.7 修改WNDPROC扩充功能$ D* \) ~1 h! u- f+ i
19.7.1 扩充WndProc, ~& T n* k9 O7 f3 f
19.7.2 扩充Exit菜单功能- k9 q! e4 ]* M% i; J
19.7.3 扩充Open菜单功能& q: N& s+ S. y
7 }, H( u7 o9 C7 u! C5 R2 \2 F; e) K19.8 增加接口
; O' w- r7 z# i19.8.1 用DLL增加功能
0 f( F' Y) I5 k. }! r* ^0 {$ c19.8.2 扩展消息循环6 {- i: K4 D1 F- H4 M; r
0 F9 ~8 Y, N7 {
附录6 Q0 B8 w9 Z8 Q/ d4 r" k; C0 v" y" d% q2 q
- r/ d# E- i. Y: F附录A 浮点指令; G0 j4 n2 z$ b/ q& W) s
% ~' U* U9 h0 \- q$ \8 K$ g附录B 在Visual C++中使用内联汇编8 D U: V" E. ~0 M2 s2 ?4 U8 i/ b
! H5 R+ |3 l9 J, f+ a术语表
! A* s7 k) r3 F3 J% D, X: N a4 w/ w0 M' ?5 q
参考文献
5 q# F1 U. ]( b
. E- Z A5 }4 ~ |
|