书籍详情
深入浅出Windows API程序设计:核心编程篇
作者:王端明 著
出版社:人民邮电出版社
出版时间:2022-07-01
ISBN:9787115571595
定价:¥149.90
购买这本书可以去
内容简介
本书是 Windows API 程序设计的进阶图书,内容包括多线程编程,内存管理,文件、驱动器和目录操作,进程,剪贴板,动态链接库,INI 配置文件和注册表操作,Windows 异常处理,WinSock 网络编程,其他常用Windows API 编程知识,PE 文件格式深入剖析。通过阅读本书,读者可以对 Windows 程序设计有更加深入的认识,并将其应用到实际场景中。本书适合有一定经验的 Windows API 程序开发人员阅读,也可以作为培训学校的教材使用。
作者简介
作者从2008年开始学习Windows API程序设计,精通汇编语言、C/C++和Windows API程序设计,精通Windows环境下的桌面软件开发和加密解密。曾在tb网专门为客户定制开发32/64位Windows桌面软件;对加密解密情有独钟,经常逆向分析各类商业软件,对VMProtect、Safengine等高强加密保护软件的脱壳或内存补丁有深入研究和独到见解;喜欢分析软件安全漏洞,曾在金山和360等网站发表过多篇杀毒软件漏洞分析文章。
目录
第 1章 多线程编程\t1
1.1 使用多线程的必要性\t2
1.2 多线程编程\t5
1.3 线程的终止及其他相关函数\t8
1.4 线程间的通信\t10
1.4.1 全局变量\t11
1.4.2 自定义消息\t11
1.4.3 事件对象\t15
1.4.4 手动和自动重置事件对象\t22
1.5 线程间的同步\t25
1.5.1 用户模式线程同步\t28
1.5.2 内核模式线程同步\t36
第 2章 内存管理\t48
2.1 保护模式的分段与分页管理机制\t50
2.2 获取系统信息与内存状态\t53
2.3 虚拟地址空间管理函数\t56
2.3.1 虚拟地址空间的分配与释放\t57
2.3.2 改变页面保护属性\t60
2.3.3 查询页面信息\t61
2.4 堆管理函数\t62
2.4.1 私有堆的创建和释放\t63
2.4.2 在堆中分配和释放内存块\t64
2.4.3 其他堆管理函数\t67
2.4.4 在C++中使用堆\t68
2.5 其他内存管理函数\t70
第3章 文件、驱动器和目录操作\t72
3.1 基本概念\t73
3.1.1 与硬盘存储有关的几个重要概念\t73
3.1.2 分区、逻辑驱动器、文件系统和卷\t74
3.1.3 文件名、目录、路径和当前目录\t76
3.2 文件操作\t77
3.2.1 创建和打开文件\t77
3.2.2 读写文件\t80
3.2.3 文件指针\t83
3.2.4 文件属性\t85
3.2.5 复制文件\t87
3.2.6 移动文件(目录)、删除文件\t90
3.2.7 无缓冲I/O\t93
3.3 逻辑驱动器和目录\t94
3.3.1 逻辑驱动器操作\t94
3.3.2 目录操作\t96
3.3.3 环境变量\t102
3.3.4 SHFileOperation函数\t106
3.3.5 监视目录变化\t107
3.3.6 获取硬盘序列号\t112
3.3.7 可移动硬盘和U盘监控\t118
3.3.8 获取主板和BIOS序列号\t121
3.4 内存映射文件\t127
3.4.1 内存映射文件相关函数\t128
3.4.2 通过内存映射文件在多个进程间共享数据\t134
3.4.3 使用内存映射文件来处理大型文件\t136
3.5 APC异步过程调用\t137
第4章 进程\t143
4.1 创建进程\t143
4.2 多个进程间共享内核对象\t150
4.3 进程终止\t153
4.4 进程间通信\t154
4.4.1 WM_COPYDATA\t154
4.4.2 管道\t159
4.4.3 邮件槽\t164
4.5 进程枚举\t165
4.5.1 TlHelp32系列函数\t165
4.5.2 EnumProcesses函数\t177
4.5.3 进程环境块PEB\t181
4.6 进程调试\t185
4.6.1 读写其他进程的地址空间\t185
4.6.2 获取一个以暂停模式启动的进程模块基地址\t189
4.6.3 调试API\t193
4.6.4 内存补丁\t199
4.6.5 线程环境\t204
4.7 窗口间谍\t207
4.8 示例:一个程序退出时删除自身\t213
第5章 剪贴板\t215
5.1 剪贴板常用函数与消息\t215
5.1.1 基本剪贴板函数\t215
5.1.2 剪贴板相关的消息\t218
5.2 使用剪贴板进行进程间通信\t220
5.2.1 Clipboard写入端\t221
5.2.2 Clipboard读取端\t226
5.3 监视剪贴板内容变化\t230
5.3.1 相关函数和消息\t230
5.3.2 剪贴板监视程序ClipboardMonitor\t232
5.3.3 监视剪贴板的新方法\t235
第6章 动态链接库\t236
6.1 静态链接库\t236
6.2 动态链接库\t237
6.2.1 创建DLL项目\t238
6.2.2 在可执行模块中使用DLL\t244
6.2.3 入口点函数DllMain\t246
6.2.4 延迟加载DLL\t248
6.3 线程局部存储\t252
6.3.1 动态TLS\t253
6.3.2 静态TLS\t256
6.4 Windows钩子\t258
6.5 在同一个可执行文件的多个实例间共享变量\t265
6.6 注入DLL\t267
6.6.1 通过Windows钩子注入DLL\t267
6.6.2 通过创建远程线程注入DLL\t276
6.6.3 通过函数转发器机制注入DLL\t283
6.6.4 通过CreateProcess函数写入ShellCode注入DLL\t290
6.6.5 通过调试器写入ShellCode注入DLL\t293
6.6.6 通过APC机制注入DLL\t293
6.6.7 通过输入法机制注入DLL\t293
6.7 Shadow API技术\t299
6.8 Hook API技术\t304
6.8.1 随机数\t304
6.8.2 通过远程线程注入DLL实现API Hook\t306
6.8.3 通过全局消息钩子注入DLL实现进程隐藏\t322
第7章 INI配置文件和注册表操作\t328
7.1 INI配置文件\t329
7.1.1 键值对的创建、更新与删除\t329
7.1.2 获取键值\t330
7.1.3 管理小节\t331
7.2 注册表操作\t335
7.2.1 子键的打开、关闭、创建和删除\t337
7.2.2 键值项的创建或设置、查询和删除\t340
7.2.3 子键、键值项的枚举\t344
7.2.4 注册表应用:程序开机自动运行设置文件关联\t347
第8章 Windows异常处理\t349
8.1 结构化异常处理\t349
8.1.1 try-except语句\t349
8.1.2 GetExceptionCode和GetExceptionInformation\t354
8.1.3 利用结构化异常处理进行反调试\t358
8.1.4 软件异常\t360
8.2 向量化异常处理(全局)\t361
8.2.1 向量化异常处理简介\t361
8.2.2 利用向量化异常处理实现基于断点的API Hook\t362
8.3 顶层未处理异常过滤(全局)\t367
8.4 向量化继续处理(全局)\t368
第9章 WinSock网络编程\t374
9.1 OSI参考模型和TCP/IP协议簇\t374
9.1.1 OSI参考模型\t374
9.1.2 TCP/IP协议簇\t377
9.1.3 套接字网络编程接口\t379
9.2 IP地址、网络字节顺序和WinSock的地址表示方式\t380
9.2.1 IP地址和端口\t380
9.2.2 网络字节顺序\t381
9.2.3 WinSock的地址表示方式\t381
9.3 WinSock网络编程\t383
9.3.1 TCP网络编程的一般步骤\t384
9.3.2 TCP服务器程序\t390
9.3.3 TCP客户端程序\t395
9.3.4 UDP编程\t399
9.3.5 P2P技术\t402
9.4 WinSock异步I/O模型\t403
9.4.1 阻塞模式下的多线程多客户端套接字编程\t404
9.4.2 select模型\t414
9.4.3 WSAAsyncSelect模型\t419
9.4.4 WSAEventSelect模型\t424
9.4.5 Overlapped模型\t431
9.4.6 完成端口模型\t447
9.4.7 深入介绍I/O完成端口\t456
9.4.8 深入介绍线程池\t463
9.5 IPHelper API及其他函数\t474
9.5.1 获取本地计算机的网络适配器信息\t475
9.5.2 其他函数\t478
9.5.3 校对时间程序\t480
9.6 系统网络连接的启用和禁用\t482
第 10章 其他常用Windows API编程知识\t489
10.1 快捷方式\t489
10.2 程序开机自动启动\t491
10.2.1 将程序的快捷方式写入开机自动启动程序目录\t491
10.2.2 创建任务计划实现开机自动启动\t493
10.2.3 创建系统服务实现开机自动启动\t493
10.3 用户账户控制\t508
10.3.1 自动提示用户提升权限\t510
10.3.2 利用ShellExecuteEx函数以管理员权限启动程序\t512
10.3.3 绕过UAC提权提示以管理员权限运行\t513
10.4 用户界面特权隔离\t514
10.5 窗口的查找与枚举\t515
10.6 实现任务栏通知区域图标与气泡通知\t517
第 11章 PE文件格式深入剖析\t520
11.1 DOS头(DOS MZ头和DOSStub块)\t521
11.2 PE头(IMAGE_NT_HEADER32结构)\t522
11.3 节表(节区信息结构IMAGE_SECTION_HEADER列表)\t531
11.4 64位可执行文件格式PE32+\t537
11.5 导入表\t538
11.6 导出表\t547
11.7 重定位表\t552
11.8 模拟PE加载器直接加载可执行文件到进程内存中执行\t555
11.9 线程局部存储表\t563
11.10 加载配置信息表\t568
11.11 资源表\t569
11.12 延迟加载导入表\t577
11.13 校验和与CRC\t577
11.14 64位程序中如何书写汇编代码(以获取CPUID为例)\t580
11.15 Detours-master库\t583
11.15.1 注入DLL的编写\t583
11.15.2 将注入DLL加载到目标进程中\t586
11.15.3 编辑可执行文件\t591
11.16 通过修改模块导入表中的IAT项来Hook API\t592
1.1 使用多线程的必要性\t2
1.2 多线程编程\t5
1.3 线程的终止及其他相关函数\t8
1.4 线程间的通信\t10
1.4.1 全局变量\t11
1.4.2 自定义消息\t11
1.4.3 事件对象\t15
1.4.4 手动和自动重置事件对象\t22
1.5 线程间的同步\t25
1.5.1 用户模式线程同步\t28
1.5.2 内核模式线程同步\t36
第 2章 内存管理\t48
2.1 保护模式的分段与分页管理机制\t50
2.2 获取系统信息与内存状态\t53
2.3 虚拟地址空间管理函数\t56
2.3.1 虚拟地址空间的分配与释放\t57
2.3.2 改变页面保护属性\t60
2.3.3 查询页面信息\t61
2.4 堆管理函数\t62
2.4.1 私有堆的创建和释放\t63
2.4.2 在堆中分配和释放内存块\t64
2.4.3 其他堆管理函数\t67
2.4.4 在C++中使用堆\t68
2.5 其他内存管理函数\t70
第3章 文件、驱动器和目录操作\t72
3.1 基本概念\t73
3.1.1 与硬盘存储有关的几个重要概念\t73
3.1.2 分区、逻辑驱动器、文件系统和卷\t74
3.1.3 文件名、目录、路径和当前目录\t76
3.2 文件操作\t77
3.2.1 创建和打开文件\t77
3.2.2 读写文件\t80
3.2.3 文件指针\t83
3.2.4 文件属性\t85
3.2.5 复制文件\t87
3.2.6 移动文件(目录)、删除文件\t90
3.2.7 无缓冲I/O\t93
3.3 逻辑驱动器和目录\t94
3.3.1 逻辑驱动器操作\t94
3.3.2 目录操作\t96
3.3.3 环境变量\t102
3.3.4 SHFileOperation函数\t106
3.3.5 监视目录变化\t107
3.3.6 获取硬盘序列号\t112
3.3.7 可移动硬盘和U盘监控\t118
3.3.8 获取主板和BIOS序列号\t121
3.4 内存映射文件\t127
3.4.1 内存映射文件相关函数\t128
3.4.2 通过内存映射文件在多个进程间共享数据\t134
3.4.3 使用内存映射文件来处理大型文件\t136
3.5 APC异步过程调用\t137
第4章 进程\t143
4.1 创建进程\t143
4.2 多个进程间共享内核对象\t150
4.3 进程终止\t153
4.4 进程间通信\t154
4.4.1 WM_COPYDATA\t154
4.4.2 管道\t159
4.4.3 邮件槽\t164
4.5 进程枚举\t165
4.5.1 TlHelp32系列函数\t165
4.5.2 EnumProcesses函数\t177
4.5.3 进程环境块PEB\t181
4.6 进程调试\t185
4.6.1 读写其他进程的地址空间\t185
4.6.2 获取一个以暂停模式启动的进程模块基地址\t189
4.6.3 调试API\t193
4.6.4 内存补丁\t199
4.6.5 线程环境\t204
4.7 窗口间谍\t207
4.8 示例:一个程序退出时删除自身\t213
第5章 剪贴板\t215
5.1 剪贴板常用函数与消息\t215
5.1.1 基本剪贴板函数\t215
5.1.2 剪贴板相关的消息\t218
5.2 使用剪贴板进行进程间通信\t220
5.2.1 Clipboard写入端\t221
5.2.2 Clipboard读取端\t226
5.3 监视剪贴板内容变化\t230
5.3.1 相关函数和消息\t230
5.3.2 剪贴板监视程序ClipboardMonitor\t232
5.3.3 监视剪贴板的新方法\t235
第6章 动态链接库\t236
6.1 静态链接库\t236
6.2 动态链接库\t237
6.2.1 创建DLL项目\t238
6.2.2 在可执行模块中使用DLL\t244
6.2.3 入口点函数DllMain\t246
6.2.4 延迟加载DLL\t248
6.3 线程局部存储\t252
6.3.1 动态TLS\t253
6.3.2 静态TLS\t256
6.4 Windows钩子\t258
6.5 在同一个可执行文件的多个实例间共享变量\t265
6.6 注入DLL\t267
6.6.1 通过Windows钩子注入DLL\t267
6.6.2 通过创建远程线程注入DLL\t276
6.6.3 通过函数转发器机制注入DLL\t283
6.6.4 通过CreateProcess函数写入ShellCode注入DLL\t290
6.6.5 通过调试器写入ShellCode注入DLL\t293
6.6.6 通过APC机制注入DLL\t293
6.6.7 通过输入法机制注入DLL\t293
6.7 Shadow API技术\t299
6.8 Hook API技术\t304
6.8.1 随机数\t304
6.8.2 通过远程线程注入DLL实现API Hook\t306
6.8.3 通过全局消息钩子注入DLL实现进程隐藏\t322
第7章 INI配置文件和注册表操作\t328
7.1 INI配置文件\t329
7.1.1 键值对的创建、更新与删除\t329
7.1.2 获取键值\t330
7.1.3 管理小节\t331
7.2 注册表操作\t335
7.2.1 子键的打开、关闭、创建和删除\t337
7.2.2 键值项的创建或设置、查询和删除\t340
7.2.3 子键、键值项的枚举\t344
7.2.4 注册表应用:程序开机自动运行设置文件关联\t347
第8章 Windows异常处理\t349
8.1 结构化异常处理\t349
8.1.1 try-except语句\t349
8.1.2 GetExceptionCode和GetExceptionInformation\t354
8.1.3 利用结构化异常处理进行反调试\t358
8.1.4 软件异常\t360
8.2 向量化异常处理(全局)\t361
8.2.1 向量化异常处理简介\t361
8.2.2 利用向量化异常处理实现基于断点的API Hook\t362
8.3 顶层未处理异常过滤(全局)\t367
8.4 向量化继续处理(全局)\t368
第9章 WinSock网络编程\t374
9.1 OSI参考模型和TCP/IP协议簇\t374
9.1.1 OSI参考模型\t374
9.1.2 TCP/IP协议簇\t377
9.1.3 套接字网络编程接口\t379
9.2 IP地址、网络字节顺序和WinSock的地址表示方式\t380
9.2.1 IP地址和端口\t380
9.2.2 网络字节顺序\t381
9.2.3 WinSock的地址表示方式\t381
9.3 WinSock网络编程\t383
9.3.1 TCP网络编程的一般步骤\t384
9.3.2 TCP服务器程序\t390
9.3.3 TCP客户端程序\t395
9.3.4 UDP编程\t399
9.3.5 P2P技术\t402
9.4 WinSock异步I/O模型\t403
9.4.1 阻塞模式下的多线程多客户端套接字编程\t404
9.4.2 select模型\t414
9.4.3 WSAAsyncSelect模型\t419
9.4.4 WSAEventSelect模型\t424
9.4.5 Overlapped模型\t431
9.4.6 完成端口模型\t447
9.4.7 深入介绍I/O完成端口\t456
9.4.8 深入介绍线程池\t463
9.5 IPHelper API及其他函数\t474
9.5.1 获取本地计算机的网络适配器信息\t475
9.5.2 其他函数\t478
9.5.3 校对时间程序\t480
9.6 系统网络连接的启用和禁用\t482
第 10章 其他常用Windows API编程知识\t489
10.1 快捷方式\t489
10.2 程序开机自动启动\t491
10.2.1 将程序的快捷方式写入开机自动启动程序目录\t491
10.2.2 创建任务计划实现开机自动启动\t493
10.2.3 创建系统服务实现开机自动启动\t493
10.3 用户账户控制\t508
10.3.1 自动提示用户提升权限\t510
10.3.2 利用ShellExecuteEx函数以管理员权限启动程序\t512
10.3.3 绕过UAC提权提示以管理员权限运行\t513
10.4 用户界面特权隔离\t514
10.5 窗口的查找与枚举\t515
10.6 实现任务栏通知区域图标与气泡通知\t517
第 11章 PE文件格式深入剖析\t520
11.1 DOS头(DOS MZ头和DOSStub块)\t521
11.2 PE头(IMAGE_NT_HEADER32结构)\t522
11.3 节表(节区信息结构IMAGE_SECTION_HEADER列表)\t531
11.4 64位可执行文件格式PE32+\t537
11.5 导入表\t538
11.6 导出表\t547
11.7 重定位表\t552
11.8 模拟PE加载器直接加载可执行文件到进程内存中执行\t555
11.9 线程局部存储表\t563
11.10 加载配置信息表\t568
11.11 资源表\t569
11.12 延迟加载导入表\t577
11.13 校验和与CRC\t577
11.14 64位程序中如何书写汇编代码(以获取CPUID为例)\t580
11.15 Detours-master库\t583
11.15.1 注入DLL的编写\t583
11.15.2 将注入DLL加载到目标进程中\t586
11.15.3 编辑可执行文件\t591
11.16 通过修改模块导入表中的IAT项来Hook API\t592
猜您喜欢