|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
, J- a) u1 t+ C. j2 Q b' }
6 S( @+ \ `: O Y l书名:《Windows PE 权威指南》
. e9 {0 j2 t( U作者:戚利/ s6 D/ y+ G( C# U n/ I* \ x
出版社:机械工业出版社- j C7 e! @8 L- j+ o S
出版年:2011年10月10日5 @4 Z; w0 E2 ~! n* v7 Z& ~
定价:89.00元1 _; t, \( ?0 G" j) T( \
装帧:平装! r. G: t' o& Y2 ^0 h: p
ISBN:9787111354185& }* s3 V- ?" Q
- W( N- W0 R! t# O购买链接:2 V& H c/ g4 C Z1 ?, c6 x# R7 `+ N
% K, T: W: _1 o- G7 u' f
8 ~0 L& t) p2 I亚马逊(kindle)-> 传送门6 J( H4 `5 s* _9 e! E& e
! E. l x/ c) s* {
当当网 -> 传送门. y% C) U- P4 o
^. O) E. v2 I% } x/ f京东 -> 传送门+ f8 v; N: M7 o0 Q+ `' ~
1 l; U( {3 _5 p8 y0 M
% g4 l5 M) r+ G8 j
内容简介:- ]: U8 {- b. S
4 ] `1 ]- ~, U0 i
4 B% k3 ~- |3 b$ b# Q 内容全面,详尽地剖析了 Windows PE 文件格式的原理及其编程技术,涉及安全领域的各个方面和 Windows 系统的进程管理和底层机制;实战性强,以案例驱动的方式讲解了 Windows PE 文件格式在加密与解密、软件汉化、逆向工程、反病毒等安全领域的应用,不仅每个知识点都配有小案例,而且还有多个完整的商业案例。
1 Z s% h" j$ w. I, B' h; C2 h9 } F2 |6 l5 s5 U2 c
戚利编著的《Windows PE 权威指南》共分为三大部分:第一部分简单介绍了学习本书需要搭建的工作环境和必须具备的工具,深入分析了 PE 文件头、导入表、导出表、重定位表、资源表、延迟导入表、线程局部存储、加载配置信息等核心技术的概念、原理及其编程方法,有针对性地讲解了程序设计中的重定位、程序堆栈、动态加载等;第二部分讨论了 PE 头部的变形技术及静态附加补丁的技术,其中静态附加补丁技术重点讲解了如何在空闲空间、间隙、新节、最后一节四种情况下打补丁和进行编码的方法;第三部分精心编写了多个大型而完整的 PE 应用案例,以 PE 补丁作为重要手段,通过对目标 PE 文件实施不同的补丁内容来实现不同的应用,详细展示了 EXE 捆绑器、软件安装自动化、EXE 加锁器、EXE 加密、PE 病毒提示器以及 PE 解毒的实现过程和方法。
" j4 p, M! l2 ?- z, R/ F& z* p) ?! D) C! [6 c" m
《Windows PE 权威指南》不仅适合想深入理解 Windows 系统进程管理和运作机制的读者,而且还适合从事加密与解密、软件汉化、逆向工程、反病毒工作的安全工作者。此外,它还适合想全面了解 Windows PE 文件结构和对程序字节码感兴趣的读者。% A, B; c3 F p" k4 z
5 o, Z8 m( R2 {$ m; t) h
& {$ i! R0 y' ] y5 D目录:
; f5 R) K" c' X: q) q! W9 \9 _+ ]7 L" H' q# p
5 l" ?" `0 ^3 t- E
前言
" s$ ~& z4 \8 ?* J
9 \8 }: X% N% y) W j4 Z1 w第一部分 PE的原理和基础 * P3 u7 `1 ^1 V! i% d+ H
: m0 B H0 E" r' g第1章 Windows PE 开发环境/2
( ?* f* g2 s6 Y. s! S% c) s4 |3 B$ x
1.1 开发语言MASM32 /2 , z1 @4 Z$ q) g- K! e1 R9 f- j" ~! F7 Q
1.1.1 设置开发环境/3 9 B. u3 D+ n p4 |
1.1.2 开发第一个源程序HelloWorld.asm /5 # l2 Q2 r; Y" b, P, W; {% M
1.1.3 运行HelloWorld.exe /7 % g( o) A8 x, c5 f( b
1.2 调试软件OllyDBG /10
0 D) _' h- t7 q1.2.1 调试HelloWorld.exe /10 8 ?7 |4 f9 `; n8 |( x
1.2.2 修改EXE文件字节码 /16 ) z% @! R' I* e0 I5 F/ c. C
1.3 十六进制编辑软件FlexHex /18 : Q: k: |! \* y! Z) g c1 e) ?
1.4 破解实例:U盘监控器 /20
! x4 k6 t* y+ ]: D h: F E& I1.5 初识PE文件 /23 + s/ x8 d9 d0 h. q, p& O
1.6 小结 /26
* _: I4 I) Z/ c: @7 D2 g
# d/ U' g+ H6 d9 N/ U第2章 三个小工具的编写/27 , ~- Q1 V( v9 s# f3 r
# C3 ~4 g: F# ]" D# W1 P
2.1 构造基本窗口程序/27
$ m7 l1 d) s. I/ f# |, P, }8 e2.1.1 构造窗口界面/27
7 S" {) t% a$ e* b2.1.2 编写相关的资源文件/28
( \: C, c, G: k- i) C2.1.3 通用程序框架的实现/29
: E' @1 D0 T% R: H2.2 PEDump的实现/32
6 ?' b: a- \- V0 [" B# O2.2.1 编程思路/32 ; p; L6 g0 V+ R" C% f. d
2.2.2 PEDump编码/34
& p+ a+ b5 }5 \# r0 e" w' }2.2.3 PEDump代码中的数据结构/38
; {& u: {5 ?* s2.2.4 运行PEDump /39 $ i3 c# ?/ z9 {
2.3 PEComp的实现/40 5 m6 v S' R9 S9 ]8 P" b
2.3.1 编程思路/41 . R: @5 a% v: T6 T8 x
2.3.2 定义资源文件/41
% }% X# x" f5 C8 X% Y2.3.3 PEComp编码/41 $ W( W- ]% W* m! E7 F9 h" b
2.3.4 运行PEComp /47
3 O6 Z3 n6 d9 f, e0 F2 }2.4 PEInfo的实现/47 ' N2 E) ~4 b2 d
2.4.1 编程思路/48 + Z7 h! ~, n9 F J0 f
2.4.2 PEInfo编码/48
% \. j7 [$ i& z/ d/ R2 K: @9 }! o6 |' C2.4.3 运行PEInfo /52 ' x. j+ o6 M- w& ?9 _2 m' U
2.5 小结/53 ; f5 X1 j$ o: Y3 ~ I
/ `' U+ w8 x4 g5 r, \
第3章 PE文件头/54
2 L8 s6 U& A" y
% r' _; j5 o8 D0 @+ z' r) O; H! g2 ~3.1 PE的数据组织方式/54
, |6 ]+ U7 S" C3.2 与PE有关的基本概念/58 ! s2 G9 j6 L& ]2 Y: H0 a$ f1 p0 a
3.2.1 地址/58 # I/ R+ I- u' N6 U, Z, v. L9 @. z
3.2.2 指针/60 6 r P( q8 `6 b; i0 }3 M
3.2.3 数据目录/60
! P& R4 f8 T/ q2 R3.2.4 节/60
. b5 h! H- o- N3.2.5 对齐/61
; q8 h ^9 a! u4 p6 f! ^1 E7 X* l! W3.2.6 Unicode字符串/62 " Q* X0 ^9 X- Q2 G* [3 b* E0 e" T/ e
3.3 PE文件结构/62 ) w8 y) V5 _) ~
3.3.1 16位系统下的PE结构/62 2 ~& ^8 Y) A* v4 `/ d6 S0 N# r8 y6 T( J
3.3.2 32位系统下的PE结构/66
4 Y8 v8 U' r. c% ?0 t2 D3.3.3 程序员眼中的PE结构/68
7 C; `+ O3 F( U3.4 PE文件头部解析/69
! [$ {' }6 ^) [5 i# _" d* g# z3.4.1 DOS MZ头IMAGE_DOS_HEADER /69 5 \( G, q1 }+ D) l8 [
3.4.2 PE头标识Signature /69 3 c1 s4 Y% U1 Y. j* }- ]" F
3.4.3 标准PE头IMAGE_FILE_HEADER /70
6 q0 U! r* O1 K6 g% k6 ~$ u; {( f3.4.4 扩展PE头IMAGE_OPTIONAL_HEADER32 /70
- t2 T2 f) ^1 T: f% S m) h3.4.5 PE头IMAGE_NT_HEADERS /71 ( U/ \, ?; V/ ^1 Q( A
3.4.6 数据目录项IMAGE_DATA_DIRECTORY /71 7 ~% T: a! D" A; ^, Q2 X
3.4.7 节表项IMAGE_SECTION_HEADER /74
2 a3 v) r% S0 | p" ]3.5 数据结构字段详解/74 8 B }" B3 l, {8 ]$ ~
3.5.1 PE头IMAGE_NT_HEADER的字段/75
: v% d" `) k% [# o3.5.2 标准PE头IAMGE_FILE_HEADER的字段/75
$ i( A' F9 `8 m) I3.5.3 扩展PE头IMAGE_OPTIONAL_HEADER32的字段/78 Z' \) c7 @, c/ w. v/ y) c2 w
3.5.4 数据目录项IMAGE_DATA_DIRECTORY的字段/87
( [+ c, W `0 z; {3.5.5 节表项IMAGE_SECTION_HEADER的字段/87 1 s$ I o9 {7 e# v
3.5.6 解析HelloWorld程序的字节码/88
/ I6 E$ \4 W( s4 V3.6 PE内存映像/92
0 ^, w, U5 K! |) s& ~ Z" a9 U$ d3.7 PE文件头编程/93 4 u0 R, c2 Z9 C3 F6 `7 G
3.7.1 RVA与FOA的转换/93
1 L6 y9 K5 G$ a+ `$ ^; T1 G; i# @3.7.2 数据定位/95
. k1 [% c5 j5 G O X) `3.7.3 标志位操作/101 b7 X6 \9 G; n# [3 P N& H
3.7.4 PE校验和/102
, |0 Q, a1 V/ \' |3 N3.8 小结/104 7 d8 _5 @. Y9 X6 ]7 T' Q
2 _# f! h4 a/ n/ B6 N& p$ y第4章 导入表/105 $ t- Y$ D0 b. {/ K
; b1 @# G% V. i( }4.1 何谓导入表/105
' S2 y. |5 A" e, U% S( `) r5 s4.2 导入函数/105
6 C8 C4 T. y5 R5 a( m5 A6 @4.2.1 invoke指令分解/106
, Y: X8 o, u* @' n9 K+ D/ v4.2.2 导入函数地址/107
! {# R c3 r$ z9 L5 O4.2.3 导入函数宿主/109 7 E( z" h6 ~; w6 [5 W( S$ o
4.3 PE中的导入表/112
# z3 F; H" y5 v; r1 Q4 F; n* y4 i- V4.3.1 导入表定位/112 . e/ Y& N8 W2 t, `, L* ?7 C
4.3.2 导入表描述符IMAGE_IMPORT_DESCRIPTOR /113
9 G. o3 Y! L Y. u1 X. P9 o2 N D. ~4.3.3 导入表的双桥结构/114 + L+ B% }3 F; Z* \! C( ? s. d8 g
4.3.4 导入函数地址表/116 5 e* q: P* F' t5 W
4.3.5 构造调用同一个DLL文件的多个函数的导入表/117
0 E5 n. s: y: Q& E8 {4.4 导入表编程/121
2 j4 k$ v5 h- n, [4.4.1 导入表遍历的思路/121 ( B. n) l) o4 z! B- i) D. R/ t
4.4.2 编写函数_getImportInfo /122 ( [2 y% Q7 a G3 o4 M; f1 q' |
4.4.3 运行测试/124
$ G' n/ e2 Z2 s5 g; W) m4.5 绑定导入/124 4 F" d" S. q2 L( M* f6 W- D" q7 u
4.5.1 绑定导入机制/124
' C" _8 Y, {5 d8 ~9 f9 K4.5.2 绑定导入数据定位/125
2 Q8 F. o1 K3 f) O& f4.5.3 绑定导入数据结构/126
, G* P9 C1 z& M4.5.4 绑定导入实例分析/127 % o7 p6 x& h/ `* X5 _/ |2 e
4.6 手工重组导入表/128
6 ^2 L* b" T" O1 p& S4.6.1 常用注册表API /128
, g6 a* g1 x# m9 |' z' S7 r& {) O4.6.2 构造目标指令/132 * ?9 D5 Z8 j1 X: w+ j, @2 F2 S
4.6.3 PE头部变化/135 8 `# u* W" ?, U0 E
4.6.4 手工重组/136
) O' V2 Y8 X+ ?) |4.6.5 程序实现/141 8 o0 E; R/ f: _& u5 u3 z
4.6.6 思考:关于IAT的连贯性/142 + a4 L5 c0 f7 w* j! { c$ T
4.6.7 思考:关于导入表的位置/143
+ U; V: j: L, r- P1 v4.7 小结/144 0 \. w2 ^. U; V1 C: W, ?. N9 c; K, A
/ }1 j' x8 |# p第5章 导出表/145
/ C) h2 p4 z, `) j5 X. r& y) H% B5 h h8 f! { y
5.1 导出表的作用/145 9 ], F: m3 H. G! Q R) X8 D
5.1.1 分析动态链接库功能/145 $ N: B; {' `3 U2 O' o, v3 m
5.1.2 获得导出函数地址/146
* _/ h% v$ g8 v& d" y5.2 构造含导出表的PE文件/146 % Q% f) t& _( N( m& |+ n
5.2.1 DLL源代码/147
/ T/ i( \( ^" \# n$ Z* F! z: `# g, v5.2.2 编写def文件/151
3 m1 A: ]- v* e8 T5.2.3 编译和链接/152 * p4 D: Q+ |% j+ {+ z3 C @% M
5.2.4 编写头文件/152 3 a# M6 b- \) X
5.2.5 使用导出函数/152
6 f) a" w q8 b5.3 导出表数据结构/155
4 h6 S0 ?7 `9 {' X5.3.1 导出表定位/155
3 ?/ V6 g9 J% a: ~5 \2 N9 K" J! Y5.3.2 导出目录IMAGE_EXPORT_DIRECTORY/156
7 f5 w1 T( [) w6 S# P5 u" t. b1 b5.3.3 导出表实例分析/158
9 ]2 N3 m! U0 ^7 z" Z8 { I0 r5.4 导出表编程/160
( i/ s) I# x# h# E/ ?% j5.4.1 根据编号查找函数地址/160
2 Q) ?# |7 O4 v$ k' ^8 j+ D) K# @9 c& [5.4.2 根据名字查找函数地址/160 # f& H/ r; i7 d) f
5.4.3 遍历导出表/162
. B# L: q% D* L" e2 p2 Q1 p$ P( ~5.5 导出表的应用/165
7 P& a$ z0 j p: H% e5 J5.5.1 导出函数覆盖/165
1 N9 r# U" ~5 y' f* E" F+ B5 f5.5.2 导出私有函数/167
: U" R5 {1 F3 c- |/ ]5 b5.6 小结/169 . I7 b0 E! y+ u# C- t( }8 R( U
# U, Y5 o# ?6 b' r第6 章 栈与重定位表/170 ( T1 n6 T5 N: o7 Z
! ~, o. m. M* w1 q- \6.1 栈/170
' u, Q1 S' z/ ^0 I2 A6.1.1 栈的应用场合/170
! u2 T' U; x" l/ @, j6.1.2 call调用中的栈实例分析/173 ' P7 ?$ m/ F( L' i+ I8 J/ \
6.1.3 栈溢出/177
' E) Y0 u' f7 V6.2 代码重定位/181 ; W9 k2 f5 w& \, \, P- `
6.2.1 重定位的提出 /181 , Y/ S) M- Z. x6 [! {
6.2.2 实现重定位的方法/182 5 B6 b( ]1 v, ? S7 ]( w m. Y
6.2.3 重定位编程/183
; W% c9 x% m2 a/ x( @3 @7 V J6.3 PE文件头中的重定位表/189
: j: m* F$ `: N9 @: @/ G$ N1 E6.3.1 重定位表定位/189 ! g+ l: D+ [" O9 |) }" M
6.3.2 重定位表项IMAGE_BASE_RELOCATION /190
8 P! p8 ~, d' ^8 e& G5 {6.3.3 重定位表的结构/191
' G6 i3 g/ z+ U9 D! c6.3.4 遍历重定位表/192
) t; o* T9 X/ o. p" j6.3.5 重定位表实例分析/195 * M% n1 s* L1 H) o
6.4 小结/196
. t3 d, e1 R- q5 r, f
/ F+ t6 X3 l* }; C, K, H& ~) T5 Y第7章 资源表/197 }: Q- r4 t7 f! b6 _& W
! \" Z7 Y( Y$ y$ e9 r
7.1 资源分类/197
9 |+ J2 ~+ O G, g; W7.1.1 位图、光标、图标资源/199 . E4 s1 n* e0 D
7.1.2 菜单资源/199 % M1 P3 ^3 c% v2 V
7.1.3 对话框资源/200 3 o5 A3 y1 s; R8 b) z# y" E8 [1 a! ^
7.1.4 自定义资源/201
2 m4 E, l8 l3 T; d+ @; e7.2 PE资源表组织/202 ; e/ s; ~6 O9 W- I A
7.2.1 资源表的组织方式/202
a. i& L2 A; d) T0 P' C7.2.2 资源表数据定位/203 6 p9 w/ T# _. Y U
7.2.3 资源目录头IMAGE_RESOURCE_DIRECTORY /204 5 y' ^$ B$ U# v" o0 K* R1 y
7.2.4 资源目录项IMAGE_RESOURCE_DIRECTORY_ENTRY /205
+ o1 y4 v, \6 G: S) O+ u7.2.5 资源数据项IMAGE_RESOURCE_DATA_ENTRY /206 : j$ c( L# o$ L/ O
7.2.6 三级结构中目录项的区别/207
B! ^. z) z B- {5 B7 ^7.3 资源表遍历/208
) M% `: ?, u5 c! f& X7.4 PE资源深度解析/213 ( y/ K# I6 y/ Q* w4 H% m3 X/ {2 }7 P. ?
7.4.1 资源脚本/213
1 x% r; s7 m9 J7.4.2 使用PEInfo分析资源表/214 : j' Y! A' ~: t
7.4.3 菜单资源解析/216
$ z+ _# j; V. j& P" j9 L7.4.4 图标资源解析/218
, C6 l8 o/ Z" y7.4.5 图标组资源解析/223 8 J1 H/ |, I& n l7 }
7.4.6 对话框资源解析/224 ) Y4 m( x" |' D) Q7 \- ^( l
7.5 资源表编程/228
( S" A g) v; m( A/ Q7.5.1 更改图标实验/229
/ _# U1 N4 E4 |7.5.2 提取程序图标实例/231 3 `+ R: ~, e1 J; D' F6 y' O' l
7.5.3 更改程序图标实例/241
$ [ n p$ s; _7.6 小结/244
$ a/ v, S" v; V% U2 ~/ e7 d5 B! U2 M) H/ k4 D, [6 ?/ E7 @9 M
第8章 延迟加载导入表/245 4 m9 Y, `1 t( U+ u) }# p8 x* p2 k
0 }# V$ |) i& T
8.1 延迟加载导入的概念及其作用/245
- h9 A$ [! M7 S' O& H0 y8.1.1 提高应用程序加载速度/246 8 O% I7 f+ @# h7 J# Q
8.1.2 提高应用程序兼容性/246
# [" A' `1 R( a' a" j; b+ Q- q8.1.3 提高应用程序可整合性/247
4 |% a2 w7 A/ K0 q- }- |. z2 n8.2 PE中的延迟加载导入表/247
3 }: O; p5 v# ?" i8.2.1 延迟加载导入表数据定位/247 * R7 W* f8 o6 {+ z
8.2.2 延迟加载导入描述符IMAGE_DELAY_IMPORT_DESCRIPTOR /248 ) R) C5 K$ i$ G
8.2.3 延迟加载导入表实例分析/249
/ V% ^) h( }4 t8.3 延迟加载导入机制详解/251
' `0 Z6 a4 _: g; b6 }8.4 延迟加载导入编程/253
; ~4 g+ L& y/ [4 Q9 o% V8.4.1 修改资源文件pe.rc /253
* P# D1 ~7 d6 t6 w2 @8.4.2 修改源代码pe.asm /253 . K; r: w: `, s: W3 X1 b" [
8.5 关于延迟加载导入的两个问题/255 0 b c1 J; I5 e7 V+ t/ G' m
8.5.1 异常处理/255 1 u1 j" n* `8 m# s' k9 Y; D" _) I
8.5.2 DLL的卸载/255
/ b& J" B+ b" y" Y8 D% P8.6 小结/256
4 A, c" C" L, u( X R" A! o- z# ]/ ~! H+ _: f; Q
第9章 线程局部存储/257 ) ?1 `$ H' U1 b
( a3 g. l9 G6 W% g3 e. H5 a' f9.1 Windows进程与线程/257 ) S3 z% _/ L7 C% b+ i
9.1.1 Windows体系结构/257 0 }4 N" q A7 M7 B$ ~' T' [
9.1.2 进程与线程创建/258 # l# p& H' K' f$ m7 o
9.1.3 进程环境块PEB /262
9 J, p* X/ s' `9 Q6 q+ |& _6 Y' ]9.1.4 线程环境块TEB /264
5 x- U( x+ ` u) @9.2 什么是线程局部存储/265 7 S: B9 }4 w/ {. }
9.3 动态线程局部存储/267 1 q3 D2 l0 u5 B1 m) E- L
9.3.1 动态TLS实例/267
. G Z4 f' l! [2 n) ?/ ]9.3.2 获取索引TlsAlloc /274
' f6 ~3 q3 A, ]; O1 {8 i9.3.3 按索引取值TlsGetValue /275
" X$ s0 j( d. z) r% r( J9.3.4 按索引存储TlsSetValue /275 # U! `& f9 S$ N( t- Q# o" S: |
9.3.5 释放索引TlsFree /275
; q8 f: z& C9 S& d5 N9.4 静态线程局部存储/276
y0 O5 Q4 g, @9 ~! p& M k5 k9.4.1 TLS定位/277 9 c9 a/ Q. e8 Y3 n6 G2 s
9.4.2 TLS目录结构IMAGE_TLS_DIRECTORY32 /278
2 H' k. r1 P6 @9.4.3 静态TLS实例分析/278
3 t: r/ w$ j# `, O: e2 p1 L9.4.4 TLS回调函数/279
# a' J4 ^& z( s; G. O9.4.5 测试静态TLS下的线程存储初始化回调函数/280
8 _" Y2 b/ G/ @+ i1 Q' u ^9.5 小结/281
& u$ V3 a# s& N4 E/ c ]6 X
/ ]' b# k& Q& b6 u1 k1 B第10章 加载配置信息/282
/ L1 Z A3 x0 Z a' M9 d
3 b8 u1 f' r- |4 L O" n4 Q2 p/ o$ y10.1 何谓加载配置信息/282 3 h, O4 R# j$ s L2 d3 g
10.2 Windows结构化异常处理/282
# N! O* y* W4 P10.2.1 什么是SEH /283 : m# `! R. O ]& N
10.2.2 Windows异常分类/285
: }7 Q$ I6 a; `" P10.2.3 内核模式下的异常处理/286 : J- L8 q' j, k6 I, v" j
10.2.4 用户模式下的异常处理/289
, C& \! g, Z) X$ p: Y10.2.5 Windows SEH机制解析/294
0 O( N* }9 p# L6 e) [10.2.6 SEH编程实例/295 * k- S, ]* u( \& U* _' ^& v$ D7 }4 X
10.3 PE中的加载配置信息/299 " M; B7 g: V, b, G& r% F+ s [5 C
10.3.1 加载配置信息定位/300
6 F% s0 R) L9 |1 g9 O% V0 W( m10.3.2 加载配置目录IMAGE_LOAD_CONFIG_DIRECTORY /300
( O1 `$ H2 b! C: j3 Z% M* V10.3.3 加载配置信息实例分析/302
/ o6 `* e% t g10.4 加载配置编程/303 # n& b2 I! [( m! ^9 c
10.4.1 程序源代码分析/304 2 c" i8 W7 O: O
10.4.2 为PE添加加载配置信息/306 & f; B. B5 D$ D0 [( J
10.4.3 运行测试/306 9 m% A+ ~. N1 ^- p
10.4.4 注册多个异常处理函数示例/307 ) m' @" N! R# E
10.5 小结/309
( S1 y. ?# U$ m
0 F1 b; v; x/ ?; H" @第11章 动态加载技术/310
! N( o/ R" G+ A9 O/ o2 M* B. {2 d) l& s
11.1 Windows虚拟地址空间分配/310
8 N v! N7 l9 ]4 B" T11.1.1 用户态低2GB空间分配/310 * d) G% [! [1 j
11.1.2 核心态高2GB空间分配/311 * C* Y+ t/ p6 J. Q# f
11.1.3 HelloWorld进程空间分析/312
' } T) K# n+ y11.2 Windows动态库技术/313 6 I5 l0 Q& H$ ~( W5 v5 K, c) V
11.2.1 DLL静态调用/313
$ i% Q8 N; ]9 g6 o: F4 Z11.2.2 DLL动态调用/314 " I9 b h6 ?' f* y" K9 c7 l/ M
11.2.3 导出函数起始地址实例/314 3 l) g. ~9 e' o9 v; G$ c( A
11.3 在编程中使用动态加载技术/315
4 S# I, z6 m @; H) C11.3.1 获取kernel32.dll基地址/316
- G1 H1 u; v' W2 M I( n11.3.2 获取GetProcAddress地址/322 4 p! X# I9 |" _
11.3.3 在代码中使用获取的函数地址编程/325
+ a9 g# F, E, y4 Q8 f# r1 M/ G11.3.4 动态API技术编程实例/327
+ q/ g* r/ o3 @6 B ~3 N- P5 M11.4 小结/330
; v7 @" c0 c6 a) ^! V# V* y* {, a6 w. u
第二部分 PE进阶
6 B& G* o; @- g7 `/ `
n9 U4 D8 w- _/ i) I第12章 PE变形技术/332
) X6 t7 o& A7 T# ]/ Y& K
" M* }0 A* s: J1 z, g3 O) Q3 t12.1 变形技术的分类/332 * C( ^# i4 O& D N- ?
12.1.1 结构重叠技术/332
9 V1 z+ k2 [( L8 i+ U12.1.2 空间调整技术/333
% d( j0 ~6 J( [! s12.1.3 数据转移技术/334 , f* j* ] E& y3 [8 @. H! p! u
12.1.4 数据压缩技术/338 5 h, |3 o6 E1 F. R% }! V
12.2 变形技术可用的空间/341 , |. I6 B/ p) A9 ^2 R
12.2.1 文件头部未用的字段/341 , i' L8 `% @( w# ~, J; W- s$ f$ j
12.2.2 大小不固定的数据块/343 8 P/ H, c! H) I; A8 A6 ^8 V1 S: s
12.2.3 因对齐产生的补足空间/344 ; |. ~* o3 ^9 @1 z" u* }5 ], B
12.3 PE文件变形原则/344
' ~# N/ K! ~0 B* @ u12.3.1 关于数据目录表/344 2 T1 M* k1 f; }8 C2 t9 |
12.3.2 关于节表/344
+ v a- {) t# x. b9 O4 n1 y12.3.3 关于导入表/344 , r# {6 P4 v# y
12.3.4 关于程序数据/345 - h8 U; E; ~; i p# e; i
12.3.5 关于对齐/345
3 _( w+ F& h% k% P/ n( n7 Y12.3.6 几个关注的字段/345
- c, v; \ H, x+ j/ M12.4 将PE变小的实例HelloWorldPE /346 - W, k4 W' G, {9 |8 E
12.4.1 源程序HelloWorld的字节码(2560字节) /346 ) S% T! w' p1 u6 O( M8 m9 x
12.4.2 目标PE文件的字节码(432字节)/348 + {& J- }9 k4 b) @% Q! S
12.5 打造目标PE的步骤/349
9 g, E: j) u9 `12.5.1 对文件头的处理/349 : u- Y2 d" f4 s, q: u$ ^
12.5.2 对代码段的处理/350
, f9 f- ]/ Q6 B7 ?$ K( ~. M/ N8 g12.5.3 对导入表的处理/351
$ {* \/ q) J ^3 c" I/ o. ^12.5.4 对部分字段值的修正/351 0 f/ m/ h/ {/ o2 U
12.5.5 修改后的文件结构/352 8 D/ z4 H( @9 {# x* y0 V; o
12.5.6 修改后的文件分析/353
1 p1 d7 ]0 G0 l: F, V1 Q5 l12.5.7 目标文件更小的实例分析/354
8 o4 \- q( X; _12.6 小结/359
- h6 ^/ F$ ?2 q) [ M/ P; w- T" U- F1 R1 Y+ D7 o. P: c$ q. }
第13章 PE补丁技术/360 % k s3 ~ `# ] B- U4 a
5 I% R6 @' j; V5 L, ? D t8 ^
13.1 动态补丁/360 8 A& P1 b" B+ g9 Y$ @1 x' e. ~
13.1.1 进程间的通信机制/360
8 @1 ?: ]! j2 e$ D& s5 @0 d3 z13.1.2 读写进程内存/363 - p4 a" M$ J% F0 x: v
13.1.3 目标进程枚举/368
% ?1 V4 W k' p3 @ E, S% H13.1.4 执行远程线程/373 `' }2 x+ E" b2 b) P
13.2 静态补丁/379
1 @0 e) K0 y* l5 \3 f/ [ J: _13.2.1 整体替换PE文件/379
1 X# m9 H, N6 t4 A. A13.2.2 整体替换DLL文件/385 * q$ A+ \8 V* \; p& _
13.2.3 部分修改PE文件/387 9 H: j2 `& \5 E J; b4 j
13.3 嵌入补丁程序/388 4 z1 ~5 f' N# [1 n
13.3.1 嵌入补丁程序框架/388 ) ^$ l: B6 j' U5 g7 K/ _6 R( v
13.3.2 嵌入补丁程序编写规则/394 ! x! \9 D. q. u9 P. b& r8 q1 ]
13.3.3 嵌入补丁字节码实例分析/395 : P3 _& ^- @6 D/ {
13.4 万能补丁码/396 0 ?" E! z/ {2 ^. n0 m, R* v7 V
13.4.1 原理/396 5 _0 ^0 X% I3 A# x" H
13.4.2 源代码/397
; R5 e L6 B# }7 c# Z( Y13.4.3 字节码/399
' ~' A. E X/ w9 ]7 z. c/ |13.4.4 运行测试/399 . _. K( F1 N! E: ~
13.5 小结/399 7 k9 z8 T# n6 w% q
( S+ W1 t9 B0 H, v8 E; d+ S
第14章 在PE空闲空间中插入程序/400 ; O1 w0 d. b" w! v, D! ?/ X2 K
7 B5 v* O6 v; V- |3 U
14.1 什么是 PE空闲空间/400
! ?& o9 d; K" N7 O d14.1.1 PE文件中的可用空间/400 + D' `2 W7 l" ` x2 e
14.1.2 获取PE文件可用空间的代码/400
3 a0 M! Y2 z0 _: y6 z. a0 {14.1.3 获取PE文件可用空间的测试/403
' y$ `8 s1 O0 M1 ?7 P" n3 N3 W14.2 添加注册表启动项的补丁程序实例 /403
\+ S, u6 U9 m% a) @6 `. c14.2.1 补丁程序的源代码/403 ) g ]. I! E2 W! [; F, A5 r# o
14.2.2 补丁程序的字节码/404 " s, L# |0 F5 e! }' R, G) W
14.2.3 目标PE的字节码/405
! d- D2 R. q7 u, O7 B8 H; f14.3 手工打造目标PE的步骤/408 % ?, M a# w( v+ i0 a! }$ \, [ z) E
14.3.1 基本思路/408 S, i7 R3 f6 D: S2 z
14.3.2 对代码段的处理/408 $ i! [ L& ?9 m. a
14.3.3 对导入表的处理/413
# ?/ [+ z/ n. B14.3.4 对数据段的处理/418 ^* j4 M1 P7 W* f" j1 M
14.3.5 修改前后PE文件对比/421
3 ]$ B0 \0 K3 G3 a14.4 开发补丁工具/422 1 N2 y. m1 M# w& _
14.4.1 编程思路/422 a4 g& V2 s, o/ U* ~
14.4.2 数据结构分析/423
2 _8 U/ a3 O; {2 W14.4.3 运行测试/427
) L3 {( M) x6 K2 F/ B/ |/ s14.4.4 适应性测试实例分析/430
" _+ @2 j" K! g14.5 小结/434
. G! U% h6 O9 b. A5 L& n0 I+ S& \0 H1 Z, Z2 w5 n
第15章 在PE间隙中插入程序/435 1 R6 C) c- u. r, u7 d
4 W, N$ w% T$ C7 e& K
15.1 什么是PE间隙/435 7 z: ^& s! S# |) H/ e' S1 G
15.1.1 构造间隙一/436 0 z5 B2 [7 b) a% b" W
15.1.2 间隙一与参数/436 + C! ?) \" O6 P; t. D
15.2 插入HelloWorld的补丁程序实例/437
" R: A8 h' L& F7 k# d/ @15.2.1 补丁程序字节码/437
0 i8 q0 f% G c" m& }- G# P15.2.2 目标PE结构/439
( u6 `- W M' [% `. W15.3 开发补丁工具/439
7 L% y4 ]- @6 B* Z: i* V5 k8 @15.3.1 编程思路/439
$ w9 n- f5 t8 {, h& S15.3.2 数据结构分析/440
$ q1 w7 T' u0 q) j2 [, k6 |& ^! d) C$ p/ l15.3.3 主要代码/442
2 H! y& m3 c& y; o15.3.4 运行测试/447
6 n" P7 A9 V/ F4 r! \/ s15.4 存在绑定导入数据的PE补丁程序实例 /448 9 A, p) ~% h: `- l/ S
15.4.1 改进补丁程序/448 % t I* A5 d' O, m- I# n& p4 |
15.4.2 修正补丁工具/450 0 O, k7 D% f* e% }, Y+ E
15.4.3 为记事本程序打补丁/456 : G. A. T- y A& D7 ?! t2 C g7 B" B
15.5 小结/457
0 t2 v, y& f+ _8 H: L( |2 H3 {' C
第16章 在PE新增节中插入程序/458 , r9 U* o# {" j, W) r
2 ]! v- Q6 f/ \$ L16.1 新增PE节的方法/458 + s4 E6 u, s- p- ?
16.2 在本地建立子目录的补丁程序实例 /458 Y) K9 t' v6 @' F
16.2.1 补丁程序源代码/459
0 c; x! r9 q, ?0 N/ l. j' @16.2.2 目标PE结构 /464 : r8 ? Q9 g8 {% E( w
16.3 开发补丁工具 /465 - L. D2 j/ C$ b
16.3.1 编程思路/465
8 |" q S ~, r) {) m* O4 h16.3.2 为变量赋值/466
* m' a, _& y- q' e* b0 M16.3.3 构造新文件数据/466 : v( w( Z9 W; q# P1 }! m3 _& e6 B
16.3.4 修正字段参数/466
$ r; ]8 A0 X, ~- g: p0 H16.3.5 主要代码/467
) K; P/ X1 A/ k8 g3 ~" F$ H16.3.6 运行测试/475 # X' U* ~/ c6 R" M+ ~
16.4 小结/475 " f6 B2 B0 a9 }% L! Y% C1 E- a
* ? W T+ ~5 y: W [* [& t8 k2 d6 _
第17章 在PE最后一节中插入程序/476
( i9 M6 Y. P3 M: t" S6 {; G
+ F" S' f. `' O" @17.1 网络文件下载器补丁程序实例/476 0 C( @# ^; G: S# ~! P! R
17.1.1 用到的API函数/476
* p, [' g+ O% b" U8 ]17.1.2 补丁功能的预演代码/482 : a4 q+ Y$ [* D9 e3 G( K
17.1.3 补丁程序的源代码/484 ) m! W4 r' C* J) I4 H1 _
17.1.4 目标PE结构/485 8 R3 t* h9 P# Q q- s! P5 z
17.2 开发补丁工具/486
' C) H$ R/ t, C- P. t- B17.2.1 编程思路/486 2 ?6 S8 n+ m( `! P& U
17.2.2 主要代码/487 $ T; `/ |+ k) X( E
17.2.3 运行测试/490
( V1 s! w% k/ K9 M17.3 小结/491
' ~( P; \+ V4 W- `1 U% z
$ V3 W" d& E& S( z* e E, A! K第三部分 PE的应用案例
/ S' ^3 I0 p* U4 b$ T+ V5 i5 N/ h; ?! w; |# w% J& X
第18章 EXE捆绑器/494
+ M1 x% ~& `% @& n: a/ |4 }# f( u$ W7 \1 a7 D8 T* m
18.1 基本思路 /494 - ]7 u6 w, w4 Q
18.2 EXE执行调度机制 /495
3 S8 U" k3 C/ q: B18.2.1 相关API函数/495 - R. a% c; l9 [- N
18.2.2 控制进程同步运行实例分析/499 ' f0 }' r4 |5 [2 i) u
18.3 字节码转换工具hex2db /500 * F5 S6 i, ^; \
18.3.1 hex2db源代码/500 + X% v$ e7 j* ]+ F
18.3.2 运行测试/507 ' [ g9 @: N l8 E9 ] v/ ^
18.4 执行调度程序_host.exe /508 ' K% c0 t- e) x$ f# ]9 k$ h/ M$ A
18.4.1 主要代码/508
* B5 E8 k z- C, ^; J18.4.2 数据结构分析/510
, `2 N6 v: i. O. ~18.5 宿主程序host.exe /511 / [! h/ O/ S2 x
18.5.1 宿主程序的功能/511
( U3 g$ l7 F/ ^* P. c18.5.2 宿主程序的状态/511
/ \9 T; X1 A2 N, n& ]* C18.5.3 遍历文件/512
7 C. c& C/ t+ G; X4 t18.5.4 释放文件/514
: H+ c. j8 i! j, G4 u% q18.5.5 宿主程序主函数/517 ( e' I* B$ F& V
18.6 EXE捆绑器bind.exe /517
; K7 i+ `4 G! e5 d# y18.6.1 绑定列表定位/517
5 W, e4 h1 Y0 r9 K18.6.2 捆绑步骤及主要代码/518
4 g3 ?3 M8 q0 o5 T8 |9 d5 A0 J18.6.3 测试运行/523 . A" j8 y' P% _% x4 ]3 g8 Y* p
18.7 小结/524
. A" J0 O+ A3 h8 h8 P4 F
( Y% M) ^5 i) L7 Y第19章 软件安装自动化/525 6 @- r9 @3 m8 \/ `2 _ P) C1 N
- W8 E5 `" F7 F+ \8 V
19.1 基本思路/525
) r% V' Q0 T8 o9 e5 Q6 b" o19.2 补丁程序patch.exe /525
2 O; h3 _5 E' B" k8 d% O0 z19.2.1 相关API函数/526
! x; N7 L: o6 ~) _" e- v0 S19.2.2 执行线程函数/526
7 u) {5 K9 J, I7 j19.2.3 简单测试/528
) Y# w1 h$ L6 s6 M T# ?8 O19.3 消息发送器_Message.exe /529 1 N% N" `. S( Z
19.3.1 窗口枚举回调函数/529
( N8 V% ^ U/ O19.3.2 调用窗口枚举函数/530 4 ^; H' T6 h3 u v* Q# T# X
19.3.3 向指定窗口发送消息/531 # C" K N: h. u- h- R& l2 Y5 B
19.3.4 消息发送器源代码/532 * ]4 Z2 Q6 M# y" J0 L; t
19.3.5 测试运行/535
4 P8 K, I! n; r# `. I! N19.4 消息发送器生成工厂MessageFactory.exe /535 , ], j8 p6 b2 K: J* k0 U
19.4.1 消息发送函数/535 " N% ]& k4 h( u! L/ W6 @# U, f
19.4.2 键盘虚拟码/537
/ e. i C. c/ I+ x, R# U2 W19.4.3 改进的消息发送器实例分析/540 / h$ S+ f* X2 y" }2 G
19.4.4 消息发送器生成工厂代码结构/542 3 ~0 l, Q, J/ l. j! s' t
19.4.5 代码与数据的定位/544 - `, b& Y) o+ N/ F/ G
19.4.6 提取代码字节码/545 8 ]% Y6 m* ^5 y2 C p
19.5 软件安装自动化主程序AutoSetup.exe /548 + K; a9 u ^, S0 k
19.5.1 主要代码/548
5 m, o7 \ A/ D! H# Z$ L! e, Y19.5.2 测试运行/552 , p6 W; F% g. \3 H2 k: M
19.6 小结/554
' b+ _$ L! i, ^7 A6 g2 _
- }$ I2 R+ a1 I/ @4 W第20章 EXE加锁器/555
2 M( L$ S6 f& r" o
g' X% L' t" w# \5 w. E) E, T4 r20.1 基本思路/555 ( P8 E" Y/ e% r1 U. s" f2 x4 X0 t
20.2 免资源文件的窗口程序nores.asm /556
( n! X( W& g8 s8 e+ y20.2.1 窗口创建函数CreateWindowEx /556 , Q7 @2 H* R" r1 {& J
20.2.2 创建用户登录窗口的控件/558
1 [ s6 B. g" v. y4 m& D9 J20.2.3 窗口程序源代码 /558
+ ]3 A+ F0 i* D8 g5 D20.3 免重定位的窗口程序login.asm /562
# S4 U U, \3 D. w' J! K; F20.4 补丁程序patch.asm /570 , D5 j z+ t( `0 w
20.4.1 获取导入库及函数/570 - X0 s0 Y* c8 }
20.4.2 按照补丁框架修改login.asm /571 & z H! |7 g! i/ D3 Z
20.4.3 补丁程序主要代码/572 ' i9 a( P5 K: z- ^0 ~* [, E8 r
20.5 附加补丁运行/573
8 d7 V+ {" q: t+ e20.6 小结/575
; D( o- R6 b0 S; F# P- o; I
# w% j6 z, l* }) f# L& S第21章 EXE加密/576
/ O" c; M% c- f* V+ P! i/ C0 i3 z) i9 m- k. S
21.1 基本思路/576
& _; z- j) n5 N& Q7 d5 u; Q21.2 加密算法/577
7 ^& J& L1 T3 N6 r) H% b21.2.1 加密算法的分类/577
3 u# ~/ ~! A* S1 L21.2.2 自定义可逆加密算法实例/578
/ J% ?0 u, m$ [* l, y9 G5 Z21.2.3 构造加密基表/579 & ?3 X! D4 v5 i, _/ z* `
21.2.4 利用基表测试加密数据/581 . n; T% y. r7 E8 ?0 M6 o
21.3 开发补丁工具/582
9 w3 \! x5 r2 h$ p+ {! R, l7 x21.3.1 转移数据目录/582
, A, N- Z7 T" l; Q2 [2 R21.3.2 传递程序参数/585 ) O+ V6 _/ Y0 M+ a4 z$ C( v
21.3.3 加密节区内容/587
; ^8 @" r q, a+ w# L/ E) J2 x21.4 处理补丁程序/588 / `" u# m' \# g/ n
21.4.1 还原数据目录表/588
& p0 p9 o5 s- ]- m21.4.2 解密节区内容/590
/ R: H0 ~" \$ X+ |( R3 d21.4.3 加载目标DLL /592
) k4 d8 f! Q$ K U# P21.4.4 修正目标IAT /594
9 S/ F( m; r( V! ?+ k, T+ K21.5 小结/595 ' k% V6 k4 F O: v
8 @( ^& b8 F7 _第22章 PE病毒提示器/596 7 k7 Y# Q6 m4 G P0 w6 l
" U) m8 c F, `2 z. x% |( W4 \
22.1 基本思路 /596 * w" s! T) R7 w6 U) C, n
22.1.1 志愿者的选择条件/596
) P) R5 g( C; Y- V) p, r& m; ~" i* p22.1.2 判断病毒感染的原理/597 , g; k B2 r u/ I% v
22.2 手工打造PE病毒提示器 /597 / u9 ]0 ]2 x9 W! r- k! f
22.2.1 编程思路 /597
$ @/ C" M! t1 o9 w8 T; R2 E22.2.2 分析目标文件的导入表 /598 ' I$ v9 i$ c i! t2 H
22.2.3 补丁程序的源代码/601
" `& s/ F' I1 k Z1 T7 w. d22.2.4 补丁程序的字节码/608 * E: e! u8 ~4 ?! a6 |
22.2.5 修正函数地址/609
6 Q+ [5 L9 s8 s- t22.2.6 测试运行/610 " ~ @0 E4 b% \# L: R% |3 z( ^3 Z; s
22.3 补丁版的PE病毒提示器/611
, U7 ]3 W9 @% d( K$ e22.3.1 将提示器写入启动项/611 + M2 v, W+ k [# X0 @- R' Y) P( b Z
22.3.2 检测特定位置校验和/612
- c. f [* H4 z22.3.3 测试运行/615
7 C6 ~, `5 M4 L& D' ]0 a" Z- t1 m22.4 小结/617
- M* r, h, t% h" l" P7 T# K1 J$ p% m; X7 ?
第23章 破解PE病毒/618
* I# t1 q# w& ^
) s9 T l3 {. Y* T) j9 T% ^23.1 病毒保护技术/618 7 s/ j6 M/ l, L, U( T3 f
23.1.1 花指令/619
B1 E& \" T6 K( Z23.1.2 反跟踪技术/620 6 c2 x- H$ g& x# {. j' W
23.1.3 反调试技术/621 3 e: e1 f7 V8 H5 S/ M" B& Y6 i$ Y
23.1.4 自修改技术/624
# P6 ^4 o5 R1 P+ r23.1.5 注册表项保护技术/625
1 d2 E) Y. O7 C) h& ?: s* h7 E. d23.1.6 进程保护技术/627
9 s* u( z9 c: D# ~23.2 PE病毒补丁程序解析/632
+ Y, {1 i2 _' q( Z3 B+ W23.2.1 病毒特征/633
5 D; M* R5 p5 h- w- x4 {" x- }23.2.2 补丁程序的源代码分析/633
- m$ N& `: b* C& n) L% l# j23.2.3 病毒传播测试/648 , }; r' p. H: y- E: x9 O
23.2.4 感染前后PE结构对比/650 # r, q& _8 C& e$ t! m' U. _) }3 e C
23.3 解毒代码的编写/650
3 H4 k# A9 A a: Z23.3.1 基本思路/651
; i# t: G: w! a4 Y) A$ r23.3.2 计算病毒代码大小/651 6 {2 `" P) u( N. o
23.3.3 获取原始入口地址/652 3 {9 y7 i& D+ R
23.3.4 修正PE头部的其他参数/652
* n. k! ?5 n, K$ T$ d0 D23.3.5 主要代码/653
; }# Z" L# `- R23.3.6 运行测试 /656 5 c( S/ d( q$ P
23.4 小结/657 / ^9 Y" S+ i1 n) d4 s
6 N/ ?: b1 B, `1 _7 M ]
后记/658 : F' ~" o% q$ C
3 l4 r! z- u) @- O
- @# l2 z; O9 Z! Y7 D u |
|