深入淺出 Windows API 程序設計:核心編程篇

王端明

  • 深入淺出 Windows API 程序設計:核心編程篇-preview-1
  • 深入淺出 Windows API 程序設計:核心編程篇-preview-2
深入淺出 Windows API 程序設計:核心編程篇-preview-1

買這商品的人也買了...

商品描述

本書是 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章 多線程編程 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/O 93

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_COPYDATA 154

4.4.2 管道 159

4.4.3 郵件槽 164

4.5 進程枚舉 165

4.5.1 TlHelp32系列函數 165

4.5.2 EnumProcesses函數 177

4.5.3 進程環境塊PEB 181

4.6 進程調試 185

4.6.1 讀寫其他進程的地址空間 185

4.6.2 獲取一個以暫停模式啟動的進程模塊基地址 189

4.6.3 調試API 193

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 剪貼板監視程序ClipboardMonitor 232

5.3.3 監視剪貼板的新方法 235

第6章 動態鏈接庫 236

6.1 靜態鏈接庫 236

6.2 動態鏈接庫 237

6.2.1 創建DLL項目 238

6.2.2 在可執行模塊中使用DLL 244

6.2.3 入口點函數DllMain 246

6.2.4 延遲加載DLL 248

6.3 線程局部存儲 252

6.3.1 動態TLS 253

6.3.2 靜態TLS 256

6.4 Windows鉤子 258

6.5 在同一個可執行文件的多個實例間共享變量 265

6.6 註入DLL 267

6.6.1 通過Windows鉤子註入DLL 267

6.6.2 通過創建遠程線程註入DLL 276

6.6.3 通過函數轉發器機制註入DLL 283

6.6.4 通過CreateProcess函數寫入ShellCode註入DLL 290

6.6.5 通過調試器寫入ShellCode註入DLL 293

6.6.6 通過APC機制註入DLL 293

6.6.7 通過輸入法機制註入DLL 293

6.7 Shadow API技術 299

6.8 Hook API技術 304

6.8.1 隨機數 304

6.8.2 通過遠程線程註入DLL實現API Hook 306

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和GetExceptionInformation 354

8.1.3 利用結構化異常處理進行反調試 358

8.1.4 軟件異常 360

8.2 向量化異常處理(全局) 361

8.2.1 向量化異常處理簡介 361

8.2.2 利用向量化異常處理實現基於斷點的API Hook 362

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 校驗和與CRC 577

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 API 592