灰帽黑客:攻守道,是一本於2023年5月20日創作完成,並於5月22日首次發表的圖書作品,著作權人是王瑞。
一本信息安全編程技術實戰指南,書中總結並融入了作者多年的安全編程經驗,每一個案例都是從實戰角度出發,該書由四卷組成,分別是基礎入門卷,安全編程卷,軟體安全卷以及核心安全卷,每一卷中都包含有大量根據實戰而總結的黑客編程技術,通過對本書的學習讀者可以快速掌握並具備實戰技能,本書適用於中、高級信息安全工程師,同時也可用作高校信息安全專業課外補充教材。
基本介紹
- 中文名:灰帽黑客:攻守道
- 作品類別:其他
- 裝幀:平裝
- 所屬分類:信息安全/軟體安全/網路安全
- 頁數:2492 頁
- 首次發表日期:2023年5月22日
- 著作權人:王瑞
- 登記號:國作登字-2023-L-00134718
- 開本:16 開
- 封面設計:梁貴璽,錢亞明
內容簡介,書籍目錄,第一部分:基礎入門卷,第二部分:安全編程卷,第三部分:軟體安全卷,第四部分:核心安全卷,
內容簡介
一本面向於灰帽子及信息安全專業人員的安全編程系列叢書,書中著重講解黑客編程技術,適合開發者或計算機專業人士閱讀。讀者需要具備一定的編程基礎,並對信息安全領域有一定的了解和認識。本書的優勢在於實戰,每個章節都包含與信息安全編程相關的案例,通過這些案例可以快速掌握實戰技能。同時,本書的知識體系具有系統性和簡潔性,讀者可以輕鬆掌握其中的知識點。此外,書中的的用例都可以直接套用於各種安全開發項目中,可以在實際工作中直接使用,具有較高的實用價值。
書籍目錄
第一部分:基礎入門卷
第一篇:Python語言體系 26
第一章:標準輸入與輸出 26
1.1 標準輸入功能 1.1.1
1.2 標準輸出功能 1.1.2
1.3 格式化的用法 1.1.3
第二章:數據類型與結構 29
2.1 算數類型 2.1.1
2.2 字元類型 2.1.2
2.3 列表類型 2.1.3
2.4 字典類型 2.1.4
2.5 元組類型 2.1.5
2.6 集合類型 2.1.6
2.7 序列類型 2.1.7
第三章:疊代器與生成器 66
3.1 使用疊代器 3.1.1
3.2 使用生成器 3.1.2
3.3 佇列的使用 3.1.3
第四章:變數與作用域 73
第五章:定義並使用函式 76
5.1 有參與無參函式 5.1.1
5.2 函式參數傳遞 5.1.2
5.3 通用函式返回值 5.1.3
5.4 通用函式閉包 5.1.4
5.5 函式嵌套與遞歸 5.1.5
5.6 LAMBDA匿名函式 5.1.6
第六章:函式裝飾器 86
6.1 無參裝飾器 6.1.1
6.2 有參裝飾器 6.1.2
6.3 帶參裝飾器 6.1.3
第七章:面向對象編程 91
7.1 面向對象之封裝 7.1.1
7.2 面向對象之繼承 7.1.2
7.3 面向對象之包裝 7.1.3
7.4 面向對象之反射 7.1.4
第八章:進程與執行緒 106
8.1 創建並使用執行緒 8.1.1
8.2 創建並使用進程 8.1.2
8.3 多進程數據共享 8.1.3
第九章:內置模組套用 119
9.1 系統操作模組 9.1.1
9.2 文本處理模組 9.1.2
9.3 加密解密模組 9.1.3
9.4 取隨機數模組 9.1.4
9.5 日期時間模組 9.1.5
9.6 持久存儲模組 9.1.6
9.7 INI解析模組 9.1.7
9.8 XML處理模組 9.1.8
9.9 Ctypes混編模組 9.1.9
第二篇:C/C++語言體系 156
第一章:使用數組與指針 156
第二章:使用函式與指針 174
第三章:使用字元與指針 182
第四章:使用結構與指針 194
第五章:使用檔案與指針 205
第六章:封裝實現字操作 222
6.1 封裝字元串操作 6.1.1
6.2 複製與剪下函式 6.1.2
6.3 字元串比較函式 6.1.3
6.4 字元串查找函式 6.1.4
第七章:指針與數據結構 266
7.1 實現動態數組 7.1.1
7.2 實現動態鍊表 7.1.2
7.3 實現順序棧 7.1.3
7.4 實現鍊表棧 7.1.4
7.5 實現鍊表佇列 7.1.5
第八章:標準輸入輸出流 286
第九章:引用與取別名 293
第十章:定義並使用類 297
第十一章:運算符重載 309
第十二章:繼承與多態 318
第十三章:泛型化編程 326
第三篇:C++ STL模板體系 333
第一章:字元串操作容器 334
1.1 字元串構造函式 1.1.1
1.2 字元串對象賦值 1.1.2
1.3 字元串遍歷操作 1.1.3
1.4 字元串添加與刪除 1.1.4
1.5 字元串查找與替換 1.1.5
1.6 字元串首尾數據提取 1.1.6
1.7 字元串與字元互轉 1.1.7
1.8 字元串大小寫互轉 1.1.8
第二章:數組向量容器 340
2.1 數組向量基礎套用 2.1.1
2.2 數組向量正/反向遍歷 2.1.2
2.3 數組向量正/反向排序 2.1.3
2.4 向數組向量中插入元素 2.1.4
2.5 向數組向量中插入結構指針 2.1.5
2.6 向數組向量中插入類指針 2.1.6
2.7 在數組容器中嵌套容器 2.1.7
2.8 函式參數定義為容器類型 2.1.8
2.9 數組向量元素的刪除 2.1.9
第三章:雙向佇列容器 348
3.1 單向佇列的基本操作 3.1.1
3.2 雙向佇列的基本操作 3.1.2
3.3 雙向佇列正/反向遍歷 3.1.3
3.4 雙向佇列插入/彈出元素 3.1.4
3.5 函式參數傳遞雙向佇列 3.1.5
第四章:動態鍊表容器 352
4.1 雙向鍊表遍歷整數 4.1.1
4.2 雙向鍊表遍歷結構體 4.1.2
4.3 實現正反向遍歷鍊表 4.1.3
4.4 遍歷鍊表中指定元素 4.1.4
4.5 插入/刪除鍊表元素 4.1.5
4.6 整數鍊表正反向排序 4.1.6
4.7 類鍊表正反向排序 4.1.7
4.8 類鍊表成員的刪除 4.1.8
第五章:集合數據容器 361
5.1 正反向遍歷集合元素 5.1.1
5.2 查找集合中指定元素 5.1.2
5.3 設定默認集合排序方式 5.1.3
5.4 向集合插入自定義類型 5.1.4
第六章:序列映射容器 365
6.1 通過對組實現鍵值對 6.1.1
6.2 正反向遍歷映射容器 6.1.2
6.3 查找映射容器中的元素 6.1.3
6.4 遍歷映射容器中的結構 6.1.4
6.5 通過映射容器實現分組 6.1.5
第七章:非變易算法(查找算法) 370
7.1 for_each 遍歷容器元素 7.1.1
7.2 find 普通查找容器元素 7.1.2
7.3 find 類查找容器元素 7.1.3
7.4 find_if 條件查找容器元素 7.1.4
7.5 find_if 條件查找類容器元素 7.1.5
7.6 adjacent_find 鄰近查找容器元素 7.1.6
7.7 find_first_of 範圍查找容器元素 7.1.7
7.8 count 普通元素計數統計 7.1.8
7.9 count_if 條件元素計數統計 7.1.9
7.10 binary_search 數組查找算法 7.1.10
7.11 mismatch 元素不匹配查找 7.1.11
7.12 equal 元素相等的判斷 7.1.12
7.13 search 子序列搜尋算法 7.1.13
7.14 search_n 重複元素子序列搜尋 7.1.14
7.15 find_end 最後一個子序列搜尋 7.1.15
第八章:變易算法(複製與拷貝) 383
8.1 copy 元素複製算法 8.1.1
8.2 swap 元素交換算法 8.1.2
8.3 transform 元素搬運算法 8.1.3
8.4 replace 元素替換算法 8.1.4
8.5 fill 容器元素初始化算法 8.1.5
8.6 remove_if 普通條件移除 8.1.6
8.7 remove_copy 條件移除複製 8.1.7
8.8 unique 容器元素去重算法 8.1.8
8.9 reverse 元素反向拷貝算法 8.1.9
8.10 rotate 容器旋轉複製算法 8.1.10
8.11 random 隨機數相關算法 8.1.11
8.12 partition 容器元素分割算法 8.1.12
第九章:排序/算數/集合 395
9.1 堆排序算法 9.1.1
9.2 局部排序與複製 9.1.2
9.3 快速排序算法 9.1.3
9.4 穩定排序算法 9.1.4
9.5 容器歸併算法 9.1.5
9.6 容器區間查找算法 9.1.6
9.7 最大值/最小值算法 9.1.7
9.8 交集/並集/差集算法 9.1.8
9.9 求容器上/下排列組合 9.1.9
9.10 容器元素求和算法 9.1.10
第十章:模板適配/疊代器 407
10.1 函式對象適配器 10.1.1
10.2 函式指針適配器 10.1.2
10.3 容器取反適配器 10.1.3
10.4 檔案流對象拷貝檔案 10.1.4
10.5 向前/後插入疊代器 10.1.5
10.6 容器反向疊代器 10.1.6
第十一章:STL綜合套用 413
11.1 字典拆分為列表 11.1.1
11.2 列表合併為字典 11.1.2
11.3 根據字典Key排序(降序) 11.1.3
11.4 根據字典key排序(長度) 11.1.4
11.5 根據字典Value排序 11.1.5
11.6 根據字典Key返回Value 11.1.6
11.7 根據字典Value尋找Key 11.1.7
11.8 尋找列表中相同元素 11.1.8
11.9 查找列表中的交集 11.1.9
11.10 根據Key設定字典Value 11.1.10
11.11 實現列表容器計數 11.1.11
11.12 驗證兩個列表異同點 11.1.12
11.13 實現兩個列表合併 11.1.13
11.14 字典與列表的嵌套 11.1.14
11.15 可存儲多類型容器 11.1.15
11.16 列表隨機彈出元素 11.1.16
11.17 實現佇列參數計算 11.1.17
11.18 查找最大值/最小值 11.1.18
11.19 字典中嵌套結構體 11.1.19
第四篇:Boost 準標準庫體系 440
第一章:字元串處理庫 442
1.1 字元串格式轉換 1.1.1
1.2 字元串格式輸出 1.1.2
1.3 字元串大小寫轉換 1.1.3
1.4 字元串判斷與測試 1.1.4
1.5 字元串修正與裁剪 1.1.5
1.6 字元串匹配開頭結尾 1.1.6
1.7 字元串替換與刪除 1.1.7
1.8 字元串切割與合併 1.1.8
1.9 整數轉字元串併合並 1.1.9
1.10 字元串查找/分割疊代器 1.1.10
1.11 正則分組匹配字元串 1.1.11
1.12 正則查找替換 1.1.12
1.13 正則疊代與分詞 1.1.13
1.14 正則切割與過濾 1.1.14
第二章:記憶體池管理庫 459
2.1 使用Pool記憶體池 2.1.1
2.2 使用ObjectPool記憶體池 2.1.2
2.3 使用SharedPtr智慧型指針 2.1.3
2.4 使用MakeShared工廠函式 2.1.4
2.5 使用SharedPtr橋接模式 2.1.5
2.6 使用SharedPtr工廠模式 2.1.6
2.7 使用SharedPtr資源共享 2.1.7
2.8 使用WeakPtr智慧型指針 2.1.8
2.9 使用IntrusivePtr計數器 2.1.9
第三章:日期時間操作庫 474
3.1 字元串與日期時間互轉 3.1.1
3.2 度量時間流失單位 3.1.2
3.3 Ptime與Time_T互轉 3.1.3
3.4 日期的格式化輸出 3.1.4
3.5 日期的加減運算 3.1.5
3.6 指定日期區間與變動區間 3.1.6
3.7 日期區間範圍判斷 3.1.7
3.8 使用日期疊代器 3.1.8
3.9 時鐘與時間點 3.1.9
3.10 時間基本操作 3.1.10
3.11 時間點加減法 3.1.11
3.12 時間點格式化輸出 3.1.12
3.13 時間區間操作 3.1.13
3.14 時間長度計算 3.1.14
第四章:數據集序列化庫 489
4.1 針對文本的序列化 4.1.1
4.2 針對數組的序列化 4.1.2
4.3 針對結構體的序列化 4.1.3
4.4 嵌套結構體的序列化 4.1.4
4.5 針對類的序列化 4.1.5
4.6 序列化文本到字元串 4.1.6
4.7 序列化數組到字元串 4.1.7
4.8 序列化結構體到字元串 4.1.8
4.9 序列化嵌套結構到字元串 4.1.9
4.10 序列化類到字元串 4.1.10
4.11 序列化派生類到字元串 4.1.11
第五章:檔案目錄操作庫 505
5.1 使用Path目錄類 5.1.1
5.2 路徑拼接與追加操作 5.1.2
5.3 針對檔案屬性操作 5.1.3
5.4 檔案流計算檔案大小 5.1.4
5.5 檔案與目錄增刪改 5.1.5
5.6 疊代輸出單層目錄 5.1.6
5.7 正則疊代搜尋檔案 5.1.7
5.8 遞歸遍歷層級目錄 5.1.8
5.9 遞歸實現檔案拷貝 5.1.9
5.10 遞歸實現檔案刪除 5.1.10
5.11 遞歸目錄計算CRC32 5.1.11
5.12 非遞歸輸出目錄屬性 5.1.12
第六章:函式綁定回調庫 525
6.1 reference_wrapper包裝器 6.1.1
6.2 Bind 函式綁定 6.1.2
6.3 Function 函式綁定 6.1.3
6.4 Signals 信號與槽 6.1.4
第七章:多執行緒並發庫 541
7.1 Mutex互斥鎖 7.1.1
7.2 執行緒局部存儲 7.1.2
7.3 使用執行緒組 7.1.3
7.4 獲取執行緒返回值 7.1.4
7.5 shared_mutex共享鎖 7.1.5
7.6 獲取執行緒ID號 7.1.6
第八章:套用JSON解析庫 555
8.1 解析單個節點 8.1.1
8.2 解析單個列表 8.1.2
8.3 解析嵌套列表 8.1.3
8.4 解析多層字典 8.1.4
8.5 寫出JSON檔案 8.1.5
8.6 自定義的結構解析 8.1.6
第九章:命令行解析庫 564
9.1 在字元串上解析 9.1.1
9.2 自己實現的參數解析 9.1.2
9.3 互動式參數解析器 9.1.3
9.4 非互動參數解析 9.1.4
第五篇:Intel 彙編語言體系 572
第一章:彙編語言基礎 572
1.1 RadASM 1.1.1
1.2 彙編中的變數 1.1.2
1.3 標準輸入與輸出 1.1.3
第二章:標誌位測試指令 577
2.1 PSR 2.1.1
2.2 TEST 2.1.2
2.3 CMP 2.1.3
2.4 JX/JNX/JSX/JPX 2.1.4
2.5 BT/BTR/BSF/BSR 2.1.5
第三章:字元串操作指令 586
3.1 MOVSB/MOVSW/MOVSD 3.1.1
3.2 CMPSB/CMPSW/CMPSD 3.1.2
3.3 SCASB/SCASW/SCASD 3.1.3
3.4 STOSB/STOSW/STOSD 3.1.4
3.5 LODSB/LODSW/LODSD 3.1.5
第四章:算數運算指令集 595
4.1 MOV/INC/DEC/XCHG 4.1.1
4.2 ADD/SUB 4.1.2
4.3 NEG/NOT 4.1.3
4.4 AND/OR/XOR 4.1.4
4.5 SHL/SHR 4.1.5
4.6 SAL/SAR 4.1.6
4.7 ROL/ROR 4.1.7
4.8 RCL/RCR 4.1.8
4.9 MUL/IMUL 4.1.9
4.10 DIV/IDIV 4.1.10
4.11 ADC/SBB 4.1.11
第五章:彙編函式調用約定 625
5.1 CDECL 5.1.1
5.2 STDCALL 5.1.2
5.3 FASTCALL 5.1.3
5.4 使用ESP暫存器定址 5.1.4
5.5 使用數組指針傳值 5.1.5
5.6 指向函式的指針 5.1.6
第六章:彙編高效數組定址 636
6.1 數組取值操作 6.1.1
6.2 數組直接定址 6.1.2
6.3 數組間接定址 6.1.3
6.4 比例因子定址 6.1.4
6.5 數組指針定址 6.1.5
6.6 模擬二維數組定址 6.1.6
6.7 模擬三維數組定址 6.1.7
第七章:彙編高效乘法運算 649
7.1 使用IMUL指令完成乘法 7.1.1
7.2 使用LEA指令替換乘法 7.1.2
7.3 使用LEA指令拆分計算 7.1.3
7.4 使用LEA指令遞減計算 7.1.4
7.5 使用SHL計算無符號乘法 7.1.5
7.6 使用SAL計算有符號乘法 7.1.6
第八章:彙編高效除法運算 654
8.1 使用IDIV指令完成除法 8.1.1
8.2 除數為正2的次冪(無符號) 8.1.2
8.3 除數為負2的次冪(有符號) 8.1.3
8.4 被除數為負數(有符號) 8.1.4
8.5 除數與被除數均為負數(有符號) 8.1.5
8.6 除數為正非2次冪(有符號) 8.1.6
8.7 除數為正非2次冪(無符號) 8.1.7
8.8 除數為負非2次冪(無符號) 8.1.8
第九章:浮點數操作指令 664
9.1 FLD/FSTP 9.1.1
9.2 FCHS/FABS 9.1.2
9.3 FADD/FADDP/FIADD 9.1.3
9.4 FSUB/FSUBP/FISUB 9.1.4
9.5 FMUL/FMULP/FIMUL 9.1.5
9.6 FDIV/FDIVP/FIDIV 9.1.6
9.7 FCOM/FCOMP/FCOMPP 9.1.7
第十章:彙編過程與結構 678
10.1 PUSH/POP 10.1.1
10.2 PROC/ENDP 10.1.2
10.3 局部參數傳遞 10.1.3
10.4 USES/ENTER 10.1.4
10.5 STRUCT/UNION 10.1.5
第十一章:仿寫控制流程 697
11.1 IF中的AND語句構造 11.1.1
11.2 IF中OR語句的構造 11.1.2
11.3 IF中AND/OR混合構造 11.1.3
11.4 IF語句中的條件測試 11.1.4
11.5 IF語句的雙重嵌套 11.1.5
11.6 IF語句的三層嵌套 11.1.6
11.7 IF語句的多選擇分支 11.1.7
11.8 IF中的自增自減處理 11.1.8
11.9 IF中的三目運算符 11.1.9
11.10 IF中的嵌套移位 11.1.10
11.11 IF中的運算符混合 11.1.11
11.12 Do-While 循環結構最佳化 11.1.12
11.13 While 循環結構最佳化 11.1.13
11.14 FOR 循環結構最佳化 11.1.14
11.15 Loop 循環結構最佳化 11.1.15
11.16 仿寫Do-While循環體 11.1.16
11.17 仿寫While循環體 11.1.17
11.18 仿寫While三層嵌套循環體 11.1.18
11.19 仿寫While實現二分法 11.1.19
11.20 仿寫For水仙花數 11.1.20
11.21 For循環嘗試判斷 11.1.21
11.22 For循環多重IF判斷 11.1.22
11.23 For嵌套乘法口訣表 11.1.23
11.24 For語句冒泡排序 11.1.24
11.25 Switch 仿寫有序線性最佳化 11.1.25
11.26 Switch 仿寫非線性索引最佳化 11.1.26
11.27 Switch 仿寫平衡判定樹最佳化 11.1.27
第二部分:安全編程卷
第一篇:ShellCode編寫與套用技術 756
1.1 Metasploit 工具簡介 756
1.2 Metasploit 生成並使用後門 757
1.2.1 通用控制命令 1.2.1
1.2.2 Migrate進程遷移 1.2.2
1.2.3 檔案查閱與傳輸 1.2.3
1.2.4 連線埠轉發與掃描 1.2.4
1.2.5 信息採集功能 1.2.5
1.2.6 目標主機許可權提升 1.2.6
1.2.7 添加用戶與開啟遠程 1.2.7
1.2.8 註冊表寫入後門 1.2.8
1.3 Metasploit 生成SSL加密載荷 767
1.3.1 通過MSF模組克隆證書 1.3.1
1.3.2 通過OpenSSL製作證書 1.3.2
1.4 編寫簡易ShellCode彈窗 777
1.4.1 尋找DLL庫函式地址 1.4.1
1.4.2 探討STDCALL調用約定 1.4.2
1.4.3 ShellCode提取與套用 1.4.3
1.5 編寫自定位ShellCode彈窗 780
1.5.1 動態查找Kernel32基址 1.5.1
1.5.2 動態查找並枚舉進程模組 1.5.2
1.5.3 計算函式Hash摘要值 1.5.3
1.5.4 枚舉Kernel32導出表 1.5.4
1.5.5 整合自定位ShellCode 1.5.5
1.6 編寫雙管道ShellCode後門 803
1.6.1 什麼是匿名管道 1.6.1
1.6.2 C語言實現雙管道後門 1.6.2
1.6.3 彙編實現並提取ShellCode 1.6.3
1.7 完善自定位ShellCode後門 820
1.7.1 通過PEB定位GetProcAddress 1.7.1
1.7.2 彙編實現動態定位功能 1.7.2
1.7.3 運用SEH鏈獲得Kernel32基址 1.7.3
1.8 運用C編寫ShellCode代碼 831
1.9 動態解密ShellCode反彈 841
1.10 記憶體ShellCode格式化與注入 847
1.10.1 針對記憶體的ShellCode注入 1.10.1
1.10.2 實現格式化與代碼執行盒 1.10.2
1.11 動態載入ShellCode繞過殺軟 853
1.11.1 探索Socket服務端 1.11.1
1.11.2 探索Socket客戶端 1.11.2
1.12 進程注入ShellCode套接字 862
1.12.1 讀入Kernel32模組基址 1.12.1
1.12.2 進程注入MsgBox彈窗 1.12.2
1.12.3 進程注入MyShell正向後門 1.12.3
1.13 導出表劫持ShellCode載入 874
1.13.1 動態程式庫載入順序 1.13.1
1.13.2 實現DLL劫持代碼生成 1.13.2
1.13.3 實現劫持ShellCode注入 1.13.3
1.14 手工插入ShellCode反彈後門 886
1.14.1 VA地址與FOA地址互轉 1.14.1
1.14.2 新建節區並插入後門 1.14.2
1.14.3 新建節並插入DLL 1.14.3
1.15 自實現GetProcAddress 896
第二篇:PE檔案結構操控技術 905
2.1 PE結構映射進記憶體 906
2.2 DOS檔案頭詳細解析 910
2.3 PE檔案頭詳細解析 914
2.3.1 IMAGE_FILE_HEADER 2.3.1
2.3.2 IMAGE_OPTINAL_HEADER 2.3.2
2.4 節表詳細解析 921
2.5 導入表詳細解析 924
2.5.1 導入表原理分析 2.5.1
2.5.2 IMAGE_IMPORT_DESCRIPTOR 2.5.2
2.5.3 枚舉導入表流程 2.5.3
2.6 導出表詳細解析 931
2.7 重定位表詳細解析 934
2.8 資源表詳細解析 939
2.9 重建導入表 942
2.10 重建重定位表 950
2.11 添加新的節區 955
2.12 實現位元組注入 959
2.13 實現代碼段加密 966
2.14 地址之間的轉換 969
第三篇:動態程式庫注入技術 977
3.1 常規遠程執行緒注入 977
3.2 遠程APC異步注入 980
3.3 突破會話0強力注入 983
3.4 全局訊息鉤子注入 988
第四篇:套用層Hook掛鈎技術 991
4.1 鉤子技術原理 992
4.2 x32 Inline Hook 995
4.3 x64 Inline Hook 999
4.4 IAT Hook 1005
4.5 EAT Hook 1015
4.6 MinHook 1018
第五篇:記憶體與磁碟CRC校驗技術 1023
5.1 記憶體CRC完整性檢測 1026
5.2 磁碟CRC完整性檢測 1029
第六篇:記憶體特徵定位與補丁技術 1033
6.1 KMP算法搜尋機器碼 1033
6.1.1 遍歷輸出進程記憶體 6.1.1
6.1.2 使用KMP搜尋特徵碼 6.1.2
6.2 Sunday搜尋記憶體特徵 1036
6.2.1 字元串與特徵碼轉換 6.2.1
6.2.2 搜尋記憶體區域特徵 6.2.2
6.2.3 搜尋整塊記憶體區域 6.2.3
6.2.4 套用動態記憶體補丁 6.2.4
第七篇:套用進程執行緒操控技術 1051
7.1 記憶體塊枚舉 1051
7.2 創建新進程 1061
7.3 枚舉進程相關 1065
7.4 枚舉進程許可權 1067
7.5 判斷進程狀態 1070
7.6 掛起/恢復進程 1073
7.7 進程記憶體讀寫 1084
第八篇:進程反調試套用技術 1098
8.1 TEB/PEB 1098
8.2 BeingDebugged 1102
8.3 NtGlobalFlag 1106
8.4 ProcessHeap 1108
8.5 DebuggerPresent 1111
8.6 STARTUPINFO 1112
8.7 父進程檢測反調試 1113
8.8 異常處理機制反調試 1114
8.9 RDTSC時鐘檢測反調試 1115
8.10 TLS執行緒局部存儲反調試 1116
第九篇:多執行緒與執行緒同步技術 1118
9.1 運用API創建多執行緒 1118
9.1.1 CreateThread 9.1.1
9.1.2 BeginThreadex 9.1.2
9.2 運用API實現執行緒同步 1123
9.2.1 CreateEvent 9.2.1
9.2.2 CreateSemaphore 9.2.2
9.2.3 CreateMutex 9.2.3
9.2.4 ThreadParameters 9.2.4
9.2.5 ThreadPool 9.2.5
第十篇:調試事件與反彙編技術 1145
10.1 調試事件獲取暫存器 1147
10.2 調試事件獲取DLL裝載 1150
10.3 調試事件轉存進程記憶體 1152
10.4 認識Capstone反彙編引擎 1156
10.5 認識XEDParse彙編引擎 1163
10.6 開發反彙編調試器 1165
10.6.1 暫存器系列函式 10.6.1
10.6.2 軟體斷點函式 10.6.2
10.6.3 記憶體斷點函式 10.6.3
10.6.4 硬體斷點函式 10.6.4
10.6.5 反彙編功能函式 10.6.5
10.6.6 單步步過/步進函式 10.6.6
第十一篇:檔案與磁碟操作技術 1117
11.1 DelteFile 1117
11.2 CopyFile 1178
11.3 MoveFile 1179
11.4 ReadFile 1181
11.5 FindNextFile 1184
11.6 切割檔案名稱與路徑 1185
11.7 遍歷目錄下檔案 1187
11.8 重置檔案時間戳 1189
11.9 遍歷磁碟容量 1190
11.10 遍歷盤符並存儲 1194
11.11 實現磁碟格式化 1195
11.12 移除指定磁碟 1195
11.13 輸出磁碟分區表 1198
11.14 遍歷檔案特定路徑 1201
11.15 監控目錄檔案變化 1204
第十二篇:鍵盤滑鼠模擬技術 1204
12.1 鍵盤滑鼠監控鉤子 1204
12.2 實現鍵盤滑鼠模擬 1211
第十三篇:套用DirectX窗體繪製技術 1227
13.1引用DirectX9引擎 1227
13.1.1 初始化變數 13.1.1
13.1.2 LPDIRECT3D9 13.1.2
13.1.3 LPDIRECT3DDEVICE9 13.1.3
13.1.4 LPDIRECT3DVERTEXBUFFER9 13.1.4
13.1.5初始化繪圖引擎 13.1.5
13.2外部DirectX繪製實現 1236
13.2.1 必要參數定義 13.2.1
13.2.2 初始化繪圖引擎 13.2.2
13.2.3 初始化並創建訊息循環 13.2.3
13.2.4 封裝實現繪圖函式 13.2.4
13.2.5 實現螢幕繪製功能 13.2.5
13.3運用LyDrawLib庫繪製 1243
13.3.1 繪製實心矩形 13.3.1
13.3.2 繪製空心矩形 13.3.2
13.3.3 繪製進度條 13.3.3
13.3.4 繪製圓形及準星 13.3.4
13.3.5 繪製文本字元串 13.3.5
13.3.6 繪製功能選單 13.3.6
13.4 DirectX內部劫持繪製 1253
13.4.1 封裝Hook劫持功能 13.4.1
13.4.2 自定義MyEndScene函式 13.4.2
13.4.3 初始化與繪製圖形 13.4.3
第十四篇:網路套接字編程入門 1260
14.1 Socket 簡單通信流程 1260
14.2 Socket 反向遠程命令行 1265
14.3 Socket 字元串分塊傳輸 1268
14.4 Socket 雙向數據通信 1272
14.5 Socket 套用組播通信 1276
14.6 Socket 套用結構體傳輸 1279
14.7 Socket 循環結構體傳輸 1283
14.8 Socket 一收一發通信 1287
14.9 Socket 高效檔案傳輸 1292
14.10 Socket 選擇套接字通信 1298
14.11 Socket 基於時間加密通信 1304
第十五篇:主機路由追蹤技術 1311
15.1 通過域名取IP位址 1312
15.2 主機探測與路由追蹤 1313
第十六篇:連線埠探測掃描技術 1321
16.1 實現Socket連線埠探測 1322
16.2 實現ARP主機探測 1328
第十七篇:重疊後門反彈技術 1332
17.1 隱藏執行CMD 1333
17.2 無管道正向CMD 1336
17.3 無管道反向CMD 1338
第十八篇:操控網路數據包技術 1340
18.1 原生套接字抓包 1340
18.2 使用NPCAP抓包 1351
18.3 構建實現ARP欺騙 1372
第十九篇:基於ASIO網路編程技術 1380
19.1 同步TCP通信 1381
19.2 同步UDP通信 1384
19.3 同步多執行緒通信 1386
19.4 同步遠程命令執行 1388
19.5 同步傳輸結構體 1390
19.6 同步Base64文本傳輸 1392
19.7 同步傳輸序列化數據 1395
19.8 同步異或加密傳輸 1398
19.9 同步實現字典傳輸 1401
19.10 同步實現檔案傳輸 1403
19.11 同步獲取遠程目錄 1409
19.12 同步獲取遠程進程 1413
19.13 同步傳送TCP流數據 1416
第二十篇:OpenSSL加密傳輸技術 1420
20.1 字元BASE64壓縮算法 1421
20.2 非對稱RSA加解密算法 1423
20.3 對稱AES加解密算法 1430
20.4 套接字AES加密傳輸 1433
20.5 套接字RSA加密傳輸 1437
20.6 套接字分發RSA公鑰 1448
20.7 套接字SSL加密傳輸 1456
20.8 套接字SSL傳輸檔案 1463
第二十一篇:Python安全編程技術 1469
21.1 使用PEfile分析PE檔案 1470
21.1.1 打開並載入PE檔案 21.1.1
21.1.2 解析PE頭部數據 21.1.2
21.1.3 解析節表數據 21.1.3
21.1.4 節區RVA與FOA互轉 21.1.4
21.1.5 解析數據為Hex格式 21.1.5
21.1.6 解析數據目錄表 21.1.6
21.1.7 解析導入導出表 21.1.7
21.2 使用Scapy實現連線埠探測 1480
21.2.1 連線埠掃描基礎 21.2.1
21.2.2 ICMP構建與傳送 21.2.2
21.2.3 TCP全連線掃描 21.2.3
21.2.4 SYN半開放掃描 21.2.4
21.2.5 UDP無狀態掃描 21.2.5
21.3 使用DPKT分析數據包 1492
21.3.1 抓取PCAP數據包 21.3.1
21.3.2 使用Google地圖定位 21.3.2
21.4 使用Scapy實現網路攻擊 1501
21.4.1 SynFlood攻擊 21.4.1
21.4.2 SockStress攻擊 21.4.2
21.4.3 DNS查詢攻擊 21.4.3
21.4.4 ARP中間人攻擊 21.4.4
21.5 使用HTTP解析庫 1514
21.5.1 Request 21.5.1
21.5.2 BeautifulSoup 21.5.2
21.5.3 Selenium 21.5.3
21.6 運用CRC32校驗技術 1535
21.6.1 使用CRC校驗技術 21.6.1
21.6.2 使用CRC圖片去重 21.6.2
21.7 網路編程中的套用 1544
21.7.1 實現網站伺服器 21.7.1
21.7.2 實現連線埠流量轉發 21.7.2
21.7.3 實現Web指紋識別 21.7.3
第三部分:軟體安全卷
第一篇:熟悉x64dbg調試器 1552
1.1 如何啟動調試器 1553
1.2 熟悉x64dbg視窗 1554
1.3 熟悉x64dbg斷點 1559
1.4 熟悉x64dbg代碼跟蹤 1562
1.5 為x64dbg編寫外掛程式 1563
第二篇:熟悉CheatEngine修改器 1570
2.1 精確數值掃描 1573
2.2 未知數值掃描 1576
2.3 浮點數掃描 1579
2.4 代碼替換功能 1580
2.5 尋找數值指針 1584
2.6 代碼注入功能 1589
2.7 多級指針查找 1594
2.8 尋找共享代碼 1601
第三篇:熟悉IDAPro靜態反彙編器 1605
3.1 IDA編寫IDC腳本 1608
3.2 IDC中常用函式 1618
第四篇:探索LyScript漏洞挖掘外掛程式 1623
4.1 如何使用外掛程式 1625
4.1.1讀取或設定暫存器參數 4.1.1
4.1.2使用調試控制系列函式 4.1.2
4.1.3使用斷點設定系列函式 4.1.3
4.1.4使用堆疊系列函式 4.1.4
4.1.5使用反彙編系列函式 4.1.5
4.1.6使用記憶體讀寫系列函式 4.1.6
4.2 針對PE檔案的掃描 1633
4.2.1獲取PE結構記憶體節表 4.2.1
4.2.2計算節表記憶體Hash散列值 4.2.2
4.2.3驗證PE啟用的保護模式 4.2.3
4.2.4 PE結構的FOA/VA/RAV轉換 4.2.4
4.2.5PE結構檢索SafeSEH記憶體地址 4.2.5
4.3 搜尋記憶體可利用指令 1644
4.3.1搜尋可利用彙編指令集 4.3.1
4.3.2搜尋可利用機器碼 4.3.2
4.4 繞過反調試保護機制 1647
4.5 探索鉤子劫持技術 1650
4.5.1探索反彙編寫出函式原理 4.5.1
4.5.2實現Hook改寫MsgBox彈窗 4.5.2
4.6 記憶體掃描與查殼實現 1657
4.7 套用層的鉤子掃描 1661
4.8 學會掃描套用堆疊 1666
4.9 記憶體處理與差異對比 1670
4.9.1實現ShellCode的靈活注入 4.9.1
4.9.2記憶體區域交換與對比 4.9.2
4.9.3記憶體與磁碟機器碼對比 4.9.3
4.10 反彙編功能的封裝 1676
4.10.1搜尋記憶體機器碼特徵 4.10.1
4.10.2搜尋記憶體反彙編特徵 4.10.2
4.10.3獲取上下一條彙編指令 4.10.3
第五篇:遠程棧溢出分析與利用 1683
5.1 緩衝區溢出與攻防博弈 1683
5.1.1 GS堆疊緩衝區溢出檢測保護 5.1.1
5.1.2 SafeSEH安全結構化異常處理保護 5.1.2
5.1.3 SEHOP堆疊SEH覆蓋保護 5.1.3
5.1.4 ASLR地址布局隨機化保護 5.1.4
5.1.5 DEP堆疊數據執行保護 5.1.5
5.2 基於ROP漏洞挖掘與利用 1687
5.2.1溢出是如何產生的 5.2.1
5.2.2漏洞分析與挖掘 5.2.2
5.2.3尋找JMP跳板指令 5.2.3
5.2.4組合腳本並攻擊 5.2.4
5.2.5 ROP繞過DEP保護 5.2.5
第六篇:逆向分析植物大戰殭屍 1710
6.1 增加自己的陽光 1710
6.2 實現自動收集陽光 1716
6.3 尋找葵花生產速度 1721
6.4 尋找陽光掉落CALL 1731
6.5 尋找任意種植CALL 1740
6.6 尋找全螢幕攻擊CALL 1748
6.7 尋找召喚殭屍CALL 1754
6.8 分析植物無冷卻 1761
6.9 分析植物攻擊速度 1771
第七篇:逆向分析反恐精英起源 1776
7.1 運用Hook實現上色透視 1776
7.1.1尋找DrawIndexedPrimitive基址 7.1.1
7.1.2劫持DrawIndexedPrimitive函式 7.1.2
7.1.3尋找模型ID與透視 7.1.3
7.2 尋找遊戲基址數據 1799
7.2.1 尋找無限金幣基址 7.2.1
7.2.2 尋找FOV視場角基址 7.2.2
7.2.3 尋找本人滑鼠角度基址 7.2.3
7.2.4 尋找本人坐標數據基址 7.2.4
7.2.5 尋找敵人坐標數據基址 7.2.5
7.2.6 尋找敵人血量基址 7.2.6
7.2.7 尋找玩家數量基址 7.2.7
7.2.8 尋找當前陣營基址 7.2.8
7.3 三角函式算法透視 1827
7.3.1 第一象限求角 7.3.1
7.3.2 第二象限求角 7.3.2
7.3.3 第三四象限求角 7.3.3
7.3.4 分析FOV視場角度 7.3.4
7.3.5 三維橫坐標轉螢幕X坐標 7.3.5
7.3.6 三維縱坐標轉螢幕Y坐標 7.3.6
7.4 矩陣透視算法分析 1835
7.4.1 尋找世界矩陣 7.4.1
7.4.2 實現矩陣透視 7.4.2
第四部分:核心安全卷
第一篇:驅動開發環境配置 1844
1.1 配置驅動開發環境 1844
1.2 配置驅動開發模板 1849
1.3 配置驅動雙機調試 1855
1.4 測試模式過DSE簽名 1862
第二篇:驅動開發基礎知識 1864
2.1 核心鍊表與結構體 1864
2.2 核心自旋鎖結構 1868
2.3 核心字元串轉換方法 1874
2.3.1 初始化字元串 2.3.1
2.3.2 字元串與整數轉換 2.3.2
2.3.3 字元串ANSI與UNICODE 2.3.3
2.3.4 字元串連線操作 2.3.4
2.4 核心字元串拷貝與比較 1886
2.4.1 核心中的空間分配 2.4.1
2.4.2 核心中的字元串拷貝 2.4.2
2.4.3 核心中的字元串比較 2.4.3
2.5 探索DRIVER_OBJECT結構 1893
2.6 核心使用IO/DPC定時器 1899
第三篇:核心驅動讀寫技術 1906
3.1 核心遠程堆分配與銷毀 1906
3.2 核心CR3切換讀寫記憶體 1912
3.3 核心MDL讀寫進程記憶體 1919
3.3.1 MDL讀取記憶體步驟 3.3.1
3.3.2 MDL寫入記憶體步驟 3.3.2
3.4 通過記憶體拷貝讀寫記憶體 1926
3.5 核心R3與R0記憶體映射 1930
3.5.1套用層映射到核心層 3.5.1
3.5.2核心層映射到套用層 3.5.2
3.6 核心進程彙編與反彙編 1940
3.6.1記憶體反彙編的套用 3.6.1
3.6.2記憶體彙編的套用 3.6.2
3.7 核心解析記憶體四級頁表 1953
3.8 核心讀寫記憶體浮點數 1958
3.9 核心讀寫記憶體多級偏移 1965
3.10 核心物理記憶體定址讀寫 1973
3.10.1物理頁轉換算法分析 3.10.1
3.10.2.實現物理頁讀記憶體 3.10.2
3.10.3實現物理頁寫記憶體 3.10.3
第四篇:核心進程執行緒操作 1982
4.1 核心中進程與句柄互轉 1983
4.1.1進程PID與進程HANDLE轉換 4.1.1
4.1.2進程PID轉換為EProcess結構 4.1.2
4.1.3進程HANDLE與EPROCESS轉換 4.1.3
4.2 核心中枚舉進執行緒與模組 1990
4.2.1核心中實現枚舉進程 4.2.1
4.2.2核心中實現枚舉執行緒 4.2.2
4.2.3核心中實現枚舉進程模組 4.2.3
4.2.4核心中實現枚舉載入的驅動 4.2.4
4.2.5核心中實現獲取特定進程PID 4.2.5
4.2.6核心中實現判斷進程狀態 4.2.6
4.3 監控進程與執行緒對象操作 2010
4.3.1實現監控進程打開與關閉 4.3.1
4.3.2實現監控進程中的模組載入 4.3.2
4.4 核心監控進程與執行緒創建 2023
4.5 核心中實現進程數據轉儲 2029
4.6 核心遍歷進程VAD結構體 2036
4.7 運用VAD隱藏R3記憶體思路 2052
4.8 核心摘鏈DKOM進程隱藏 2055
4.9 核心無痕隱藏自身分析 2059
4.10 核心強制結束進程運行 2068
第五篇:核心模組與鉤子技術 2074
5.1 核心判斷驅動載入狀態 2075
5.2 核心取KERNEL模組基址 2082
5.3 核心取套用層模組基址 2086
5.4 核心通過PEB取進程參數 2089
5.5 核心斷鏈隱藏驅動程式 2096
5.6 核心特徵碼定位搜尋 2098
5.7 取進程模組函式地址 2102
5.7.1取進程中模組基址 5.7.1
5.7.2取模組內函式基址 5.7.2
5.8 核心LDE引擎取彙編長度 2105
5.9 核心InlineHook掛鈎技術 2108
5.10 摘除InlineHook核心鉤子 2111
第六篇:核心枚舉技術 2133
6.1 核心枚舉SSDT表基址 2133
6.2 核心枚舉SSSDT表基址 2141
6.3 核心枚舉IoTimer定時器 2148
6.4 核心枚舉DpcTimer定時器 2157
6.5 核心枚舉PspCidTable句柄表 2178
6.6 核心枚舉Minifilter微過濾驅動 2190
6.7 核心枚舉LoadImage映像回調 2194
6.8 核心枚舉Registry註冊表回調 2202
6.9 核心枚舉進執行緒ObCall回調 2210
第七篇:核心監控技術 2216
7.1 核心監控進程與執行緒回調 2217
7.2 核心註冊並監控對象回調 2224
7.3 核心監視LoadImage映像回調 2234
7.4 核心運用LoadImage禁止驅動 2236
7.5 核心監控Register註冊表回調 2243
7.6 核心監控FileObject檔案回調 2253
第八篇:核心檔案與註冊表 2261
8.1 核心檔案讀寫系列函式 2261
8.1.1創建檔案或目錄 8.1.1
8.1.2重命名檔案或目錄 8.1.2
8.1.3讀取檔案大小 8.1.3
8.1.4核心檔案讀寫 8.1.4
8.1.5實現檔案讀寫傳遞 8.1.5
8.2 核心解鎖與強刪檔案 2283
8.3 核心遍歷檔案或目錄 2297
8.4 檔案微過濾驅動入門 2302
8.5 核心註冊表增刪改查 2316
8.5.1 ZwCreateKey 8.5.1
8.5.2 ZwRenameKey 8.5.2
8.5.3 ZwSetValueKey 8.5.3
8.5.4 ZwQueryValueKey 8.5.4
8.5.5 ZwEnumerateKey 8.5.5
8.5.6 ZwEnumerateValueKey 8.5.6
8.5.7 ZwDeleteValueKey 8.5.7
第九篇:核心PE結構與注入 2342
9.1 核心特徵掃描PE代碼段 2343
9.2 核心解析PE結構導出表 2358
9.3 核心解析PE結構節表 2367
9.3.1 DOS頭結構解析 9.3.1
9.3.2 PE頭結構解析 9.3.2
9.4 核心PE結構VA與FOA轉換 2374
9.4.1 FOA偏移轉換為VA偏移 9.4.1
9.4.2 VA偏移轉換為FOA偏移 9.4.2
9.4.3 RVA偏移轉換為FOA偏移 9.4.3
9.5 核心實現SSDT掛鈎與摘鉤 2382
9.6 核心掃描SSDT掛鈎狀態 2399
9.7 PE導出函式與RVA轉換 2407
9.8 核心RIP劫持實現DLL注入 2440
9.9 核心遠程執行緒實現DLL注入 2475
9.10 核心LoadLibrary實現DLL注入 2485
9.11 核心ShellCode實現執行緒注入 2492