深入浅出Windows API程序设计:核心编程篇
第 1章 多线程编程1
1.1 使用多线程的必要性2
1.2 多线程编程5
1.3 线程的终止及其他相关函数8
1.4 线程间的通信10
1.4.1 全局变量11
1.4.2 自定义消息11
1.4.3 事件对象15
1.4.4 手动和自动重置事件对象22
1.5 线程间的同步25
查看完整
1.1 使用多线程的必要性2
1.2 多线程编程5
1.3 线程的终止及其他相关函数8
1.4 线程间的通信10
1.4.1 全局变量11
1.4.2 自定义消息11
1.4.3 事件对象15
1.4.4 手动和自动重置事件对象22
1.5 线程间的同步25
查看完整
作者从2008年开始学习Windows API程序设计,精通汇编语言、C C 和Windows API程序设计,精通Windows环境下的桌面软件开发和加密解密。曾在tb网专门为客户定制开发32 64位Windows桌面软件;对加密解密情有独钟,经常逆向分析各类商业软件,对VMProtect、Safengine等高强加密保护软件的脱壳或内存补丁有深入研究和独到见解;喜欢分析软件安全漏洞,曾在金山和360等网站发表过多篇杀毒软件漏洞分析文章。
本书是 Windows API 程序设计的进阶图书,内容包括多线程编程,内存管理,文件、驱动器和目录操作,进程,剪贴板,动态链接库,INI 配置文件和注册表操作,Windows 异常处理,WinSock 网络编程,其他常用Windows API 编程知识,PE 文件格式深入剖析。通过阅读本书,读者可以对 Windows 程序设计有更加深入的认识,并将其应用到实际场景中。
本书适合有一定经验的 Windows API 程序开发人员阅读,也可以作为培训学校的教材使用。
本书适合有一定经验的 Windows API 程序开发人员阅读,也可以作为培训学校的教材使用。
第 1章 多线程编程1
1.1 使用多线程的必要性2
1.2 多线程编程5
1.3 线程的终止及其他相关函数8
1.4 线程间的通信10
1.4.1 全局变量11
1.4.2 自定义消息11
1.4.3 事件对象15
1.4.4 手动和自动重置事件对象22
1.5 线程间的同步25
1.5.1 用户模式线程同步28
1.5.2 内核模式线程同步36
第 2章 内存管理48
2.1 保护模式的分段与分页管理机制50
2.2 获取系统信息与内存状态53
2.3 虚拟地址空间管理函数56
2.3.1 虚拟地址空间的分配与释放57
2.3.2 改变页面保护属性60
2.3.3 查询页面信息61
2.4 堆管理函数62
2.4.1 私有堆的创建和释放63
2.4.2 在堆中分配和释放内存块64
2.4.3 其他堆管理函数67
2.4.4 在C 中使用堆68
2.5 其他内存管理函数70
第3章 文件、驱动器和目录操作72
3.1 基本概念73
3.1.1 与硬盘存储有关的几个重要概念73
3.1.2 分区、逻辑驱动器、文件系统和卷74
3.1.3 文件名、目录、路径和当前目录76
3.2 文件操作77
3.2.1 创建和打开文件77
3.2.2 读写文件80
3.2.3 文件指针83
3.2.4 文件属性85
3.2.5 复制文件87
3.2.6 移动文件(目录)、删除文件90
3.2.7 无缓冲I O93
3.3 逻辑驱动器和目录94
3.3.1 逻辑驱动器操作94
3.3.2 目录操作96
3.3.3 环境变量102
3.3.4 SHFileOperation函数106
3.3.5 监视目录变化107
3.3.6 获取硬盘序列号112
3.3.7 可移动硬盘和U盘监控118
3.3.8 获取主板和BIOS序列号121
3.4 内存映射文件127
3.4.1 内存映射文件相关函数128
3.4.2 通过内存映射文件在多个进程间共享数据134
3.4.3 使用内存映射文件来处理大型文件136
3.5 APC异步过程调用137
第4章 进程143
4.1 创建进程143
4.2 多个进程间共享内核对象150
4.3 进程终止153
4.4 进程间通信154
4.4.1 WM_COPYDATA154
4.4.2 管道159
4.4.3 邮件槽164
4.5 进程枚举165
4.5.1 TlHelp32系列函数165
4.5.2 EnumProcesses函数177
4.5.3 进程环境块PEB181
4.6 进程调试185
4.6.1 读写其他进程的地址空间185
4.6.2 获取一个以暂停模式启动的进程模块基地址189
4.6.3 调试API193
4.6.4 内存补丁199
4.6.5 线程环境204
4.7 窗口间谍207
4.8 示例:一个程序退出时删除自身213
第5章 剪贴板215
5.1 剪贴板常用函数与消息215
5.1.1 基本剪贴板函数215
5.1.2 剪贴板相关的消息218
5.2 使用剪贴板进行进程间通信220
5.2.1 Clipboard写入端221
5.2.2 Clipboard读取端226
5.3 监视剪贴板内容变化230
5.3.1 相关函数和消息230
5.3.2 剪贴板监视程序ClipboardMonitor232
5.3.3 监视剪贴板的新方法235
第6章 动态链接库236
6.1 静态链接库236
6.2 动态链接库237
6.2.1 创建DLL项目238
6.2.2 在可执行模块中使用DLL244
6.2.3 入口点函数DllMain246
6.2.4 延迟加载DLL248
6.3 线程局部存储252
6.3.1 动态TLS253
6.3.2 静态TLS256
6.4 Windows钩子258
6.5 在同一个可执行文件的多个实例间共享变量265
6.6 注入DLL267
6.6.1 通过Windows钩子注入DLL267
6.6.2 通过创建远程线程注入DLL276
6.6.3 通过函数转发器机制注入DLL283
6.6.4 通过CreateProcess函数写入ShellCode注入DLL290
6.6.5 通过调试器写入ShellCode注入DLL293
6.6.6 通过APC机制注入DLL293
6.6.7 通过输入法机制注入DLL293
6.7 Shadow API技术299
6.8 Hook API技术304
6.8.1 随机数304
6.8.2 通过远程线程注入DLL实现API Hook306
6.8.3 通过全局消息钩子注入DLL实现进程隐藏322
第7章 INI配置文件和注册表操作328
7.1 INI配置文件329
7.1.1 键值对的创建、更新与删除329
7.1.2 获取键值330
7.1.3 管理小节331
7.2 注册表操作335
7.2.1 子键的打开、关闭、创建和删除337
7.2.2 键值项的创建或设置、查询和删除340
7.2.3 子键、键值项的枚举344
7.2.4 注册表应用:程序开机自动运行设置文件关联347
第8章 Windows异常处理349
8.1 结构化异常处理349
8.1.1 try-except语句349
8.1.2 GetExceptionCode和GetExceptionInformation354
8.1.3 利用结构化异常处理进行反调试358
8.1.4 软件异常360
8.2 向量化异常处理(全局)361
8.2.1 向量化异常处理简介361
8.2.2 利用向量化异常处理实现基于断点的API Hook362
8.3 顶层未处理异常过滤(全局)367
8.4 向量化继续处理(全局)368
第9章 WinSock网络编程374
9.1 OSI参考模型和TCP IP协议簇374
9.1.1 OSI参考模型374
9.1.2 TCP IP协议簇377
9.1.3 套接字网络编程接口379
9.2 IP地址、网络字节顺序和WinSock的地址表示方式380
9.2.1 IP地址和端口380
9.2.2 网络字节顺序381
9.2.3 WinSock的地址表示方式381
9.3 WinSock网络编程383
9.3.1 TCP网络编程的一般步骤384
9.3.2 TCP服务器程序390
9.3.3 TCP客户端程序395
9.3.4 UDP编程399
9.3.5 P2P技术402
9.4 WinSock异步I O模型403
9.4.1 阻塞模式下的多线程多客户端套接字编程404
9.4.2 select模型414
9.4.3 WSAAsyncSelect模型419
9.4.4 WSAEventSelect模型424
9.4.5 Overlapped模型431
9.4.6 完成端口模型447
9.4.7 深入介绍I O完成端口456
9.4.8 深入介绍线程池463
9.5 IPHelper API及其他函数474
9.5.1 获取本地计算机的网络适配器信息475
9.5.2 其他函数478
9.5.3 校对时间程序480
9.6 系统网络连接的启用和禁用482
第 10章 其他常用Windows API编程知识489
10.1 快捷方式489
10.2 程序开机自动启动491
10.2.1 将程序的快捷方式写入开机自动启动程序目录491
10.2.2 创建任务计划实现开机自动启动493
10.2.3 创建系统服务实现开机自动启动493
10.3 用户账户控制508
10.3.1 自动提示用户提升权限510
10.3.2 利用ShellExecuteEx函数以管理员权限启动程序512
10.3.3 绕过UAC提权提示以管理员权限运行513
10.4 用户界面特权隔离514
10.5 窗口的查找与枚举515
10.6 实现任务栏通知区域图标与气泡通知517
第 11章 PE文件格式深入剖析520
11.1 DOS头(DOS MZ头和DOSStub块)521
11.2 PE头(IMAGE_NT_HEADER32结构)522
11.3 节表(节区信息结构IMAGE_SECTION_HEADER列表)531
11.4 64位可执行文件格式PE32 537
11.5 导入表538
11.6 导出表547
11.7 重定位表552
11.8 模拟PE加载器直接加载可执行文件到进程内存中执行555
11.9 线程局部存储表563
11.10 加载配置信息表568
11.11 资源表569
11.12 延迟加载导入表577
11.13 校验和与CRC577
11.14 64位程序中如何书写汇编代码(以获取CPUID为例)580
11.15 Detours-master库583
11.15.1 注入DLL的编写583
11.15.2 将注入DLL加载到目标进程中586
11.15.3 编辑可执行文件591
11.16 通过修改模块导入表中的IAT项来Hook API592
^ 收 起
1.1 使用多线程的必要性2
1.2 多线程编程5
1.3 线程的终止及其他相关函数8
1.4 线程间的通信10
1.4.1 全局变量11
1.4.2 自定义消息11
1.4.3 事件对象15
1.4.4 手动和自动重置事件对象22
1.5 线程间的同步25
1.5.1 用户模式线程同步28
1.5.2 内核模式线程同步36
第 2章 内存管理48
2.1 保护模式的分段与分页管理机制50
2.2 获取系统信息与内存状态53
2.3 虚拟地址空间管理函数56
2.3.1 虚拟地址空间的分配与释放57
2.3.2 改变页面保护属性60
2.3.3 查询页面信息61
2.4 堆管理函数62
2.4.1 私有堆的创建和释放63
2.4.2 在堆中分配和释放内存块64
2.4.3 其他堆管理函数67
2.4.4 在C 中使用堆68
2.5 其他内存管理函数70
第3章 文件、驱动器和目录操作72
3.1 基本概念73
3.1.1 与硬盘存储有关的几个重要概念73
3.1.2 分区、逻辑驱动器、文件系统和卷74
3.1.3 文件名、目录、路径和当前目录76
3.2 文件操作77
3.2.1 创建和打开文件77
3.2.2 读写文件80
3.2.3 文件指针83
3.2.4 文件属性85
3.2.5 复制文件87
3.2.6 移动文件(目录)、删除文件90
3.2.7 无缓冲I O93
3.3 逻辑驱动器和目录94
3.3.1 逻辑驱动器操作94
3.3.2 目录操作96
3.3.3 环境变量102
3.3.4 SHFileOperation函数106
3.3.5 监视目录变化107
3.3.6 获取硬盘序列号112
3.3.7 可移动硬盘和U盘监控118
3.3.8 获取主板和BIOS序列号121
3.4 内存映射文件127
3.4.1 内存映射文件相关函数128
3.4.2 通过内存映射文件在多个进程间共享数据134
3.4.3 使用内存映射文件来处理大型文件136
3.5 APC异步过程调用137
第4章 进程143
4.1 创建进程143
4.2 多个进程间共享内核对象150
4.3 进程终止153
4.4 进程间通信154
4.4.1 WM_COPYDATA154
4.4.2 管道159
4.4.3 邮件槽164
4.5 进程枚举165
4.5.1 TlHelp32系列函数165
4.5.2 EnumProcesses函数177
4.5.3 进程环境块PEB181
4.6 进程调试185
4.6.1 读写其他进程的地址空间185
4.6.2 获取一个以暂停模式启动的进程模块基地址189
4.6.3 调试API193
4.6.4 内存补丁199
4.6.5 线程环境204
4.7 窗口间谍207
4.8 示例:一个程序退出时删除自身213
第5章 剪贴板215
5.1 剪贴板常用函数与消息215
5.1.1 基本剪贴板函数215
5.1.2 剪贴板相关的消息218
5.2 使用剪贴板进行进程间通信220
5.2.1 Clipboard写入端221
5.2.2 Clipboard读取端226
5.3 监视剪贴板内容变化230
5.3.1 相关函数和消息230
5.3.2 剪贴板监视程序ClipboardMonitor232
5.3.3 监视剪贴板的新方法235
第6章 动态链接库236
6.1 静态链接库236
6.2 动态链接库237
6.2.1 创建DLL项目238
6.2.2 在可执行模块中使用DLL244
6.2.3 入口点函数DllMain246
6.2.4 延迟加载DLL248
6.3 线程局部存储252
6.3.1 动态TLS253
6.3.2 静态TLS256
6.4 Windows钩子258
6.5 在同一个可执行文件的多个实例间共享变量265
6.6 注入DLL267
6.6.1 通过Windows钩子注入DLL267
6.6.2 通过创建远程线程注入DLL276
6.6.3 通过函数转发器机制注入DLL283
6.6.4 通过CreateProcess函数写入ShellCode注入DLL290
6.6.5 通过调试器写入ShellCode注入DLL293
6.6.6 通过APC机制注入DLL293
6.6.7 通过输入法机制注入DLL293
6.7 Shadow API技术299
6.8 Hook API技术304
6.8.1 随机数304
6.8.2 通过远程线程注入DLL实现API Hook306
6.8.3 通过全局消息钩子注入DLL实现进程隐藏322
第7章 INI配置文件和注册表操作328
7.1 INI配置文件329
7.1.1 键值对的创建、更新与删除329
7.1.2 获取键值330
7.1.3 管理小节331
7.2 注册表操作335
7.2.1 子键的打开、关闭、创建和删除337
7.2.2 键值项的创建或设置、查询和删除340
7.2.3 子键、键值项的枚举344
7.2.4 注册表应用:程序开机自动运行设置文件关联347
第8章 Windows异常处理349
8.1 结构化异常处理349
8.1.1 try-except语句349
8.1.2 GetExceptionCode和GetExceptionInformation354
8.1.3 利用结构化异常处理进行反调试358
8.1.4 软件异常360
8.2 向量化异常处理(全局)361
8.2.1 向量化异常处理简介361
8.2.2 利用向量化异常处理实现基于断点的API Hook362
8.3 顶层未处理异常过滤(全局)367
8.4 向量化继续处理(全局)368
第9章 WinSock网络编程374
9.1 OSI参考模型和TCP IP协议簇374
9.1.1 OSI参考模型374
9.1.2 TCP IP协议簇377
9.1.3 套接字网络编程接口379
9.2 IP地址、网络字节顺序和WinSock的地址表示方式380
9.2.1 IP地址和端口380
9.2.2 网络字节顺序381
9.2.3 WinSock的地址表示方式381
9.3 WinSock网络编程383
9.3.1 TCP网络编程的一般步骤384
9.3.2 TCP服务器程序390
9.3.3 TCP客户端程序395
9.3.4 UDP编程399
9.3.5 P2P技术402
9.4 WinSock异步I O模型403
9.4.1 阻塞模式下的多线程多客户端套接字编程404
9.4.2 select模型414
9.4.3 WSAAsyncSelect模型419
9.4.4 WSAEventSelect模型424
9.4.5 Overlapped模型431
9.4.6 完成端口模型447
9.4.7 深入介绍I O完成端口456
9.4.8 深入介绍线程池463
9.5 IPHelper API及其他函数474
9.5.1 获取本地计算机的网络适配器信息475
9.5.2 其他函数478
9.5.3 校对时间程序480
9.6 系统网络连接的启用和禁用482
第 10章 其他常用Windows API编程知识489
10.1 快捷方式489
10.2 程序开机自动启动491
10.2.1 将程序的快捷方式写入开机自动启动程序目录491
10.2.2 创建任务计划实现开机自动启动493
10.2.3 创建系统服务实现开机自动启动493
10.3 用户账户控制508
10.3.1 自动提示用户提升权限510
10.3.2 利用ShellExecuteEx函数以管理员权限启动程序512
10.3.3 绕过UAC提权提示以管理员权限运行513
10.4 用户界面特权隔离514
10.5 窗口的查找与枚举515
10.6 实现任务栏通知区域图标与气泡通知517
第 11章 PE文件格式深入剖析520
11.1 DOS头(DOS MZ头和DOSStub块)521
11.2 PE头(IMAGE_NT_HEADER32结构)522
11.3 节表(节区信息结构IMAGE_SECTION_HEADER列表)531
11.4 64位可执行文件格式PE32 537
11.5 导入表538
11.6 导出表547
11.7 重定位表552
11.8 模拟PE加载器直接加载可执行文件到进程内存中执行555
11.9 线程局部存储表563
11.10 加载配置信息表568
11.11 资源表569
11.12 延迟加载导入表577
11.13 校验和与CRC577
11.14 64位程序中如何书写汇编代码(以获取CPUID为例)580
11.15 Detours-master库583
11.15.1 注入DLL的编写583
11.15.2 将注入DLL加载到目标进程中586
11.15.3 编辑可执行文件591
11.16 通过修改模块导入表中的IAT项来Hook API592
^ 收 起
作者从2008年开始学习Windows API程序设计,精通汇编语言、C C 和Windows API程序设计,精通Windows环境下的桌面软件开发和加密解密。曾在tb网专门为客户定制开发32 64位Windows桌面软件;对加密解密情有独钟,经常逆向分析各类商业软件,对VMProtect、Safengine等高强加密保护软件的脱壳或内存补丁有深入研究和独到见解;喜欢分析软件安全漏洞,曾在金山和360等网站发表过多篇杀毒软件漏洞分析文章。
本书是 Windows API 程序设计的进阶图书,内容包括多线程编程,内存管理,文件、驱动器和目录操作,进程,剪贴板,动态链接库,INI 配置文件和注册表操作,Windows 异常处理,WinSock 网络编程,其他常用Windows API 编程知识,PE 文件格式深入剖析。通过阅读本书,读者可以对 Windows 程序设计有更加深入的认识,并将其应用到实际场景中。
本书适合有一定经验的 Windows API 程序开发人员阅读,也可以作为培训学校的教材使用。
本书适合有一定经验的 Windows API 程序开发人员阅读,也可以作为培训学校的教材使用。
比价列表