本书所介绍的内容与计算机防护技术相关。本书基于作者在计算机编程方面的多年实践经验,对当今国际上最新的应用程序间的通信、挂钩、捆绑技术作了较为具体、系统的归纳和总结,并给出了大量的实例。本书中很多的技术还没有公开,属于底层热门技术,所给出的很多程序代码可以直接用于商业软件的制作。\r\n 本书旨在为对通信、挂钩和捆绑等方面编程感兴趣的读者提供参考,适合于中高级软件开发人员使用,还可以作为计算机和信息类专业高年级学生学习的辅助读物。
第1章 再谈计算机内存访问 \r\n 1.1 引言 \r\n 1.2 内存管理概述 \r\n 1.3 虚拟内存访问 \r\n 1.4 文件的内存映射 \r\n 1.5 深入认识指针的真正含义 \r\n 1.6 本章小结 \r\n 参考文献 \r\n第2章 再谈PE文件结构 \r\n 2.1 引言 \r\n 2.2 PE文件格式概述\r\n 2.3 PE文件结构 \r\n 2.4 如何获取PE文件中的OEP\r\n 2.5 PE文件中的资源 \r\n 2.6 一个修改PE可执行文件\r\n 2.7 本章小结 \r\n 参考文献 \r\n第3章 进程之间通信概述及初级技术 \r\n 3.1 引言 \r\n 3.2 进程通信概述 \r\n 3.3 使用自定义消息通信 \r\n 3.4 使用WM_COPYDATA消息通信 \r\n 3.5 使用内存读写函数和内存\r\n 3.6 使用动态链接库通信\r\n 3.7 使用Windows剪贴板通信 \r\n 3.8 使用动态数据交换(DDE)通信 \r\n 3.9 本章小结 \r\n 参考文献 \r\n第4章 使用消息管道、邮槽和套接字通信\r\n 4.1 引言 \r\n 4.2 如何用命名管道进行进程间通信 \r\n 4.3 如何用邮槽进行进程间通信 \r\n 4.4 如何用Windows套接字进行进程间通信\r\n 4.5 本章小结 \r\n 参考文献 \r\n第5章 使用LPC和RPC通信 \r\n 5.1 引言 \r\n 5.2 接口定义语言(IDL)简介 \r\n 5.3 使用本地过程调用(LPC)通信 \r\n 5.4 使用远程过程调用(RPC)通信 \r\n 5.5 本章小结 \r\n 参考文献 \r\n第6章 使用组件模型通信\r\n 6.1 引言 \r\n 6.2 COM/DCOM模型概述 \r\n 6.3 使用组件对象模型(COM/DCOM)通信 \r\n 6.4 本章小结 \r\n 参考文献 \r\n第7章 进程的创建、控制和隐藏 \r\n 7.1 引言 \r\n 7.2 常见的几种创建进程的方法 \r\n 7.3 如何获得进程句柄 \r\n 7.4 如何实现当前进程的枚举 \r\n 7.5 如何终止进程 \r\n 7.6 如何隐藏进程(注入代码)\r\n 7.7 本章小结\r\n 参考文献 \r\n第8章 应用程序的静态挂钩 \r\n 8.1 引言 \r\n 8.2 使用C/C++语言提取可执行程序代码 \r\n 8.3 如何对PE文件加壳 \r\n 8.4 如何实现文件脱壳 \r\n 8.5 本章小结 \r\n 参考文献 \r\n第9章 应用程序的动态挂钩 \r\n 9.1 动态挂钩概述 \r\n 9.2 使用Windows钩子函数挂钩 \r\n ……\r\n第10章 数据的编码和解码实例 \r\n第11章 可执行文件的捆绑和分离 \r\n第12章 可执行文件的分割和合并\r\n第13章 多线程下载和断点续传 \r\n第14章 带附件的电子邮件发送剖析 \r\n第15章 特洛伊木马与反木马技术\r\n参考文献
张正秋,现在中国气象科学研究院工作,获北京大学物理学院理学博士学位,长期从事数值模式研究和计算机软件开发工作。对应用程序间的通信、挂钩和捆绑技术的编程有较丰富的实践经验。
作为一名优秀的程序员,能设计出单独的应用程序固然十分必要。如果熟练掌握在本地计算机或网络中的多个应用程序之间的通信、控制以及可执行文件自身的合并或分离技术,就能够使自己编写的程序具有强大的功能。这些技术也就构成了应用程序间的通信、挂钩和捆绑核心技术,即本书要介绍的内容。使用这些技术可以打破应用程序之间的界限,使消息或数据流能够在本地计算机或网络的应用程序之间自由地传送。
应用程序间的通信、挂钩和捆绑技术其实可以通称为“捆绑技术”,因为它们都是把两个以上的应用程序联系在一起的,都是关于应用程序之间相互关联的问题。这些技术也是人们经常关注和使用的,但目前系统地介绍这方面的书籍还较少,特别是很难找到这方面完整的程序代码或编程实例,因此作者试图对这方面的技术进行全面系统的介绍。
应用程序间的通信、挂钩和捆绑技术的应用十分普遍。对于应用程序间的通信技术大家并不陌生,人们使用的聊天程序、程序间数据传输程序等都使用了这种技术。应用程序挂钩是对Windows系统的消息或数据流的截获,即在此消息或数据流到达某个应用程序之前被截获下来,翻译程序、控制程序和一些间谍程序等都使用了这种技术,同时对软件的加密也需要使用此技术。应用程序的捆绑是把多个可执行文件结合在一起或者把一段可执行代码隐藏在某个应用程序中,当然它们也可以分离出来。把多个文件结合在一起或者把一个大型文件分割成多个小文件便于文件的传输、储存或隐藏等。目前,程序间的通信、挂钩和捆绑技术在计算机各种软件中得到广泛的应用。随着软件业的发展,这些技术越来越具有光辉的应用前景。
作者在多年的编程实践中深深体会到,任何关键技术都有一个关键点,只要掌握了这个关键点,其他的问题就可以迎刃而解。正是在这种思想的指导下,本书作者尽力浓缩有关应用程序间的通信、挂钩和捆绑等技术精华,突出关键点,在有限的篇幅中使读者获得较多相关技术知识。
对本书的特别说明
本书的每章都构成了一篇论题。在介绍某种技术之前,均先介绍一些背景知识,使读者加深认识。对于同一种技术问题,力求采用不同的实现方法。在给出程序实例时,力求程序代码完整并且短小精炼,不需要花费很多的时间就能够领会其中的要点。
本书内容中有些技术还没有公开,有些内容虽然在互联网上已经零散地发表但不够完善,甚至对有些问题也没有讲述清楚。作者对这些内容进行了归纳和总结,对所借用的程序源代码做了一定的改进,并在Windows XP环境下进行了测试,所给出的很多程序代码可以直接用于商业软件的制作。对于所引用的文献,均在参考文献中注明或在文中介绍时说明。书中有很多观点是作者个人的看法,例如在本书第1章介绍的“C指针的真正含义”等。书中所提供的源代码仅供研究之用。
本书所使用的语言
本书的实例大部分是采用VC++语言来实现的,也有些实例是采用其他计算机语言编写(例如用RadASM实现静态程序挂钩技术),这样比较容易实现特定技术,通常所使用的语句都比较简单,如果熟悉VC++,ASM等计算机编程语言的一般句法,看懂这些实例并不难。当然,也可以用C/C++替代ASM等语言来实现某种特定的技术,但实现过程较复杂。为了便于读者阅读一些程序代码,在介绍这些实例之前,对某些相关计算机语言,例如内联汇编(INLINE ASM)和接口定义语言(IDL)等,都进行了简要的介绍。
本书包含的内容
本书共分15章。第1章和第2章是基础知识介绍,为以后章节做准备。第3章~第6章讲述了应用程序之间的各种通信技术,并分别给出了完整的程序代码。第7章讲述了进程的创建及其控制技术,介绍了如何向远程进程中注入代码的各种方法。第8章和第9章分别讲述了应用程序的静态和动态挂钩技术,前者是程序运行前的挂钩,后者是程序运行时的挂钩。第10章讲述了数据的编码和解码技术,介绍了各种无损失数据压缩(编码)和解压(译码)方法,大多数编码方法实际上是对数据的压缩方法,把多个文件压缩成一个文件其实是实现了数据的“捆绑”,在此章中给出了LZW压缩的完整代码。第11章讲述了可执行文件的文件式结合的捆绑技术,介绍了如何编写自分解文件的软件。第12章讲述了本地文件的分割和合并技术,而第13章讲述了多线程下载和断点传续技术,其本质是对远程文件的分割和合并技术,在此章中分别给出FTP和HTTP协议下的多线程下载和断点传续的完整程序代码。第14章讲述了如何编写带附件的电子邮件发送软件,这种技术也属于文件“捆绑”,在此章中解析了编写发送电子邮件程序的整个开发过程。第15章讲述了特洛伊木马与反木马技术,实际上,它是对前面所讲知识的综合应用,因为这种技术与应用程序间的通信、挂钩和捆绑等技术相关。
特别提示
在本书所给出的实例代码中,有些代码是相同的,为了书中的内容简洁,作者省略了重复代码,所省略的代码都可以在其前面的章节找到。
其他说明
在本书的编写过程中得到了我的家人和朋友的大力支持和鼓励,如果没有他们的关爱,就不能写出这本书,在此把这本书作为献给他们的礼物。
由于本人水平有限,错误在所难免,敬请广大的IT高手不吝指正。
作者 张正秋
2006年9月1日,于北京
无封面