标题：软件剖析——代码攻防之道
基本信息
ISBN：9787302104452
定价：39.9元
印次：1-1
装帧：平装
印刷日期：2005-4-8
图书简介
软件是如何被破解的？攻击者是如何有目的地破解软件的？为什么防火墙、指令检测系统以及反病毒软件不能将黑客们拒之门外？什么工具可以用来破解软件？本书为您提供了详细的答案。书中提供了大量黑客们破解软件的示例，包括实际攻击、攻击模式、攻击工具以及相关破解技术，并全面阐述了逆向工程，典型的对服务器软件的攻击，对客户端软件的攻击，制造恶意输入的技术，以及缓冲区溢出的技术细节等内容。在深入阅读本书后，您就可洞悉软件世界中的激烈斗争，成为安全领域的专家。
书籍目录
目录
第1章软件--问题的根源 1
1.1软件简史 1
1.1.1软件和信息战 4
1.1.2数字谍报手段 4
1.2不良软件很普遍 7
1.2.1NASA(美国国家航空和宇宙航行局)的火星登陆器 7
1.2.2丹佛机场行李管理系统 7
1.2.3鱼鹰MV-22 8
1.2.4美国军事系统自伤 8
1.2.5Microsoft和“爱”bug 9
1.3问题三组合 10
1.3.1复杂性 10
1.3.2代码行数越多，bug就越多 11
1.3.3可扩展性 12
1.3.4连通性 15
1.3.5结论 16
1.4软件的未来 16
1.4.1短期未来：2003－2004 16
1.4.2中期未来：2005－2007 18
1.4.3长期未来：2008－2010 20
1.4.4十条思路 21
1.5什么是软件安全 21
1.6小结 22
第2章攻击模式 24
2.1分类 24
2.1.1bug 25
2.1.2缺陷 25
2.1.3脆弱点 25
2.1.4设计中的脆弱点 26
2.2开放系统 27
2.2.1风险 29
2.2.2潜在损失 29
2.2.3暴露度与力度 30
2.2.4实际风险 30
2.3一次攻击历程 31
2.3.1攻击者的观点 31
2.3.2为什么不能信任用户 32
2.3.3“开锁” 32
2.3.4一个简单的示例 34
2.4攻击模式：灾难性的蓝图 36
2.4.1破解、攻击和攻击者 36
2.4.2攻击模式 36
2.4.3代码注入 37
2.4.4活动区 37
2.4.5输出事件 37
2.4.6反馈事件 37
2.5攻击示例：对MicrosoftC++编译器的攻击 37
2.5.1攻击的技术细节 39
2.5.2对Microsoft栈保护的概述 39
2.5.3绕过Microsoft的安全特性 40
2.5.4解决方案 42
2.5.5攻击回顾 42
2.6应用攻击模式 43
2.6.1网络扫描 43
2.6.2操作系统辨识 43
2.6.3端口扫描 44
2.6.4路径追踪和区文件传输 44
2.6.5目标组件 44
2.6.6选择攻击模式 45
2.6.7环境缺陷的影响 45
2.6.8间接使用攻击 45
2.6.9种植后门 45
2.7攻击模式工具箱 46
2.8小结 46
第3章逆向工程和程序理解 47
3.1进入逻辑的“房屋” 47
3.1.1逆向工程 48
3.1.2为什么需要逆向工程 50
3.2逆向工程是非法的吗 50
3.3逆向工程的概念及其使用的工具 51
3.3.1调试程序 52
3.3.2缺陷注入工具 52
3.3.3反汇编工具 52
3.3.4反编译器 52
3.4逆向工程的方法 53
3.4.1白箱分析 53
3.4.2黑箱分析 53
3.4.3灰箱分析 54
3.4.4使用灰箱技术在Microsoft的SQLServer7中寻找脆弱点 55
3.5逆向方法 56
3.5.1输入追踪 56
3.5.2软件版本的差异 57
3.5.3代码覆盖 58
3.5.4内核访问 59
3.5.5共享缓冲区中的数据泄漏 59
3.5.6对访问请求的审计 60
3.5.7使用自己的API资源 60
3.6编写IDA插件 61
3.7对软件进行反编译和反汇编 73
3.8实练反编译：逆向helpctr.exe 74
3.8.1bug报告 75
3.8.2调试记录 75
3.9自动、成批地审计脆弱点 78
3.10编写属于自己的破解工具 87
3.10.1x86工具 87
3.10.2基本的x86调试程序 88
3.10.3断点 89
3.10.4存储器的读写 92
3.10.5调试多线程程序 93
3.10.6枚举线程或进程 95
3.10.7单步执行 96
3.10.8修补 97
3.10.9故障注入 97
3.10.10进程快照 98
3.10.11反汇编机器代码 102
3.11编写基本的代码覆盖工具 104
3.12小结 109
第4章攻击服务器软件 110
4.1可信任输入问题 111
4.2权限提升问题 112
4.2.1进程权限之间的信任 112
4.2.2如果不以管理员的身份运行，一切就会崩溃 113
4.2.3从不被信任的资源中读取数据的进程权限提升 113
4.2.4使用提升权限的进程 114
4.3寻找注入点 114
4.4输入路径的追踪 116
4.4.1使用基于SolarisSPARC二进制的GDB和IDA-Pro 116
4.4.2设置断点和表达式 116
4.4.3利用IDA映射运行时存储器地址 117
4.4.4将GDB附加到一个正在运行的进程 117
4.4.5基于Solaris使用Truss以模拟目标软件 118
4.5通过配置破解受信任的软件 120
4.5.1审计直接可执行文件 121
4.5.2了解当前工作目录 121
4.5.3如果Web服务器不执行cgi程序该怎么办 121
4.5.4什么是不可执行的文件 122
4.5.5策略的使用 123
4.6特殊的技术和对服务器软件的攻击 123
4.6.1技术：注入命令解释程序 124
4.6.2技术：管道、端口和权限 134
4.6.3技术：攻击文件系统 136
4.6.4技术：操作环境变量 140
4.6.5技术：利用无关变量 140
4.6.6技术：利用不良会话认证 142
4.6.7?际酰郝??峄癐D 143
4.6.8技术：验证的多重路径 147
4.6.9技术：不能检验错误代码 147
4.7小结 147
第5章攻击客户端软件 148
5.1作为攻击目标的客户端程序 148
5.1.1服务器控制客户端 149
5.1.2软件蜜罐 149
5.2混合信号 150
5.2.1古老(但却相关)的历史 150
5.2.2基本的混合数据使用 152
5.2.3针对打印机的有趣的混合信号 153
5.2.4Linux中的混合终端字符注入 153
5.2.5反射问题 155
5.3跨站点脚本 155
5.4客户端脚本和恶意代码 160
5.4.1检查较脆弱的本地调用 160
5.4.2Web浏览器和ActiveX 166
5.4.3E-mail注入 167
5.5基于内容的攻击 170
5.6逆向攻击：利用客户端缓冲区溢出 170
5.7小结 171
第6章构造恶意输入 172
6.1防御者的困惑 173
6.1.1过滤器 174
6.1.2通信系统 174
6.2入侵检测 175
6.2.1基于签名和基于异常的IDS 175
6.2.2疲于应付的IDS 176
6.2.3在IDS上交替编码的效应 176
6.3分割分析 178
6.3.1Windows的APISPY 178
6.3.2红点 179
6.4追踪代码 179
6.4.1从脆弱区回溯 180
6.4.2死端和逃避 181
6.4.3运行时追踪 181
6.4.4速度中断 183
6.4.5追踪缓冲区 184
6.4.6跳步 185
6.4.7内存页断点 185
6.4.8boron标记符 185
6.5反向分析程序代码 186
6.5.1字符转换 186
6.5.2字节操作 187
6.5.3指针操作 187
6.5.4空终止符 188
6.6示例：通过“正门”逆向I-PlanetServer6.0 189
6.7错误的分类 193
6.8产生“等效”请求 193
6.8.1映射API层 194
6.8.2虚字符 195
6.8.3等效元字符 196
6.8.4转义元字符 197
6.8.5字符转换 198
6.8.6组合攻击 200
6.9检测中毒 201
6.10小结 202
第7章缓冲区溢出 203
7.1缓冲区溢出 203
7.1.1栈的摧毁(为了有趣和有益) 204
7.1.2遭到破坏的状态 204
7.2病毒注入：再次利用输入 205
7.2.1病毒注入的结束和攻击代码的开始 206
7.2.2在目标中选择合适的代码地址 206
7.2.3高地址区和低地址区 207
7.2.4bigendian和littleendian表示方式 208
7.2.5使用寄存器 208
7.2.6使用内存中现有的代码或是数据块 209
7.3缓冲区溢出与嵌入式系统 210
7.4数据库缓冲区溢出 211
7.4.1存储过程 212
7.4.2命令行应用程序 212
7.4.3数据库的客户端程序 212
7.5缓冲区溢出和Java 212
7.5.1同时使用Java和C/C++ 213
7.5.2存储过程和动态链接库 214
7.6基于内容的缓冲区溢出 214
7.7缓冲区溢出的截获审计和过滤器 216
7.8环境变量引起的溢出 217
7.9多重操作问题 218
7.10发现潜在的缓冲区溢出 218
7.10.1异常处理掩盖错误 218
7.10.2使用反汇编 219
7.11栈溢出 219
7.11.1固定大小的缓冲区 220
7.11.2不能自动添加空字符作为结束的函数 221
7.11.3off-by-one空字符结束的函数 222
7.11.4改写异常处理程序结构 225
7.12内存管理中的计算错误 226
7.12.1负数“等于”很大的正数 226
7.12.2有符号数和无符号数的不匹配 228
7.12.3有符号数和内存管理 231
7.13格式化字符串的脆弱点 233
7.13.1从内存中的任何一个地方输出数据 235
7.13.2在代码中检测问题 238
7.14堆溢出 239
7.15缓冲区溢出和C++ 242
7.16攻击代码 243
7.16.1定向 244
7.16.2攻击代码的大小 245
7.16.3使用硬编码的函数调用 245
7.16.4使用动态指令跳转表 245
7.16.5定位数据段 247
7.16.6异或(XOR)保护 247
7.16.7校验和与散列加载 247
7.17基于RISC体系结构的攻击代码 248
7.17.1分支延迟或者延迟槽 248
7.17.2基于MIPS的攻击代码结构 249
7.17.3MIPS指令 249
7.17.4定向 249
7.17.5在MIPS操作码中避免空字节 250
7.17.6MIPS中的系统调用 251
7.17.7SPARC攻击代码结构 251
7.17.8SPARC寄存器窗口 251
7.17.9SPARC上的栈调用 252
7.17.10嵌套在SPARC中的函数调用 254
7.17.11PA-RISC攻击代码的结构 254
7.17.12PA-RISC上的栈调用 256
7.17.13在HPUXPA-RISC上的栈溢出 258
7.17.14PA-RISC的内部空间分支 258
7.17.15内部空间跳跃 259
7.17.16定向 260
7.17.17HPUX的自解密攻击代码 261
7.17.18AIX/PowerPC的攻击代码结构 263
7.17.19定位 263
7.17.20给PowerPC命令解释程序代码披上盔甲 264
7.17.21删除空字符 265
7.18多平台的攻击代码 265
7.19保护函数的Prolog－Epilog代码 267
7.19.1击溃栈保护 267
7.19.2击溃非可执行栈 269
7.20小结 271
第8章rootkit 272
8.1破坏性的程序 272
8.1.1什么是rootkit 272
8.1.2什么是内核rootkit 273
8.1.3内核rootkit及其受信任的计算基础 273
8.2简单的WindowsXP内核rootkit 273
8.2.1编写rootkit 273
8.2.2checked编译环境 273
8.2.3rootkit中的文件 274
8.2.4建立环境 274
8.2.5内核驱动程序 274
8.2.6驱动程序的基本结构 274
8.2.7使用驱动程序 275
8.2.8允许卸载驱动程序 276
8.2.9注册驱动程序 278
8.2.10使用SystemLoadAndCallImage 280
8.3钩子调用 282
8.3.1隐藏进程 283
8.3.2系统调用的钩子 283
8.3.3基本钩子调用的结构 283
8.3.4删除进程记录 284
8.3.5另一种进程注入的方法 287
8.4特洛伊可执行程序的重定向 287
8.4.1重定向和Tripwire问题 287
8.4.2重定向驱动程序 288
8.5隐藏文件和目录 292
8.6修补二进制代码 294
8.6.1窥探补丁 295
8.6.2修补NT内核以删除所有的安全保护 296
8.7硬件病毒 306
8.7.1读写硬件存储空间 307
8.7.2示例：读/写键盘硬件 308
8.7.3允许从EEPROM读或写 313
8.7.4CIH 313
8.7.5EEPROM和定时 316
8.7.6以太网的EEPROM 316
8.7.7串行EEPROM和并行EEPROM 319
8.7.8烧毁硬件 319
8.7.9制造商 319
8.7.10通过通用闪存接口检测芯片 320
8.7.11示例：检测FlashRAM芯片 320
8.7.12利用ID模式或JEDECID检测芯片 321
8.8低级磁盘访问 322
8.8.1读或写主引导记录 323
8.8.2感染CD-ROM 323
8.9给驱动程序添加网络支持 323
8.9.1使用NDIS库 323
8.9.2使接口处于混杂模式 325
8.9.3寻找正确的网卡 326
8.9.4为了安全而使用boron标记 331
8.9.5添加交互式命令解释程序 331
8.10中断 331
8.10.1Intel的中断请求(IRQ)结构 331
8.10.2钩住中断描述符表(IDT) 332
8.10.3神秘的程序中断控制器(PIC) 333
8.11击键记录 334
8.11.1Linux下的击键记录 334
8.11.2WindowsNT/2000/XP下的击键记录 335
8.11.3键盘控制器芯片 335
8.12高级rootkit专题 335
8.12.1使用rootkit作为调试器 336
8.12.2禁用Windows系统的文件保护功能 336
8.12.3直接写物理存储器 336
8.12.4内核缓冲区溢出 336
8.12.5感染内核镜像 336
8.12.6改变程序执行方向 336
8.12.7检测rootkit 337
8.13小结 337
附录A攻击模式 338[1]