引言 中国软件走向世界 1
0.1 令人振奋的机遇与紧迫的挑战 1
目录 1
0.2 编写目的 2
0.3 为什么要深入Windows核心 3
0.4 本书的结构 3
0.5 如何使用本书 6
0.6 磁盘资料 6
0.7 关于编程风格 7
0.8 神秘“黄玫瑰” 7
1.1 Windows执行文件格式与动态链接 11
第1章 分析Windows执行文件 11
1.2 WINSTUB MS-DOS首部 12
1.2.1 DOS EXE的文件头格式 12
1.2.2 Windows EXE中的MS-DOS首部 13
·WINSTUB普通的STUB 14
·MINISTUB最小的STUB 14
·LOADSTUB能够自动装载Windows的STUB 15
·RESTUB替换Windows程序中STUB的工具 15
·COM2EXE的源程序 16
1.2.3 WINSTUB的数据结构和操作 18
1.3 Windows执行文件首部 19
1.3.1 信息块 20
1.3.2 段表 22
1.3.3 资源表 23
·类型信息 24
·名字信息 24
1.3.4 驻留名表 25
1.3.5 模块引用表 25
1.3.6 输入名表 26
1.3.7 入口表 26
1.3.8 非驻留名表 27
1.3.9 文件头分析实例——PBRUSH.EXE的文件头 27
1.3.10 NE文件首部的数据结构和操作 31
1.4 代码段和数据段的重定位信息 35
1.4.1 代码段和数据段的重定位信息格式 35
1.4.2 代码段和重定位表的实例 36
1.4.3 GetSeg取某段代码数据的工具 38
1.5 资源 41
1.5.1 BITMAP 41
·BITMAP格式 41
·压缩BITMAP 43
1.5.2 ICON图符图像和CURSOR光标图像 48
1.5.3 GROUP-CURSOR组光标和GROUP-ICON组图符 50
2.1 分析Windows文件格式的常用工具 53
2.1.1 EXEHDR和TDUMP 53
第2章 Windows执行文件的分析工具 53
2.1.2 MAPWIN 59
2.1.3 EXEDUMP 61
2.1.4 NEWEXE 63
2.2 Power系列分析工具 65
2.2.1 Power Dump(PDUMP) 65
·用PDUMP观察DOS文件 65
·用PDUMP观察一个Windows可执行文件 67
2.2.2 Power FileInfo(PFI) 75
第3章 文件格式分析工具的开发实例 77
3.1 一个DOS文件操作功能的扩展工具——EXTTOOLS 77
3.2.1 面向对象技术 96
3.2 一个通用的文件对象——FILEOBJECT 96
3.2.2 File Object的层次关系图 97
3.2.3 File Object的具体实现 99
3.3 开发MSDUMP——一个类似EXEHDR的工具 150
第4章 直接修改Windows执行文件 157
4.1 Windows执行机制与动态链接 157
4.2 Windows应用程序的启动过程 157
4.2.1 应用程序的启动 157
·启动过程放在哪里? 157
·启动步骤描述 159
·应用程序启动过程示范 161
4.2.2 应用程序启动函数说明 163
4.3 动态链接库的初始化 165
4.3.1 Windows应用程序如何使用DLL 165
4.3.2 DLL与Windows应用程序区别 166
4.3.3 DLL的制作过程和DLL的启动码 166
4.3.4 DLL启动过程示范程序 167
4.4 PBRUSH.EXE的执行过程 169
4.4.1 Windows执行AP或DLL时维护的数据 169
4.4.2 Module Database 173
4.4.3 Task Database 176
4.4.4 InstanceDatabase 178
4.4.5 应用程序执行多份时的情况 179
4.4.6 Thunk与重定位 181
4.5 直接修改Windows执行文件的方法 183
4.5.1 修改STUB 183
4.5.2 在某段后面附加一段代码 190
4.5.3 增加一个新的重定位项 194
4.5.4 插入一个新的段 195
4.6 调试Windows程序的技巧 195
4.6.1 SDK中的几个工具 196
·HEAPWALK 196
·SPY 196
·CodeView for Windows 197
·WDEB386 197
·调试版Windows 197
4.6.2 SoftICE/Windows 198
·其他工具程序 198
·利用WINICE来反汇编 199
·WINICE的中断点 200
·WINICE提供的系统信息命令 203
第5章 用汇编语言编写Windows应用程序 208
5.1 汇编语言宏指令——CMACROS.INC 208
5.1.1 段宏指令 209
5.1.2 存储分配宏指令 209
5.1.5 特殊定义宏指令 210
5.1.6 错误处理宏指令 210
5.1.4 调用宏指令 210
5.1.3 函数宏指令 210
5.2 Cmacros宏指令的用法详解 211
5.3 用汇编语言编写Windows程序应遵循的规则 222
5.4 用汇编语言编写HELLOWIN 225
第6章 自装载Windows执行文件 234
6.1 自装载过程的函数接口 234
6.1.1 装载数据表 235
6.1.2 装入段——BootApp 235
6.1.3 重装入段——LoadAppSeg 236
6.1.4 复位硬件——ExitProc 236
6.2 自装载函数参考 236
6.3 一个完整的自装载程序实例 239
6.4 自装载的HELLOWIN 259
第7章 LZ压缩算法原理与具体实现 261
7.1 数据压缩概论 262
7.2 LZ压缩算法原理 262
7.2.1 原理 262
7.2.2 基于字典的压缩是如何工作的? 263
7.3 压缩与还原算法的实现 264
7.3.1 压缩 264
7.3.2 还原 265
7.4 PACKWIN中用到的压缩函数 266
第8章 开发Windows执行文件压缩软件 281
8.1 DOS下压缩软件简述 281
8.2 Windows执行文件压缩工具PACKWIN 283
8.3 PACKWIN的实现过程 284
8.3.1 DOS执行文件的压缩和执行 285
8.3.2 Windows执行文件压缩的实现 285
·PACKWIN压缩Windows执行文件的基本原理 285
·压缩STUB 286
·改写自装载模块 287
·插入自装载段 291
·压缩代码段和数据段以及重定位部分 292
·压缩资源 292
8.3.3 PACKWIN编程实现 292
9.1.1 软件为什么要加密 315
9.1 软件加密基础与典型的加密软件 315
第9章 开发Windows加密软件 315
9.1.2 加密软件的原理 316
9.1.3 加密软件最好定制 316
9.1.4 加密软件与密码学的关系 316
9.1.5 加密软件的市场现状 316
9.2 加密软件的核心技术 318
9.2.1 密钥技术 318
9.2.2 反跟踪技术 320
9.2.3 代码插入技术 321
9.3 开发Windows加密软件——BITLOK for Windows 321
9.3.1 密钥技术 321
·取Seg 0000的Selector 322
·如何编写多代码段程序 322
·置代码段属性为可写 323
·显示错误信息 323
·编写可移动的加密代码 323
·判读密钥的程序实例 323
9.3.2 反跟踪技术 327
9.3.3 加密代码插入技术 327
9.3.4 密钥安装技术 335
9.4 BITLOK forWindows的使用 337
第10章 Windows NT及Chicago执行文件格式 339
10.1 PE简介 339
10.2 Win32及PE的基本概念 348
10.3 PE首部 349
10.4 块表 354
10.5 各种块的描述 357
10.5.1 .TEXT 357
10.5.2 .DATA 358
10.5.3 .BSS 358
10.5.4 .CRT 359
10.5.5 .RSRC 359
10.5.6 .IDATA 359
10.5.7 .EDATA 359
10.5.8 .RELOC 359
10.5.10 .RDATA 360
10.5.9 .TLS 360
10.5.11 .DEBUGS$S和DEBUG$T 361
10.5.12 .DRECTIVE 361
10.6 PE文件的IMPORT 361
10.7 PE文件的EXPORT 364
10.8 PE文件资源 366
10.9 PE文件的Base Relocations 368
10.10 PE和COFF目标文件的区别 369
10.11 总结 370
参考文献 371
附:金山公司计算机系列丛书目录 372
读者信息卡 375