
与传统编程习惯于每一细节都亲历亲为所不同的是,如果在程序设计之初就综合考虑并合法应用第三方既有成果,就可在项目开发的时间、成本及质量这三个关键矛盾体“三要素”上进行统筹设计,这种技术就是“拿来主义”的编程技术。本书分别通过静态分析、功能调用、输出接收、界面嵌入、中间嗅探、控制交互等方法详细介绍了多达14种拿来技术。全书集编程思想、技术、实践为一体,融会贯通,灵活运用,势必大有裨益。 本书适用于对网络黑客攻防程序开发、反向工程及程序原理分析感兴趣的人员,也适用于监控类和测试类程序开发人员,还可作为高校编程实验用书。另外,本书所涉及的各项技术,除了原理阐述和技术分析之外,均附有完整的程序源代码,所以也适用于各类编程爱好者学习、验证和修改。
推荐序一 拿破仑曾说过:“世上只有两种力量:利剑和思想。从长而论,利剑总是败在思想手下。”美国利用思想渗透致使前苏联解体,编程也是一样,除了需要技术,更需要思想,这样才能编写出更多的好程序,并提高效率。“拿来主义”是编程思想的重要组成部分,有助于缩短开发进度,提升开发质量,使开发技术获得新的突破。当然,“拿来主义”应该在尊重版权许可的前提下进行,这样才能让“拿来主义”思想广泛应用和发展。 本书讲述“拿来主义”的实践,涵盖操作系统、Web 等多方面技术,对广大程序员来说是一本很好的教材。其内容丰富而深刻,极具参考价值和实用性,堪称经典之作。Hook 获取、DLL 重载、API 截获、DOS 公共数据区、Office 控件调用、B/S 提取等稀缺的技术资料一应俱全。以Hook 为例,有简单的介绍,也有深度的技术。又比如DLL 的函数使用,有理论知识又不缺实例。 本书是李瑞民博士的第5本著作,我不仅钦佩李瑞民博士的技术和经验,更钦佩他的开源 精神和为开源事业所做的贡献。共享是一种黑客精神,开源是一种共享方式,共享和开源促进着技术的突破与创新。Linux 的开源衍生出嵌入式、RedHat、Debian、Android、Ubuntu 等,进而衍生出BackTrack、Kali、MIUI、Smartisan OS 等。如果没有开源,智能移动设备可能不会迅速普及大众,科技所带来的生活乐趣将会滞后。简单、快捷的网站搭建,功能和安全性的增强,互联网的呈现,以及大数据的形成等都得益于网站程序的开源。可以说,开源改变世界! 本书令我大开眼界,有一种顿悟的感觉。在千千万万的书丛中,好书难得一遇,而本书就 是其中之一,使读者既能得到思想上的指导,又能得到技术上的提炼,可谓鱼和熊掌兼得。 网络尖刀核心成员 冷鹰 推荐序二 随着技术的发展以及开源社区的日益壮大,程序员做某个软件时的第一想法,除了“这个 软件如何实现”,还有“有没有别人已经做好的,拿来使用一下”。Ruby on Rails 这样的语言可以帮助一个零经验者用几个小时建立一个网站雏形,这样的事情之所以成为可能,是因为其背后的强大框架支持。对其能够支撑的接口了解得越多,在系统中可增加的特性就越多。而开发者并不需要开发一个和Rails 一样或者等同的框架,可以直接将其“拿来”使用。 软件业已经有很多“轮子”被发明了,重新发明“轮子”并不会显得有多明智。直接“拿 来”那些现成的可用组件或框架,可以迅速提升开发能力,更加专注于业务逻辑。书中所主张的“拿来主义”正是应该被奉行的精神。但是正如作者所言,要想“拿来”,得先看对象是否允许“被拿来”,是否允许修改,是否允许绕过一些限制等。了解相关法律规定和条款可以让程序员在一个合法的领域中“拿来”。 本书作者对Windows 编程中操作系统及DLL 能够提供的接口、数据操作等进行了全面而 深入的分析。作者凭其深厚的功底带领读者更深入地了解Windows 系统中可以被轻松“拿来”的东西。如果你正在开发一个Windows 系统中的应用,本书则可能为你提供更加快捷、有效的方案。本书为在Windows 上开发应用程序,尤其是和底层打交道的程序员们带来了非常有价值的知识。 除了代码和接口,我们还可以“拿来”思想,可以“拿来”设计模式,可以“拿来”测试 驱动开发,还可以“拿来”领域驱动设计。在“拿来”之前,还需要知道有什么可以“被拿来”。本书从若干个角度进行分析,引领读者了解哪些是可以“被拿来”的。 这是一本用心写就的书。 敏捷开发独立咨询师、《会说话的代码》作者 王洪亮 前言 在软件开发中,编程人员经常会遇到这么一个问题:就是自己想做的某个功能还不知道该 如何实现呢,而该功能早已被别人实现并应用。这时,也许我们突然会有一个念头,如果能将别人做好的程序全部或一部分通过一定技术拿来为我所用,那不仅可以大大缩短开发进度,在技术攻关上还能得到保障。当然,自己要权衡的是为此所付出的购买版权、获得许可的代价。 撇开项目开发中的其他环节,仅从技术角度来讲,这种“拿来为我所用”的目标是需要有 重要的前提和强有力的技术支持的。其前提就是不违反国际、国家的与版权、著作权相关的各项法律法规,通过合法的手段获得,并明确获得了修改、重新发布、商业销售等许可。本书所有的技术和内容都是基于这一前提的,而实现这一目标所需要支持的技术,则是本书的内容。 在中华五千年漫长的文明史中,这种“拿来为我所用”的现象并不少见,2300 多年前赵 武灵王“胡服骑射”,改中原宽大的衣服为北方游牧民族短小精简的衣服,改善了战士作战的灵活性,增加了战斗力。1000 多年前辽太宗耶律德光在治理天下时,采纳了“说汉话,穿汉服”的方式,以便引进当时汉族先进的文化和管理方式,以取代当时少数民族相对落后的管理方式。1840 年以来,一批批国人出于强国的目的,提出了很多相似的观点,如“师夷长技以治夷”、“古为今用”等,这些观点的共同特点就是“不管是谁的,只要是对的,一切皆可为我所用”,而最让我认同的是20 世纪30 年代鲁迅先生提出的“拿来主义”。简单地说,“拿来主义”即“去其糟粕,取其精华,为我所用”,这也正是本书以此命名的主要原因。 根据“拿来”方式的使用特点,全书分为静态分析型的拿来技术、功能型的拿来技术、输 出接收型的拿来技术、嵌入型的拿来技术、中间嗅探型的拿来技术、控制交互型的拿来技术等6大类。从概念上,6 大类虽然各有特色,但具体到一个编程应用中时,往往各大类你中有我,我中有你,相互调用,互为支持。 全书分为6大部分共15章。其中,作为全书内容的背景,第1 章绪论讲述了拿来技术的 一些定义、共性及分类方式,由于第1 章是后面6 部分14 章的基础,所以不能作为独立的一部分,只列为单独的一章。而后面14 章的内容,则各自独立,在阅读上除了有些内容相关联之外,对阅读顺序没有严格要求。 静态分析型的拿来技术是指通过对数据的静态分析,从中提取可以“拿来”的信息为自己 的程序所用。这里所强调的是“静态分析”,而不是“静态数据”,所以并不强调“拿来”的数据一定是静态数据。根据这一原则,这一类型所对应的拿来技术共分为3 种,分别是操作系统数据的拿来、系统共享文件中的拿来和静态程序文件资源的拿来。 功能型的拿来技术,其操作对象是可执行文件。通过对可执行文件的操作,或者是使其执 行以达到自己程序所要达到的目的;或者是对其执行后生成的结果进行分析,从中提取出有用的信息;或者是控制其执行,使之在按自己要求运行的状态下,达到自己的目的。根据可执行的程序是否有界面,本部分分为无界面程序命令行中的拿来和有界面程序消息式的拿来两章。 输出接收型的拿来技术,其操作对象则将关注点转移至程序的输出界面的接收上,接收的 目的是因为原有界面不能满足自己的需要,因而需要通过一定方式接收其中原本属于界面展示的内容,拿来后为我所用,转换为自己的界面,进而以自己界面的风格进行显示。这部分内容根据当前的两大使用领域,分为读取B/S 界面上输入的数据和对Office 文件输出的接收操作两章。 嵌入型的拿来技术与输出接收型的拿来技术,在应用上似乎是一个姊妹篇,因为嵌入型的 拿来技术也是针对程序的输出界面的接收。但与输出接收型不同的是,这种技术对程序原有界面很满意,想将其界面中的全部或一部分拿来为已所用。该部分内容根据所使用的技术不同,分为控件嵌入式的拿来和界面嵌入式的拿来两章。 中间嗅探型的拿来技术关注的则是程序内部模块之间或程序之间的临时数据,无论是程序 模块之间、程序之间,还是系统之间,要进行数据交换,必然需要通过一个双方都能接收的协议,在知道这个协议的前提下,如果能通过一定的技术,获得二者之间通信的数据,那么对比协议就可以分析二者通信中的内容,甚至直接分析出其中的每一项数据细节,从而实现对数据的拿来。中间嗅探型分为程序调用时的数据过滤、网络通信时的数据监听和串口通信时的数据监控3种。 控制交互型的拿来技术,则既不在乎程序本身的对外输出,也不关注程序的界面,而是将 精力放在程序自身的运作上。通过对程序的控制,以及与程序交互的交换,进而实现对程序原理和数据结构的分析,最后将其内部运行机制作为结果进行拿来。主要分为从运行的程序中拿来和Hook 控制式的拿来。 最后,本书还在附录中增加了3个与本书息息相关的内容。第1 个是本书涉及的概念中, 容易混淆的那些术语、概念和定义,本书并不是要重新定义这些概念,只是相对本书中的这些概念进行解释,从而避免读者理解上的错误;第2 个是对ASCII 码的详细解释,并在码表中内嵌了一个简单的十进制数据和十六进制数据的转换表;第3 个则是Web 中的HTTP 错误返回码,借以解释全书中,散落在多章的有关B/S 架构中的常见问题。 从格式上,本书除了正常的内容之外,还增加了两个备注标识项。其中“提示”是指与所 介绍内容有关,但不足以以正文的内容进行说明的辅助内容;而“重要”则是指该内容不但与介绍的内容有紧密的关系,而且若不理解该内容,很可能对所涉及的内容有错误的理解。 全书内容有收录性质,一切以实用为标准。例如Windows 9X 版本已很少有用户使用,已 无收录的必要,故所有内容中,均至少从Windows XP/2000 版本开始。比Windows 9X 更早的DOS虽然早已淘汰,但由于Windows 所有版本都保留“命令提示符”以示兼容,并且目前始终有大量命令行应用存在,所以保留了DOS 的部分内容。所有的内容,都尽可能以编程实例的方式进行讲解和验证。 重要 本书的程序、代码全部开源,除第9 章“编程实例1:嵌入式视频播放器”中的代码之外,对其余代码约定如下。 (1)本书及随书光盘中的所有例程,其源码部分版权归本书作者所有; (2)光盘内容不得进行单独销售,不得提供网站下载(含收费或免费)。 第9 章“编程实例1:嵌入式视频播放器”中的代码则不受上述约束,但使用该程序的人需要接受VideoLan 对基于其技术进行软件开发的各项要求。
第 1 章绪论1 1.1 “拿来主义”编程技术简介............1 1.1.1 什么是“拿来主义” ..........1 1.1.2 为什么要采用“拿来主义”.............................2 1.2 常用的“拿来主义”编程技术......3 1.3 “拿来主义”编程技术的分类........5 1.3.1 静态分析型的拿来技术......5 1.3.2 功能型的拿来技术.6 1.3.3 输出型的拿来技术.7 1.3.4 嵌入型的拿来技术.8 1.3.5 中间嗅探型的拿来技术......8 1.3.6 控制交互型的拿来技术......9 第 1 部分静态分析型的拿来技术 第 2 章操作系统数据的拿来.........12 2.1 本章的预备知识..............12 2.1.1 进制的表示与转换............12 2.1.2 DOS 下的地址表示...........14 2.1.3 Debug 工具的使用............15 2.2 裸机时代的可用数据......19 2.2.1 裸机的启动过程...19 2.2.2 CMOS 内存中的数据........20 2.2.3 中断与中断向量...25 2.2.4 BIOS 数据区........28 2.2.5 ROM 中的数据.....36 2.3 DOS 中的全局变量.........42 2.3.1 曾经辉煌的DOS..43 2.3.2 DOS 的内存映射..44 2.3.3 DOS 数据区.........46 2.3.4 DOS 的“拿来”实例.......47 2.4 Windows 中的共享数据..49 2.4.1 如日中天的Windows ........49 2.4.2 Windows 中的环境变量....50 VIII 独辟蹊径的编程思维——“拿来主义”编程 2.4.3 Windows 环境变量的意义.52 2.4.4 Windows 环境变量的编程.53 2.4.5 修改Windows 的全局环境变量......................56 2.5 编程实例:基于WinIO 的CMOS 数据读写.............56 2.5.1 程序主界面..........57 2.5.2 程序代码..............57 第 3 章系统共享文件中的拿来 ....61 3.1 操作系统配置文件的拿来............61 3.1.1 对配置文件的读/写...........62 3.1.2 Boot.ini .................65 3.2 目录名称的拿来..............66 3.2.1 与用户名相同的目录名....67 3.2.2 所安装的软件列表............68 3.2.3 与用户相关的特定目录名.68 3.3 数据库访问式的共享......69 3.3.1 ODBC 数据访问方式........69 3.3.2 ADO 数据连接.....82 3.4 注册表的共享.................86 3.4.1 基于注册表访问的API .....86 3.4.2 注册表项的操作...92 3.5 文件级的拿来.................93 3.5.1 网络配置文件.......93 3.5.2 日志文件..............97 3.5.3 Windows 目录自带的音频文件资源.............103 3.6 编程实例1:通过ODBC 对txt 文件进行读/写......108 3.6.1 程序主界面........109 3.6.2 程序代码............109 3.7 编程实例2:通过ADO 对Excel 文件进行读/写.... 112 3.7.1 程序主界面........ 112 3.7.2 程序代码............ 113 第 4 章静态程序文件中资源的拿来 ...................... 115 4.1 常见可执行文件的格式 115 4.1.1 DOS 下的COM 和EXE 文件的格式简介.... 115 4.1.2 Windows 下PE 文件的格式.......................... 118 4.2 VC 软件编程人员眼中的程序资源.......................... 119 4.3 在可执行文件中调整资源..........121 4.3.1 从可执行文件中提取资源.............................121 4.3.2 更换可执行文件中的资源.............................122 4.4 软件汉化与界面调整....122 4.4.1 软件汉化............123 目录IX 4.4.2 软件界面调整.....125 4.5 界面复制.......................126 4.5.1 将可执行文件中的界面复制到工程中..........126 4.5.2 对两个工程之间界面的复制.........................128 第 2 部分功能型的拿来技术 第 5 章无界面程序命令行中的拿来 ......................132 5.1 什么是命令行...............132 5.1.1 常用的DOS 内部命令....134 5.1.2 常用的DOS 外部命令....138 5.2 命令行的组合使用........149 5.2.1 设备文件............149 5.2.2 重定向技术........151 5.2.3 管道技术............155 5.3 命令行的编程技术........156 5.3.1 可嵌入DOS 命令行的几个函数...................156 5.3.2 管道编程的几个函数......161 5.4 编程实例1:使用重定向接收外部程序运行结果...162 5.4.1 程序主界面........162 5.4.2 程序代码............163 5.5 编程实例2:使用管道接收外部程序运行结果......164 5.5.1 程序主界面........164 5.5.2 程序代码............165 第 6 章有界面程序消息式的拿来 ........ 167 6.1 消息机制.......................167 6.1.1 消息的定义........168 6.1.2 消息的队列和非队列模式.............................169 6.1.3 与消息有关的几个函数..170 6.2 Visual C++自带的消息处理工具175 6.2.1 程序界面上的控件..........175 6.2.2 Visual C++下提供的标准控件.......................176 6.2.3 消息查询工具Spy++.......177 6.3 通过消息控制程序........182 6.3.1 与窗口有关的几个函数..182 6.3.2 与消息控制有关的几个函数.........................186 6.4 编程实例:通过消息控制程序..191 6.4.1 程序主界面........191 6.4.2 程序代码............192 X 独辟蹊径的编程思维——“拿来主义”编程 第3 部分输出接收型的拿来技术 第 7 章读取 B/S 界面上输出的数据......................200 7.1 Web 服务器的安装和测试.........201 7.1.1 Web 服务器的安装和验证............................201 7.1.2 检验Web 服务器的效果.205 7.2 基于Web 应用的编程接口........207 7.2.1 CInternetSession 类..........208 7.2.2 CInternetConnection 类....216 7.2.3 CHttpConnection 类.........217 7.2.4 CFtpConnection 类...........218 7.2.5 CInternetFile 类..222 7.2.6 CInternetException 类......224 7.3 编程实例:基于Web 的拿来方式...........................225 7.3.1 原理分析............226 7.3.2 程序主界面........228 7.3.3 程序代码............228 第 8 章对 Office 文件输出的接收操作.................231 8.1 Microsoft Office 简介....232 8.2 输出式的拿来简介........233 8.2.1 COM/DCOM 的概念.......234 8.2.2 AfxOleInit 函数..234 8.2.3 COleVariant 类....235 8.2.4 COleDispatchDriver 类....240 8.3 程序员眼中的Office.....241 8.3.1 Office 的结构框架...........242 8.3.2 Office 组件的导入...........242 8.4 Word 的结构输出..........244 8.4.1 Word 简介...........244 8.4.2 Word 中的要素...244 8.5 Excel 的结构输出..........245 8.5.1 Excel 简介..........246 8.5.2 Excel 中的要素...246 8.6 PowerPoint 的结构输出.247 8.6.1 PowerPoint 简介.248 8.6.2 PowerPoint 中的要素.......248 8.7 输出式的拿来技术在信息安全领域内的应用.........249 8.7.1 数字水印简介.....249 8.7.2 Word 中格式输出类的数字水印...................250 8.7.3 Word 中内容格式的数字水印.......................251 8.8 编程实例1:读取Word 文件中的纯文本内容........252 目录XI 8.8.1 程序主界面........252 8.8.2 程序代码............253 8.9 编程实例2:读写Excel 中的数据..........................254 8.9.1 程序主界面........255 8.9.2 程序代码............255 8.10 编程实例3:控制PPT 的输出258 8.10.1 程序主界面.......258 8.10.2 程序代码..........259 第 4 部分嵌入型的拿来技术 第 9 章控件嵌入式的拿来 ..........264 9.1 ActiveX 技术简介.........264 9.2 在Windows 程序中嵌入ActiveX 控件....................266 9.2.1 设置对ActiveX 控件的支持.........................266 9.2.2 从系统注册的组件中导入要使用的ActiveX 控件..................267 9.2.3 从DLL 文件中导入要使用的ActiveX 控件.268 9.3 编程实例1:嵌入式视频播放器.............................268 9.3.1 播放器编程的简介..........268 9.3.2 VLC 简介...........269 9.3.3 程序主界面........274 9.3.4 程序代码............274 9.4 编程实例2:嵌入式PDF 阅读器............................276 9.4.1 在VC 对PDF 的可视化使用........................276 9.4.2 程序主界面........277 9.4.3 程序代码............278 第 10 章界面嵌入式的拿来........280 10.1 屏幕式的嵌入..............280 10.1.1 图形桌面..........281 10.1.2 实现界面嵌入式要考虑的问题...................283 10.1.3 实现像素级操作主要涉及的API................286 10.1.4 实现桌面级操作主要涉及的API................288 10.1.5 屏幕的截取.......293 10.2 内容式的嵌入..............297 10.2.1 通过IE 调用访问网络地址.........................297 10.2.2 通过嵌入页面方式访问网络地址...............297 10.2.3 通过资源管理器方式访问本地文件系统....298 10.2.4 CHhtmlView 的API.......299 10.3 编程实例1:将程序界面自己程序的一部分进行嵌入....................301 10.3.1 程序主界面.......302 10.3.2 程序代码..........303 XII 独辟蹊径的编程思维——“拿来主义”编程 10.4 编程实例2:嵌入整个Web 页面和资源管理器...306 10.4.1 程序主界面.......307 10.4.2 程序代码..........307 第 5 部分中间嗅探型的拿来技术 第 11 章程序调用时的数据过滤 .............................310 11.1 DLL 文件的意义和用法...........310 11.1.1 DLL 文件的意义........... 311 11.1.2 与DLL 调用相关的函数.............................312 11.1.3 DLL 文件的调用步骤....315 11.2 从EXE 或DLL 文件中找到函数...........................316 11.2.1 Depends 的使用方式.....316 11.2.2 从ICMP.DLL 中抽取函数...........................317 11.2.3 ICMP.DLL 中各函数的用法........................318 11.3 重载DLL 文件............321 11.3.1 DLL 文件重载的原理....321 11.3.2 DLL 文件重载的意义....322 11.4 具有重载特性的DLL 文件创建步骤.....................322 11.4.1 普通DLL 文件的创建步骤.........................323 11.4.2 重载DLL 文件的创建步骤.........................324 11.5 编程实例1:通过ICMP.DLL 制作tracert 命令....325 11.5.1 程序主界面.......326 11.5.2 程序代码..........327 11.6 编程实例2:重载ICMP.DLL 以记录ICMP 协议操作....................330 11.6.1 程序主界面.......330 11.6.2 程序代码..........331 第 12 章网络通信时的数据监听.............................335 12.1 网络通信简介..............336 12.1.1 网络嗅探技术...336 12.1.2 网络协议分析和行为分析...........................336 12.1.3 黑客级别的分析............339 12.2 数据流的截获..............344 12.2.1 单机数据流的获取........344 12.2.2 网络数据流的获取........346 12.3 Socket 编程接口..........348 12.3.1 几个重要的概念............349 12.3.2 Windows Socket 结构....350 12.3.3 Windows socket 转换类函数........................353 12.3.4 Windows socket 通信类函数返回值............357 12.3.5 Windows socket 通信类函数........................359 目录XIII 12.4 编程实例:RAW Socket 嗅探器............................368 12.4.1 程序主界面.......368 12.4.2 程序代码..........369 第 13 章串口通信时的数据监控.............................377 13.1 串口的通信与监听......377 13.1.1 串口简介..........377 13.1.2 串口通信中的“拿来”技术.......................379 13.2 基于VSPE 的串口开发技术....380 13.2.1 VSPE 简介........381 13.2.2 VSPE 的术语....381 13.2.3 VSPE 的串口嗅探功能..386 13.2.4 VSPE 的使用与开发......388 13.2.5 VSPE 的API ....388 13.3 编程实例:串口嗅探器...........392 13.3.1 程序主界面.......393 13.3.2 程序代码..........394 第 6 部分控制交互型的拿来技术 第 14 章从运行的程序中拿来 ...402 14.1 Windows 内存模式......402 14.1.1 Windows 的对内存读写的限制...................403 14.1.2 Windows 的内存管理....404 14.1.3 调试程序简介...407 14.2 基于WinIO 的内存读取编程...408 14.2.1 WinIO 的API ...408 14.2.2 WinIO 的编程...412 14.3 基于API 的程序调试函数.......412 14.3.1 Windows 调试程序的结构...........................413 14.3.2 Windows 调试程序的API ...........................422 14.3.3 Windows 的进程API.....428 14.3.4 Windows 的动态内存API ...........................429 14.3.5 Windows 调试程序的编写方式...................433 14.4 编程实例:读正在执行程序的数据......................434 14.4.1 程序主界面.......435 14.4.2 程序代码..........435 第 15 章 Hook 控制式的拿来.....440 15.1 Hook 简介...................440 15.1.1 什么是Hook.....441 15.1.2 Hook 的运行机制..........442 15.1.3 怎么使用Hook.443 XIV 独辟蹊径的编程思维——“拿来主义”编程 15.2 Hook 函数...................443 15.2.1 SetWindowsHookEx 函数............................444 15.2.2 UnhookWindowsHookEx 函数.....................446 15.2.3 CallNextHookEx 函数....446 15.2.4 回调函数..........447 15.3 Hook 的类型................447 15.3.1 WH_CALLWNDPROC..447 15.3.2 WH_CBT..........448 15.3.3 WM_QUEUESYNC.......452 15.3.4 WH_DEBUG ....452 15.3.5 WH_FOREGROUNDIDLE.......................... 453 15.3.6 WH_GETMESSAGE .....453 15.3.7 WH_HARDWARE.........453 15.3.8 WH_JOURNALRECORD............................453 15.3.9 WH_JOURNALPLAYBACK.......................454 15.3.10 WH_KEYBOARD .......455 15.3.11 WH_MOUSE ..455 15.3.12 WH_MSGFILTER........455 15.3.13 WH_SHELL....456 15.3.14 WH_SYSMSGFILTER.456 15.4 编程实例1:线程Hook 程序编写........................456 15.4.1 程序主界面.......456 15.4.2 程序代码..........457 15.5 编程实例2:全局Hook 程序编写........................459 15.5.1 程序主界面.......459 15.5.2 DLL 程序代码..460 15.5.3 调用程序代码...462 附录A 本书容易混淆概念解析..464 A.1 同名不同义概念...........464 A.2 同义不同名概念...........464 A.3 易混概念......................466 附录B 详解ASCII 码.......468 附录C HTTP 错误返回码...........474 参考文献....479 后记.............481