冀雲編著的《C++黑客編程揭秘與防範》旨在通過簡單的語法知識及常用的系統函式編程,完成一些有特定功能的安全工具,讓讀者對系統知識等各方面有一個全面的了解,並且在筆者的帶領下一步步完成書中的實例。《C++黑客編程揭秘與防範》主要內容為:第1章了解黑客編程,主要講解了VC(Visual C++的縮寫)和Windwos下安全編程方面的基礎知識。第2章從剖析簡單的木馬說起,講解有關的網路編程和協定知識。第3章Windows套用編程基礎,講解API編程的技術。第4章加密與解密,講解PE等加密有關的知識。第5章HOOK編程,講解了與鉤子有關的知識。第6章黑客編程剖析,剖析了病毒的原理和攻防技術,以及安全工具的開發。第7章最後的旅程——簡單驅動開發及逆向。 《C++黑客編程揭秘與防範》適合網路安全人員、黑客愛好者,以及相關的程式設計師閱讀。
基本介紹
- 書名:C++黑客編程揭秘與防範
- 類型:計算機與網際網路
- 出版日期:2012年6月1日
- 語種:簡體中文
- ISBN:9787115280640
- 品牌:人民郵電出版社
- 作者:冀雲
- 出版社:人民郵電出版社
- 頁數:265頁
- 開本:16
- 定價:39.00
內容簡介,圖書目錄,
內容簡介
1、講解windows安全和網路編程知識;
2、講解核心編程以及軟體逆向知識;
2、講解核心編程以及軟體逆向知識;
圖書目錄
第1章 黑客編程入門 1
1.1 程式語言和開發環境的選擇 1
1.1.1 何為SDK、API和MFC 2
1.1.2 VC6和SDK的配置 2
1.2 應用程式的調試 4
1.2.1 編寫我們的第一個程式 4
1.2.2 用VC6調試第一個程式 6
1.2.3 專業的應用程式調試工具——OllyDbg 8
1.3 簡單API的介紹 9
1.3.1 複製自身程式到Windows目錄和系統目錄下 9
1.3.2 獲得系統的相關信息 11
1.3.3 Debug和Release的編譯方式 13
1.3.4 查看函式定義 14
1.4 總結 15
第2章 木馬開發剖析 16
2.1 網路通信基礎 16
2.1.1 IP位址的作用與分類 16
2.1.2 連線埠的作用與分類 17
2.2 網路編程基礎知識 17
2.2.1 通信模型 17
2.2.2 Winsock 18
2.2.3 Winsock的相關函式 18
2.2.4 位元組順序 21
2.3 簡單的通信程式 22
2.3.1 基於TCP協定的“HelloWorld!” 22
2.3.2 基於UDP協定的“HelloWorld!” 24
2.4 實現一個C/S模式的簡單木馬 25
2.4.1 木馬伺服器端的實現 25
2.4.2 木馬客戶端的實現 28
2.5 總結 29
第3章 Windows套用編程基礎 30
3.1 檔案 30
3.1.1 打開檔案 30
3.1.2 檔案操作 31
3.2 AutoRun免疫程式的編寫 32
3.2.1 AutoRun免疫原理 33
3.2.2 AutoRun免疫程式的代碼實現 33
3.2.3 界面設定 33
3.2.4 代碼相關部分 34
3.3 註冊表操作 35
3.3.1 註冊表 35
3.3.2 與註冊表操作相關的常用API函式 36
3.3.3 註冊表啟動項的管理 37
3.3.4 程式的界面設定及相關代碼 38
3.3.5 啟動項的枚舉 39
3.3.6 添加啟動項的代碼 39
3.3.7 刪除啟動項的代碼 40
3.4 服務相關的編程 41
3.4.1 如何查看系統服務 41
3.4.2 服務控制管理器的開發 42
3.4.3 枚舉服務的相關API函式 44
3.4.4 服務的停止 45
3.4.5 停止服務的相關API函式 46
3.4.6 服務的啟動 46
3.5 進程與執行緒 47
3.5.1 進程 47
3.5.2 進程的創建 48
3.5.3“下載者”的簡單演示 48
3.5.4 CreateProcess()函式介紹與程式創建 49
3.5.5 進程的結束 52
3.5.6 進程的枚舉 55
3.5.7 調整當前進程的許可權 57
3.5.8 進程的暫停與恢復 58
3.5.9 多執行緒 62
3.6 DLL編程 66
3.6.1 什麼是DLL 66
3.6.2 編寫一個簡單的DLL程式 66
3.6.3 對DLL程式的調用方法一 68
3.6.4 對DLL程式的調用方法二 70
3.7 遠程執行緒 72
3.7.1 DLL注入 72
3.7.2 DLL卸載 76
3.7.3 無DLL的代碼注入 77
3.8 總結 80
第4章 加密與解密 81
4.1 PE檔案結構 81
4.1.1 PE檔案結構全貌 81
4.1.2 MZ頭部 82
4.1.3 PE頭部 82
4.1.4 節表 82
4.1.5 節表數據 82
4.2 詳解PE檔案結構 82
4.2.1 DOS頭部詳解IMAGE_DOS_HEADER 82
4.2.2 PE頭部詳解IMAGE_NT_HEADERS 85
4.2.3 IAMGE_FILE_HEADER 86
4.2.4 IMAGE_OPTIONAL_HEADER 87
4.2.5 節區詳解IMAGE_SECTION_HEADER 91
4.2.6 與PE結構相關的3種地址 92
4.2.7 3種地址的轉換 93
4.3 PE查看器 96
4.4 簡單的查殼工具 99
4.5 地址轉換器 103
4.6 添加節區 106
4.6.1 手動添加一個節區 106
4.6.2 通過編程添加節區 110
4.7 破解基礎知識及調試API函式的套用 112
4.7.1 CrackMe程式 112
4.7.2 用OD破解CrackMe 114
4.8 檔案補丁及記憶體補丁 119
4.8.1 檔案補丁 119
4.8.2 記憶體補丁 121
4.9 調試API函式的使用 123
4.9.1 常見的3種斷點方法 123
4.9.2 調試API函式及相關結構體介紹 127
4.9.3 判斷是否處於被調試狀態 128
4.9.4 斷點異常函式 130
4.9.5 調試事件 131
4.9.6 調試循環 132
4.9.7 記憶體的操作 134
4.9.8 執行緒環境相關API及結構體 135
4.10 打造一個密碼顯示器 136
4.11 總結 139
第5章 HOOK編程 141
5.1 HOOK知識前奏 141
5.2 內聯鉤子——InlineHook 142
5.2.1 InlineHook的原理 142
5.2.2 InlineHook的實現 143
5.2.3 HOOKMessageBoxA 146
5.2.4 HOOKCreateProcessW 147
5.2.5 7位元組InlineHook 150
5.2.6 InlineHook的注意事項 151
5.3 導入地址表鉤子——IATHOOK 154
5.3.1 導入表簡介 155
5.3.2 導入表的數據結構定義 155
5.3.3 手動分析導入表 156
5.3.4 枚舉導入地址表 158
5.3.5 IATHOOK介紹 159
5.3.6 IATHOOK之CreateFileW() 160
5.4 Windows鉤子函式 163
5.4.1 鉤子原理 163
5.4.2 鉤子函式 163
5.4.3 鍵盤鉤子實例 165
5.4.4 使用鉤子進行DLL注入 168
5.5 總結 169
第6章 黑客編程剖析 170
6.1 惡意程式剖析 170
6.1.1 惡意程式的自啟動 170
6.1.2 木馬的配置生成與反彈連線埠 173
6.1.3 代碼實現剖析 175
6.2 簡單病毒剖析 179
6.2.1 病毒的感染剖析 179
6.2.2 縫隙搜尋的實現 180
6.2.3 感染目標程式檔案剖析 180
6.2.4 添加感染標誌 182
6.2.5 自刪除功能的實現 183
6.3 隱藏DLL檔案 184
6.3.1 啟動WinDBG 184
6.3.2 調試步驟 185
6.3.3 編寫枚舉進程中模組的函式 188
6.3.4 指定模組的隱藏 189
6.4 安全工具開發基礎 191
6.4.1 行為監控工具開發基礎 192
6.4.2 專殺工具 198
6.4.3 隨身碟防禦軟體 207
6.4.4 目錄監控工具 212
6.5 引導區解析 215
6.5.1 通過WinHex來手動解析引導區 215
6.5.2 通過程式解析MBR 219
6.5.3 自定義MBR的各種結構體 220
6.5.4 解析MBR的程式實現 222
6.6 加殼與脫殼 224
6.6.1 手動加殼 224
6.6.2 編寫簡單的加殼工具 226
第7章 最後的旅程——簡單驅動開發及逆向 229
7.1 驅動版的“HelloWorld” 229
7.2 驅動下的進程遍歷 232
7.2.1 配置VMware和WinDbg進行驅動調試 233
7.2.2 EPROCESS和手動遍歷進程 236
7.2.3 編程實現進程遍歷 239
7.3 HOOKSSDT(系統服務描述表) 240
7.3.1 SSDT簡介 240
7.3.2 HOOKSSDT 242
7.3.3 InlineHOOKSSDT 244
7.4 應用程式與驅動程式的通信 246
7.4.1 創建設備 247
7.4.2 應用程式與驅動程式的通信方式 248
7.4.3 應用程式與驅動程式的通信實例 249
7.5 C語言代碼逆向基礎 253
7.5.1 函式的識別 253
7.5.2 if
7.5.3 switch分支結構 260
7.5.4 for循環結構 262
7.5.5 do…while與while…循環結構 263
參考文獻 265
1.1 程式語言和開發環境的選擇 1
1.1.1 何為SDK、API和MFC 2
1.1.2 VC6和SDK的配置 2
1.2 應用程式的調試 4
1.2.1 編寫我們的第一個程式 4
1.2.2 用VC6調試第一個程式 6
1.2.3 專業的應用程式調試工具——OllyDbg 8
1.3 簡單API的介紹 9
1.3.1 複製自身程式到Windows目錄和系統目錄下 9
1.3.2 獲得系統的相關信息 11
1.3.3 Debug和Release的編譯方式 13
1.3.4 查看函式定義 14
1.4 總結 15
第2章 木馬開發剖析 16
2.1 網路通信基礎 16
2.1.1 IP位址的作用與分類 16
2.1.2 連線埠的作用與分類 17
2.2 網路編程基礎知識 17
2.2.1 通信模型 17
2.2.2 Winsock 18
2.2.3 Winsock的相關函式 18
2.2.4 位元組順序 21
2.3 簡單的通信程式 22
2.3.1 基於TCP協定的“HelloWorld!” 22
2.3.2 基於UDP協定的“HelloWorld!” 24
2.4 實現一個C/S模式的簡單木馬 25
2.4.1 木馬伺服器端的實現 25
2.4.2 木馬客戶端的實現 28
2.5 總結 29
第3章 Windows套用編程基礎 30
3.1 檔案 30
3.1.1 打開檔案 30
3.1.2 檔案操作 31
3.2 AutoRun免疫程式的編寫 32
3.2.1 AutoRun免疫原理 33
3.2.2 AutoRun免疫程式的代碼實現 33
3.2.3 界面設定 33
3.2.4 代碼相關部分 34
3.3 註冊表操作 35
3.3.1 註冊表 35
3.3.2 與註冊表操作相關的常用API函式 36
3.3.3 註冊表啟動項的管理 37
3.3.4 程式的界面設定及相關代碼 38
3.3.5 啟動項的枚舉 39
3.3.6 添加啟動項的代碼 39
3.3.7 刪除啟動項的代碼 40
3.4 服務相關的編程 41
3.4.1 如何查看系統服務 41
3.4.2 服務控制管理器的開發 42
3.4.3 枚舉服務的相關API函式 44
3.4.4 服務的停止 45
3.4.5 停止服務的相關API函式 46
3.4.6 服務的啟動 46
3.5 進程與執行緒 47
3.5.1 進程 47
3.5.2 進程的創建 48
3.5.3“下載者”的簡單演示 48
3.5.4 CreateProcess()函式介紹與程式創建 49
3.5.5 進程的結束 52
3.5.6 進程的枚舉 55
3.5.7 調整當前進程的許可權 57
3.5.8 進程的暫停與恢復 58
3.5.9 多執行緒 62
3.6 DLL編程 66
3.6.1 什麼是DLL 66
3.6.2 編寫一個簡單的DLL程式 66
3.6.3 對DLL程式的調用方法一 68
3.6.4 對DLL程式的調用方法二 70
3.7 遠程執行緒 72
3.7.1 DLL注入 72
3.7.2 DLL卸載 76
3.7.3 無DLL的代碼注入 77
3.8 總結 80
第4章 加密與解密 81
4.1 PE檔案結構 81
4.1.1 PE檔案結構全貌 81
4.1.2 MZ頭部 82
4.1.3 PE頭部 82
4.1.4 節表 82
4.1.5 節表數據 82
4.2 詳解PE檔案結構 82
4.2.1 DOS頭部詳解IMAGE_DOS_HEADER 82
4.2.2 PE頭部詳解IMAGE_NT_HEADERS 85
4.2.3 IAMGE_FILE_HEADER 86
4.2.4 IMAGE_OPTIONAL_HEADER 87
4.2.5 節區詳解IMAGE_SECTION_HEADER 91
4.2.6 與PE結構相關的3種地址 92
4.2.7 3種地址的轉換 93
4.3 PE查看器 96
4.4 簡單的查殼工具 99
4.5 地址轉換器 103
4.6 添加節區 106
4.6.1 手動添加一個節區 106
4.6.2 通過編程添加節區 110
4.7 破解基礎知識及調試API函式的套用 112
4.7.1 CrackMe程式 112
4.7.2 用OD破解CrackMe 114
4.8 檔案補丁及記憶體補丁 119
4.8.1 檔案補丁 119
4.8.2 記憶體補丁 121
4.9 調試API函式的使用 123
4.9.1 常見的3種斷點方法 123
4.9.2 調試API函式及相關結構體介紹 127
4.9.3 判斷是否處於被調試狀態 128
4.9.4 斷點異常函式 130
4.9.5 調試事件 131
4.9.6 調試循環 132
4.9.7 記憶體的操作 134
4.9.8 執行緒環境相關API及結構體 135
4.10 打造一個密碼顯示器 136
4.11 總結 139
第5章 HOOK編程 141
5.1 HOOK知識前奏 141
5.2 內聯鉤子——InlineHook 142
5.2.1 InlineHook的原理 142
5.2.2 InlineHook的實現 143
5.2.3 HOOKMessageBoxA 146
5.2.4 HOOKCreateProcessW 147
5.2.5 7位元組InlineHook 150
5.2.6 InlineHook的注意事項 151
5.3 導入地址表鉤子——IATHOOK 154
5.3.1 導入表簡介 155
5.3.2 導入表的數據結構定義 155
5.3.3 手動分析導入表 156
5.3.4 枚舉導入地址表 158
5.3.5 IATHOOK介紹 159
5.3.6 IATHOOK之CreateFileW() 160
5.4 Windows鉤子函式 163
5.4.1 鉤子原理 163
5.4.2 鉤子函式 163
5.4.3 鍵盤鉤子實例 165
5.4.4 使用鉤子進行DLL注入 168
5.5 總結 169
第6章 黑客編程剖析 170
6.1 惡意程式剖析 170
6.1.1 惡意程式的自啟動 170
6.1.2 木馬的配置生成與反彈連線埠 173
6.1.3 代碼實現剖析 175
6.2 簡單病毒剖析 179
6.2.1 病毒的感染剖析 179
6.2.2 縫隙搜尋的實現 180
6.2.3 感染目標程式檔案剖析 180
6.2.4 添加感染標誌 182
6.2.5 自刪除功能的實現 183
6.3 隱藏DLL檔案 184
6.3.1 啟動WinDBG 184
6.3.2 調試步驟 185
6.3.3 編寫枚舉進程中模組的函式 188
6.3.4 指定模組的隱藏 189
6.4 安全工具開發基礎 191
6.4.1 行為監控工具開發基礎 192
6.4.2 專殺工具 198
6.4.3 隨身碟防禦軟體 207
6.4.4 目錄監控工具 212
6.5 引導區解析 215
6.5.1 通過WinHex來手動解析引導區 215
6.5.2 通過程式解析MBR 219
6.5.3 自定義MBR的各種結構體 220
6.5.4 解析MBR的程式實現 222
6.6 加殼與脫殼 224
6.6.1 手動加殼 224
6.6.2 編寫簡單的加殼工具 226
第7章 最後的旅程——簡單驅動開發及逆向 229
7.1 驅動版的“HelloWorld” 229
7.2 驅動下的進程遍歷 232
7.2.1 配置VMware和WinDbg進行驅動調試 233
7.2.2 EPROCESS和手動遍歷進程 236
7.2.3 編程實現進程遍歷 239
7.3 HOOKSSDT(系統服務描述表) 240
7.3.1 SSDT簡介 240
7.3.2 HOOKSSDT 242
7.3.3 InlineHOOKSSDT 244
7.4 應用程式與驅動程式的通信 246
7.4.1 創建設備 247
7.4.2 應用程式與驅動程式的通信方式 248
7.4.3 應用程式與驅動程式的通信實例 249
7.5 C語言代碼逆向基礎 253
7.5.1 函式的識別 253
7.5.2 if
7.5.3 switch分支結構 260
7.5.4 for循環結構 262
7.5.5 do…while與while…循環結構 263
參考文獻 265