标题：Shellcoder编程揭秘
基本信息
原书名：Shellcoder's Programming Uncovered  
原出版社：A-List Publishing 
作者：（美）Kris Kaspersky 
译者：罗爱国 郑艳杰 等 
丛书名：安全技术大系
出版社：电子工业出版社 
ISBN：7121030306
出版日期：2006 年9月 
开本：16开 
页码：376 
版次：1-1
编辑推荐
·软件安全专家Kris Kaspersky最新力作
·打开魔法之门，进入隐藏在高级语言编程背后的精彩世界
·全面讲述应用软件和操作系统漏洞的生成与发现、攻击与保护的技巧
内容简介
全书的内容紧密围绕shellcode编程展开，系统地阐述了作为一名shellcoder应该掌握的知识要点。除了shellcode之外，作者还介绍了手机，bios等涉及安全的新领域。
本书的第1部分介绍了编写shellcode前应掌握的一些基本概念，应熟悉的软件工具等内容，还介绍了利用gprs入侵的细节。第2部分则以常见的栈溢出、堆溢出问题开始，接着介绍了seh、格式化漏洞等内容，最后介绍怎样解决这些漏洞，并以实际的漏洞为例，讲解怎样利用漏洞。第3部分主要放在编写shellcode上，介绍怎样编写适应多种环境的shellcode，除了以windows平台为主，还稍带介绍了linux平台上shellcode，第15章则介绍了怎样编译与反编译shellcode。第4部分介绍了网络蠕虫与病毒。第5部分介绍了防火墙，蜜罐，和其他的保护系统。重点介绍了怎样突破这些保护系统。第6部分介绍了除常见攻击对象之外的其他目标，如无线网络，手机，bios等。
书中还包括了大量未分开的用c/ic编语言编写攻击代码的高级技巧。
目录
第1部分 shellcode简介 
第1章 必需的工具 3 
1.1 编程语言 7 
1.2 分析，调试，逆向工程的工具 8 
1.3 必读书目和其他的参考资料 10 
第2章 汇编语言——概览 12 
2.1 汇编语言基本原理 13 
2.2 用c程序解释汇编概念 14 
2.3 以内联汇编为平台 16 
第3章 揭秘利用gprs的入侵 18 
3.1 匿名为什么也不安全 18 
3.2 利用gprs入侵 21 
3.2.1 gprs调制解调器vs手机 22 
3.2.2 深入了解手机 22 
3.2.3 从键盘改写nam 24 
3.2.4 手动改写nam 26 
3.2.5 参考资料 29 
第2部分 溢出错误 
第4章 受溢出影响的缓冲区（怪圈） 33 
4.1 溢出错误分类（极度无聊） 34 
4.2 产生溢出错误的历史必然性 36 
4.3 有关溢出错误的神话与传说 37 
4.4 攻击的目标和可能性 39 
4.4.1 读敏感变量 39 
4.4.2 修改秘密变量 39 
4.4.3 把控制权传给程序中的秘密函数 40 
4.4.4 把控制权传给入侵者的代码 40 
4.4.5 溢出攻击的目标 40 
4.4.6 不同溢出类型的特征 48 
第5章 利用seh 56 
5.1 关于结构化异常的简短信息 56 
5.2 捕获控制 62 
5.3 抑制应用程序异常终止 63 
第6章 受控的格式符 64 
6.1 支持格式化输出的函数 65 
6.2 cfingerd补丁 66 
6.3 潜在的威胁源 66 
6.3.1 强制伪造格式符 66 
6.3.2 dos实现 67 
6.3.3 peek实现 69 
6.3.4 poke实现 71 
6.3.5 不均衡的格式符 73 
6.3.6 目标缓冲区溢出 73 
第7章 溢出实例 75 
7.1 威胁源 75 
7.2 技术细节 76 
7.3 攻击代码 77 
7.4 使攻击代码复活 80 
7.5 编写shellcode 81 
7.6 胜利或失败 81 
7.7 路在何方？ 83 
第8章 搜索溢出的缓冲区 84 
8.1 埋没在打印纸下 85 
8.2 二进制代码历险 87 
8.2.1 代码分析step by step 88 
8.2.2 重要提示 95 
8.3 溢出错误的实例 96 
第9章 保护缓冲区免遭溢出之害 102 
9.1 反黑客的技术 103 
9.1.1 stackguard 103 
9.1.2 不可执行栈（nonexecutable stack） 104 
9.1.3 its4软件安全工具 104 
9.1.4 flawfinder 104 
9.2 内存分配的问题 105 
9.2.1 ccured 105 
9.2.2 memwatch 105 
9.2.3 dmalloc，the debug malloc library 106 
9.2.4 checker 106 
第3部分 设计shellcode的秘密 
第10章 编写shellcode的问题 113 
10.1 无效的字符 113 
改写地址的技巧 113 
10.2 大小很重要 118 
10.3 寻找自我 119 
10.4 调用系统函数的技术 121 
10.4.1 在不同的操作系统里实现系统调用 127 
10.4.2 溢出之后恢复脆弱的程序 132 
10.5 关于shellcoding的有趣参考 132 
第11章 写可移植shellcode的技巧 134 
11.1 可移植shellcode的需求 135 
11.2 达成可移植之路 135 
11.3 硬编码的缺点 136 
11.4 直接在内存里搜索 138 
11.5 over open sights: peb 140 
11.6 展开seh栈 141 
11.7 原始api 142 
11.8 确保可移植的不同方法 143 
第12章 自修改基础 144 
12.1 了解自修改代码 144 
12.2 建立自修改代码的原则 147 
12.2.1 the matrix 153 
12.2.2 通过因特网修改 
12.2.2 代码的问题 156 
12.2.3 关于自修改的笔记 157 
第13章 在linux里捉迷藏 159 
13.1 可加载内核模块 160 
13.2 从任务列表里移走进程 164 
13.3 捕获系统调用 168 
13.4 捕获文件系统请求 169 
13.5 当模块不可用时 171 
13.6 其他的隐藏方法 174 
第14章 在linux里捕获ring 0 176 
14.1 hacking的正道 176 
14.2 linux下内核蓝牙本地攻击 177 
14.3 elfs fall into the dump 178 
14.4 多线程的问题 179 
14.5 在多处理器机器上得到root 181 
14.6 有趣的资源 183 
第15章 编译与反编译shellcode 184 
反编译shellcode 188 
第4部分 网络蠕虫和本地病毒 
第16章 蠕虫的生存周期 193 
16.1 真实介绍前的闲言碎语 194 
16.2 蠕虫介绍 195 
16.2.1 蠕虫的结构解剖 196 
16.2.2 蠕虫传播机理 204 
16.2.3 蠕虫的到达 205 
16.2.4 感染的策略与战术 206 
16.2.5 为自然生态环境而努力：在同伴面前的决择，生或死 209 
16.2.6 怎样发现蠕虫 213 
16.2.7 怎样战胜蠕虫 216 
16.2.8 暴风雨前的平静结束了？ 217 
16.2.9 有趣的因特网资源 219 
第17章 unix里的本地病毒 221 
病毒活动需要的条件 223 
第18章 scripts里的病毒 225 
第19章 elf文件 231 
19.1 elf文件的结构 233 
19.2 常见结构和病毒行为的策略 235 
19.2.1 通过合并来感染 236 
19.2.2 通过扩展文件的最后一节来感染 238 
19.2.3 通过压缩原始文件的部分内容来感染 241 
19.2.4 通过延伸文件的代码节来感染 246 
19.2.5 通过把代码节下移来感染 249 
19.2.6 通过创建定制的节来感染 251 
19.2.7 在文件和头部之间插入来感染 251 
第20章 获取控制权的方法 253 
20.1 替换进入点（entry point） 253 
20.2 在进入点附近插入病毒码 254 
20.3 修改导入表（import table） 254 
第21章 被病毒感染的主要征兆 256 
21.1 反病毒程序有用吗？ 261 
21.2 有关病毒感染的因特网资源 262 
第22章 最简单的windows nt病毒 263 
22.1 病毒操作的算法 264 
22.2 实验室病毒的源码 265 
22.3 编译并测试这个病毒 268 
22.4 枚举流 270 
22.5 有用的资源 270 
第5部分 防火墙，蜜罐，和其他保护系统 
第23章 绕过防火墙 273 
23.1 防火墙能防御和不能防御的威胁 274 
23.2 探测并识别防火墙 276 
23.3 穿过防火墙的扫描和跟踪 280 
23.4 渗透防火墙 281 
23.5 关于防火墙的连接 282 
第24章 从防火墙逃脱 283 
24.1 防火墙做与不做什么 283 
24.2 与远程主机建立连接 285 
24.2.1 绑定exploit，或“幼稚的攻击” 285 
24.2.2 反向exploit 288 
24.2.3 find exploit 290 
24.2.4 重用exploit 292 
24.2.5 fork exploit 294 
24.2.6 sniffer exploit，或被动扫描 295 
第25章 在unix和windows nt下组织远程shell 296 
25.1 blind shell 296 
25.2 多功能shell 297 
第26章 黑客喜欢蜂蜜 300 
26.1 罐里有什么？ 301 
26.2 准备攻击 302 
26.3 对蜜罐的认识（casting light on honeypots） 303 
26.4 骗人的诡计 303 
26.5 攻击蜜罐 303 
26.6 在蜜中淹死 304 
第27章 窃听lan 305 
27.1 攻击的目标和方法 305 
hub和相关的缺陷 306 
27.2 被动窃听 307 
检测被动窃听 314 
27.3 主动窃听或arp欺骗 315 
检测主动窃听 317 
27.4 克隆网卡 318 
检测克隆并抵制它 318 
27.5 窃听dial-up流量 318 
27.6 sniffers无用时（when sniffers are useless） 319 
27.7 秘密窃听 319 
27.8 与窃听有关的资源 320 
第28章 攻击之下的数据库 321 
28.1 薄弱的密码加密算法 322 
28.2 密码窃听 322 
28.3 hacking a script 323 
28.4 难忘的查询或sql注入 324 
28.5 怎样检测sql服务器的存在 327 
28.6 抵抗入侵 328 
第6部分 可用于插入的外来对象 
第29章 攻击蓝牙 331 
29.1 什么是蓝牙？ 332 
29.2 精确射击型天线 333 
与天线有关的有趣的连接 335 
29.3 认证和授权 335 
关于加密算法的有趣连接 337 
29.4 攻击方法 338 
与蓝牙安全相关的连接 339 
29.5 蓝牙hacking工具概述 339 
widcomm里的溢出错误 340 
第30章 节省gprs费用 342 
30.1 通过代理服务器工作 342 
30.2 google web accelerator 343 
其他的web加速器 344 
30.3 通过telnet隧道 345 
30.4 通过icmp隧道 346 
黑客软件 347 
第31章 关于flashing bios传说与神话 348 
31.1 升级bios的好处 351 
31.1.1 支持新设备 352 
31.1.2 新操作模块 353 
31.1.3 解决冲突 353 
31.2 什么时候升级bios 355 
31.3 hacking bios 355 
31.3.1 深入了解刷新工具 358 
31.3.2 刷新bios的技巧 358 
31.3.3 自我维护的bios 360 
31.3.4 不能自我维护的bios 362 
第32章 病毒感染bios 363 
32.1 怎么进行 364 
32.2 深入bios 365 
32.3 baptizing by fire, or creating an isa rom module 369 
32.4 修改启动块 373 
升高栅栏 374 
32.5 系统超频 375 
32.6 与bios有关的有用的连接 376 
cd内容 377 
前言
我们生活在一个残酷无情的世界里，几乎所有机器上的软件都有安全漏洞，而且其中的大部分还非常严重。黑客、蠕虫、病毒迅速利用这些漏洞，从网络的各个角落发起攻击。据统计，绝大多数的远程攻击是通过溢出缓冲区来完成的，而最常见的就是栈溢出。可以毫不夸张地说，精通溢出缓冲区的那些人主宰着整个世界。如果你希望在如此恶劣的生存环境寻找一本生存指南，从而在易受溢出影响的缓冲区里游刃有余，那么，本书就是为你准备的。隐藏在高级语言编程背后的是一个异常精彩的世界，本书将会为你打开进入它的魔法之门。 
溢出错误为什么如此重要呢？我们能利用它做些什么？怎样发现脆弱的缓冲区？这样的缓冲区对shellcode有何限制？怎样克服这些局限性？应该用什么样的工具编译shellcode？怎样做到向远程主机发送shellcode而不会引起人们的注意？怎样绕过防火墙？怎样发现并分析其他人的shellcode？怎样保护自己的程序，使它免受溢出之害？ 
大家都知道，反病毒厂商的圈子相对比较封闭，他们很少向外界透露信息，也不大乐意接受新成员，他们拥有的信息只对圈内人士开放。部分原因可能是基于安全性的考虑，但主要原因可能是怕影响到企业的竞争力。没关系，本书将从某种程度上揭开这层神秘的面纱。