本书是一本介绍Windows核心技术及高级技巧的专著。从系统内核编程出发,使用大量的例子帮助读者理解这些编程技术,讲述了线程同步及隐藏、系统钩子深入分析、读写物理磁盘的关键技术、读写物理内存和其他进程内存的核心技术、Windows 9x下调用16位实模式和保护模式代码的核心技术、直接读写端口技术、可执行文件加壳的技巧、PE结构分析、Ring0的实现、Windows API截取技术、屏幕取词技术等方面的内容。全书对热点源代码进行了深入剖析和讲解,同时本书汇聚了作者利用Soft-ICE跟踪调试经验,作者多年的编程心得和技巧一览无遗。随书附送的光盘提供了书中涉及的程序源代码。\r\n 本书可对Windows核心编程感兴趣者提供帮助,亦可供广大编程人员及各大专院校师生参考。
第1章 DLL与数据共享\r\n\r\n1.1 关于DLL\r\n1.1.1 DLL的结构\r\n1.1.2 DLL数据作用范围\r\n1.2 内存映像\r\n1.2.1 创建映像文件\r\n1.2.2 打开映像文件\r\n1.2.3 映射到本进程中\r\n1.2.4 关闭内存映射\r\n1.2.5 两个EXE文件共享内存数据块\r\n1.2.6 两个DLL文件共享内存数据块\r\n1.3 16位和32位进程间传送消息\r\n1.3.1 全局原子实现数据共享\r\n1.3.2 WM_COPYDATA消息实现进程间数据共享\r\n\r\n第2章 钩子原理\r\n\r\n2.1 钩子原理\r\n2.1.1 挂钩函数\r\n2.1.2 钩子链\r\n2.1.3 脱钩\r\n2.2 消息及DLL的注入\r\n2.2.1 自定义消息截取\r\n2.2.2 文件或串并口读写监视钩子\r\n2.3 Shell钩子\r\n2.3.1 实现钩子\r\n2.3.2 注册钩子\r\n2.3.3 实现步骤\r\n2.3.4 完整代码\r\n2.4 鼠标键盘钩子\r\n2.4.1 效果不错的鼠标钩子\r\n2.4.2 鼠标键盘的动作记录与回放\r\n2.4.3 黑客常用工具——键盘钩子\r\n2.4.4 非DLL键盘监视的两种方法\r\n\r\n第3章 系统内核\r\n\r\n3.1 内核对象\r\n3.2 进程\r\n3.2.1 进程在内存中的结构\r\n3.2.2 进程列举\r\n3.2.3 Windows NT/2000下列举进程的方法\r\n3.2.4 进程模块的列举\r\n3.2.5 终止进程\r\n3.2.6 创建进程并监视进程运行\r\n3.3 进程隐藏深入剖析\r\n3.3.1 进程隐藏原理\r\n3.3.2 Windows 9x下进程的伪隐藏\r\n3.3.3 用三级跳实现真隐藏\r\n3.3.4 Windows NT/2000进程远程写入实现深度隐藏\r\n3.4 线程\r\n3.4.1 线程的优先级\r\n3.4.2 线程的挂起和继续\r\n3.4.3 执行线程\r\n3.4.4 线程同步\r\n3.4.5 列举本进程的所有线程\r\n3.5 Windows NT/2000的性能数据库\r\n3.5.1 性能数据库的对象、计数器及实例\r\n3.5.2 浏览性能数据库\r\n\r\n第4章 低层操作\r\n\r\n4.1 中断\r\n4.2 内嵌汇编\r\n4.2.1 汇编入口与退出\r\n4.2.2 使用汇编\r\n4.2.3 嵌入汇编程序\r\n4.3 Ring0特权及端口直接IO\r\n4.3.1 Ring0特权的获取\r\n4.3.2 关于VxD\r\n4.3.3 Windows 9x下的时间变速(变速齿轮)\r\n4.4 端口读写驱动PortTalk\r\n4.4.1 PortTalk与Delphi的接口\r\n4.4.2 Windows NT/2000下的时间变速(变速齿轮)\r\n4.5 Thunk机制\r\n4.5.1 Flat Thunk(直接替换)\r\n4.5.2 Generic Thunk(通用替换)\r\n\r\n第5章 磁盘读写\r\n\r\n5.1 磁盘读写技术荟萃\r\n5.1.1 Windows 9x下读写逻辑磁盘扇区的方法\r\n5.1.2 Windows 9x下用INT13实现读写软盘物理磁盘扇区\r\n5.1.3 利用VxD和CIH病毒中的Ring0技术\r\n5.1.4 调用16位实模式的核心技术\r\n5.1.5 Windows NT/2000下读写物理、逻辑磁盘扇区\r\n5.2 枚举磁盘中已打开的文件列表\r\n\r\n第6章 回收站和IE\r\n\r\n6.1 回收站\r\n6.1.1 删除文件到回收站\r\n6.1.2 清空回收站\r\n6.1.3 回收站实时监控\r\n6.2 IE编程\r\n6.2.1 IE历史记录的管理\r\n6.2.2 IE工具栏\r\n6.2.3 获取已打开的IE地址的两种方法\r\n6.2.4 将网页保存为图片\r\n6.2.5 清除IE历史记录、下拉列表和Cookie\r\n\r\n第7章 高级应用\r\n\r\n7.1 DDE\r\n7.1.1 DDE原理\r\n7.1.2 利用DDE创建程序组\r\n7.1.3 执行DDE宏\r\n7.2 密码相关程序\r\n7.2.1 查看“*”的编辑框\r\n7.2.2 防止“*”的密码泄露\r\n7.2.3 读取缓冲区密码\r\n7.3 目录监视\r\n7.4 剪贴板监视\r\n7.5 消息机制\r\n7.6 模拟按键及鼠标双击\r\n7.7 热键\r\n7.8 程序运行后自动删除\r\n7.9 只运行一个实例的两种方法\r\n7.9.1 写全局元素的惟一字符串\r\n7.9.2 创建互斥对象\r\n7.10 移动正在使用的文件\r\n7.11 类型转换与存储转换\r\n7.11.1 类型转换\r\n7.11.2 存储转换\r\n7.12 加壳原理\r\n7.12.1 附加代码分析\r\n7.12.2 合并外壳的源代码分析\r\n\r\n第8章 PE结构分析\r\n\r\n8.1 PE文件结构\r\n8.1.1 文件头(File Header)\r\n8.1.2 节表(Section Table)\r\n8.1.3 引入函数表(Import Table)\r\n8.1.4 导出表(Export Table)\r\n8.1.5 重定位表\r\n8.1.6 检验PE文件的有效性\r\n8.2 PEDump实例\r\n8.2.1 显示资源的单元源代码\r\n8.2.2 以十六进制格式化显示PE文件\r\n8.2.3 显示PE信息的单元源代码\r\n8.2.4 PE引入与导出函数表\r\n8.2.5 主程序及公共单元\r\n\r\n第9章 内存管理\r\n\r\n9.1 内存结构\r\n9.2 内存堆列举\r\n9.3 修改虚拟内存保护属性\r\n9.4 读写其他进程内存的技巧\r\n9.5 Windows 9x下读写物理内存的核心技术\r\n9.5.1 编写VxD读写内存\r\n9.5.2 利用16位DLL代码读写物理内存\r\n9.6 Windows NT/2000下读写物理内存的核心技术\r\n\r\n第10章 API Hook及屏幕取词\r\n\r\n10.1 API Hook必读\r\n10.1.1 API Hook入门\r\n10.1.2 陷阱式API Hook\r\n10.1.3 改引入表式API Hook\r\n10.1.4 API Hook源代码分析\r\n10.2 屏幕取词\r\n10.2.1 Windows NT/2000下32位取词及关键技术\r\n10.2.2 Windows 9x下16位、32位取词及核心技术\r\n\r\n附录A Delphi编译指令说明\r\n\r\nA.1 使用编译设置对话框\r\nA.2 使用编译指令\r\nA.3 使用条件编译指令\r\n\r\n附录B Delphi编译错误信息对照表
近些年计算机软件的发展很快,从工具软件到管理软件都有很成熟的产品。软件系统的开发不但需要扎实的软件基础知识及团队合作精神,还需要对Windows系统这个黑匣子有一定的了解,以编写出高性能的、高技术含量的代码来。如果仅凭对开发语言的掌握,不求甚解,不深入系统内核去分析、挖掘,就不会有Soft ICE(系统反编译调试工具)、PartitionMagic(魔术化分区工具)、Norton Utilities(诺顿磁盘工具)等著名的软件。可是对于一些核心技术,大多数程序员还是知之甚少。本书介绍的技术大部分是作者及网友多年编程的积累和总结。把这些代码汇集在一起出版,希望能对读者有一定的帮助或启发。
本书讲述了线程同步及隐藏、系统钩子深入分析、读写物理磁盘的关键技术、读写物理内存和其他进程内存的核心技术、Windows 9x下调用16位实模式和保护模式代码的核心技术、直接读写端口技术、可执行文件加壳的技巧、PE结构分析、Ring0的实现、Windows API截取技术、屏幕取词技术等方面的内容。
其中的屏幕取词技术是网络上许多BBS的热点话题,遗憾的是BBS上涉及到关键技术时都含糊其词。本书将介绍一个完整的屏幕取词程序(包括16位的Thunk关键技术,适用于Windows 9x/NT/2000)。
CIH病毒曾经一度让全球的人们谈虎色变,这也是前几年的热门话题。CIH病毒利用Windows 9x下保护模式编程的一个技巧(漏洞),从Ring3跳到Ring0执行一些系统服务函数,做了一些“见不得人”的操作:用垃圾数据覆盖硬盘扇区、读写破坏BIOS芯片。CIH病毒源代码中有许多值得学习的地方,本书中的Windows 9x下的物理磁盘读写技术、时间变速器等就使用了这种技术。玩过网络游戏的人都应该听说过时间变速器,这种变速器运行在Ring0,与操作系统同一特权级,使用特殊的指令改变计算机的时钟周期,骗过操作系统,造成计时器(时间)高速“前进”的假象,许多网络游戏就是用这样的变速器来作弊的。
在DOS下实现过汇编高级编程的人一定会对EXE文件很熟悉,可是Microsoft的产品未来将脱离DOS,不再提供对DOS的支持。Win32提供新的可执行文件格式PE,本书将详细地说明PE的结构,并在PE文件结构的基础上实现截取API、屏幕取词等技术。
全书分为10章,内容简介如下:
第1章DLL与数据共享,在Win32中通过使用内存映像文件、全局原子等实现多进程共享数据,这一章是基础,后面的很多章节都使用了本章介绍的数据共享技术。
第2章钩子原理,介绍了消息(包括键盘、鼠标消息)的截取、钩子的安装、DLL注入其他进程的方法等技术。这一章所介绍的内容是后面截取API、屏幕取词等技术的基础知识。
第3章系统内核,让读者对Windows内核有了一定的了解,介绍了进程的枚举、线程的同步、进程深度隐藏的种种方法及技巧、Windows NT/2000的性能计数器等技术。
第4章低层操作,介绍内嵌汇编获取Ring0特权的技巧、Windows 9x/NT/2000时间变速器的实现原理、16位与32位代码的核心接口技术等方面的内容。
第5章磁盘读写,分别提供了Windows 9x/NT/2000下逻辑扇区和物理扇区的读写,介绍了磁盘操作中鲜为人知的核心技术。
第6章回收站和IE,介绍了回收站的物理存贮结构、监视回收站、IE缓冲区数据、IE窗口的监视等方面的内容。
第7章高级应用,介绍了DDE、消息机制、剪贴板和目录的监控、程序运行后自动删除、只运一个实例的多种方法、移动正在使用的文件、类型转换与存储转换、可执行文件加壳等高级应用技巧。
第8章PE结构分析,介绍了Windows的PE文件结构,并详细分析了其中每部分的含义,这是截取API等技术的基础。
第9章内存管理,介绍了物理内存的存取、进程内存的存取、内存堆的枚举等核心技术,让读者对内存的结构有更深入的了解。
第10章API Hook及屏幕取词,介绍了16位和32位Windows 9x的API Hook技术、Windows NT/2000的API Hook技术、Windows 9x/NT/2000下的屏幕取词技术(该技术还包括16位的Thunk等关键技术)。其中,如果屏幕取词技术加入英文词库就可以实现独自开发词霸。
特别说明:在书中所有出现Windows 9x的地方,都适用于Windows Me;所有出现Windows NT/2000的地方,都适用于Windows XP。随书附送的光盘提供了书中涉及的程序源代码。
本书由飞思科技产品研发中心策划并组织编写,同时参与写作的还有温锦山、唐柱鹏、刘鉴澄、张恒、赵蕾等人。书中有三个例子由网友陈经韬(http://www.138soft.com/)提供,在此表示感谢。由于时间仓促,书中难免有不足之处,恳请读者批评指出。如果在阅读本书或使用书中例子的过程中有什么疑问,欢迎与我们联系。
当然,限于作者水平,加之时间仓促,书中不足之处难免,敬请读者批评指正。
飞思科技产品研发中心