图书介绍

软件剖析 代码攻防之道PDF|Epub|txt|kindle电子书版本网盘下载

软件剖析 代码攻防之道
  • (美)Greg Hoglund,(美)Gary McGraw编著;邓劲生翻译 著
  • 出版社: 北京:清华大学出版社
  • ISBN:730210445X
  • 出版时间:2005
  • 标注页数:339页
  • 文件大小:30MB
  • 文件页数:359页
  • 主题词:软件项目管理

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

软件剖析 代码攻防之道PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

目录1

第1章 软件——问题的根源1

1.1 软件简史1

1.1.1 软件和信息战4

1.1.2 数字谍报手段4

1.2 不良软件很普遍7

1.2.1 NASA(美国国家航空和宇宙航行局)的火星登陆器7

1.2.2 丹佛机场行李管理系统7

1.2.4 美国军事系统自伤8

1.2.3 鱼鹰MV-228

1.2.5 Microsoft和“爱”bug9

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—200416

1.4.2 中期未来:2005—200718

1.4.3 长期未来:2008—201020

1.4.4 十条思路21

1.5 什么是软件安全21

1.6 小结22

第2章 攻击模式24

2.1 分类24

2.1.1 bug25

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.2 攻击模式36

2.4.1 破解、攻击和攻击者36

2.4 攻击模式:灾难性的蓝图36

2.4.3 代码注入37

2.4.4 活动区37

2.4.5 输出事件37

2.4.6 反馈事件37

2.5 攻击示例:对Microsoft C++编译器的攻击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.8 间接使用攻击45

2.6.9 种植后门45

2.6.6 选择攻击模式45

2.6.7 环境缺陷的影响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.3 反汇编工具52

3.3.4 反编译器52

3.3.1 调试程序52

3.3.2 缺陷注入工具52

3.4 逆向工程的方法53

3.4.1 白箱分析53

3.4.2 黑箱分析53

3.4.3 灰箱分析54

3.4.4 使用灰箱技术在Microsoft的SQL Server 7中寻找脆弱点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.exe74

3.8.2 调试记录75

3.8.1 bug报告75

3.9 自动、成批地审计脆弱点78

3.10 编写属于自己的破解工具87

3.10.1 x86工具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.9 故障注入97

3.10.8 修补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.3 从不被信任的资源中读取数据的进程权限提升113

4.2.2 如果不以管理员的身份运行,一切就会崩溃113

4.2.4 使用提升权限的进程114

4.3 寻找注入点114

4.4 输入路径的追踪116

4.4.1 使用基于Solaris SPARC二进制的GDB和IDA-Pro116

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.2 了解当前工作目录121

4.5.3 如果Web服务器不执行cgi程序该怎么办121

4.5.1 审计直接可执行文件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 技术:蛮力会话ID143

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.4 Linux中的混合终端字符注入153

5.2.5 反射问题155

5.3 跨站点脚本155

5.4 客户端脚本和恶意代码160

5.4.1 检查较脆弱的本地调用160

5.4.2 Web浏览器和ActiveX166

5.4.3 E-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 基于签名和基于异常的IDS175

6.2.2 疲于应付的IDS176

6.2.3 在IDS上交替编码的效应176

6.3 分割分析178

6.3.1 Windows的APISPY178

6.4 追踪代码179

6.3.2 红点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.8 boron标记符185

6.5.1 字符转换186

6.5 反向分析程序代码186

6.5.2 字节操作187

6.5.3 指针操作187

6.5.4 空终止符188

6.6 示例:通过“正门”逆向I-Planet Server 6.0189

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.4 big endian和little endian表示方式208

7.2.5 使用寄存器208

7.2.6 使用内存中现有的代码或是数据块209

7.3 缓冲区溢出与嵌入式系统210

7.4 数据库缓冲区溢出211

7.4.3 数据库的客户端程序212

7.5 缓冲区溢出和Java212

7.4.1 存储过程212

7.4.2 命令行应用程序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.11 栈溢出219

7.10.2 使用反汇编219

7.11.1 固定大小的缓冲区220

7.11.2 不能自动添加空字符作为结束的函数221

7.11.3 off-by-one空字符结束的函数222

7.11.4 改写异常处理程序结构225

7.12 内存管理中的计算错误226

7.12.1 负数“等于”很大的正数226

7.12.2 有符号数和无符号数的不匹配228

7.12.3 有符号数和内存管理231

7.1 3 格式化字符串的脆弱点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.6 异或(XOR)保护247

7.16.7 校验和与散列加载247

7.16.5 定位数据段247

7.17 基于RISC体系结构的攻击代码248

7.17.1 分支延迟或者延迟槽248

7.17.2 基于MIPS的攻击代码结构249

7.17.3 MIPS指令249

7.17.4 定向249

7.17.5 在MIPS操作码中避免空字节250

7.17.6 MIPS中的系统调用251

7.17.7 SPARC攻击代码结构251

7.17.8 SPARC寄存器窗口251

7.17.9 SPARC上的栈调用252

7.17.11 PA-RISC攻击代码的结构254

7.17.10 嵌套在SPARC中的函数调用254

7.17.12 PA-RISC上的栈调用256

7.17.13 在HPUX PA-RISC 上的栈溢出258

7.17.14 PA-RISC的内部空间分支258

7.17.15 内部空间跳跃259

7.17.16 定向260

7.17.17 HPUX的自解密攻击代码261

7.17.18 AIX/PowerPC的攻击代码结构263

7.17.19 定位263

7.17.20 给PowerPC命令解释程序代码披上盔甲264

7.18 多平台的攻击代码265

7.17.21 删除空字符265

7.19 保护函数的Prolog—Epilog代码267

7.19.1 击溃栈保护267

7.19.2 击溃非可执行栈269

7.20 小结271

第8章 rootkit272

8.1 破坏性的程序272

8.1.1 什么是rootkit272

8.2.2 checked编译环境273

8.2.1 编写rootkit273

8.1.3 内核rootkit及其受信任的计算基础273

8.2 简单的Windows XP内核rootkit273

8.1.2 什么是内核rootkit273

8.2.3 rootkit中的文件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 使用SystemLoadAndCallImage280

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.4 CIH313

8.7.5 EEPROM和定时316

8.7.6 以太网的EEPROM316

8.7.9 制造商319

8.7.7 串行EEPROM和并行EEPROM319

8.7.8 烧毁硬件319

8.7.10 通过通用闪存接口检测芯片320

8.7.11 示例:检测Flash RAM芯片320

8.7.12 利用ID模式或JEDECID检测芯片321

8.8 低级磁盘访问322

8.8.1 读或写主引导记录323

8.8.2 感染CD-ROM323

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.1 Intel的中断请求(IRQ)结构331

8.10.2 钩住中断描述符表(IDT)332

8.10.3 神秘的程序中断控制器(PIC)333

8.11 击键记录334

8.11.1 Linux下的击键记录334

8.12 高级rootkit专题335

8.11.3 键盘控制器芯片335

8.11.2 Windows NT/2000/XP下的击键记录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 检测rootkit337

8.13 小结337

附录A 攻击模式338

热门推荐