黑客免殺攻防

黑客免殺攻防

《黑客免殺攻防》國內首部關於黑客免殺技術的專著,旨在為反病毒工程師剖析各種惡意軟體和應對各種安全威脅提供全面指導。

基本信息

內容介紹

不僅從攻擊者(黑客)的視角全方位揭示了黑客免殺技術的常用方法、常用技術和思想原理,還從防禦者(反病毒工程師)的視角深入講解了遏制免殺技術的具體方法策略。從純技術的角度講,本書不僅詳細講解了免殺技術的各種細節和方法,還詳細講解了PE檔案、逆向工程、C++殼的編寫、免殺殼的打造、脫殼、Rootkit等安全技術的細節。

《黑客免殺攻防》共20章,分為三大部分:基礎篇(第1~6章)詳細介紹了黑客免殺技術的初級技巧,包括查找(修改)特徵碼、常見特徵碼繞過技巧、殼在免殺中的套用、花指令和其他免殺基礎知識;高級篇(第7~16章)深入講解了PE檔案、逆向工程、C++殼的編寫、免殺殼的打造、脫殼、Rootkit等常用安全技術的原理和細節,以及黑客免殺技術是如何套用它們的,為反病毒工程師應對各種惡意軟體提供了原理性指導;擴展篇(第17~20章)為遏制黑客免殺技術提供了思路和具體的方案。

作者介紹

任曉琿,資深安全技術工程師,華章“信息安全技術叢書”專家顧問,致力於免殺技術和反病毒技術的實踐。對軟體安全、逆向工程、Rootkit、加殼與脫殼等技術有較深入的研究和理解,積累了豐富的經驗。北京藍森科技有限公司創始人,黑客反病毒論壇創始人,邪惡八進制團隊成員,資深培訓講師,國內知名信息安全培訓品牌15PB的創始人。目前專注於計算機安全的中高端培訓。

作品目錄

前言
基礎篇 初級免殺技術
第1章 變臉
1.1 為何變臉
1.2 何為變臉
1.3 免殺的發展史
1.4 免殺技術的簡單原理
1.5 免殺與其他技術的區別
1.5.1 免殺不是Rootkit技術
1.5.2 免殺不是加密解密技術
1.6 小結
第2章 免殺基礎知識
2.1 如何開始免殺
2.2 反病毒軟體原理與反病毒技術介紹
2.2.1 反病毒軟體的工作原理
2.2.2 基於檔案掃描的反病毒技術
2.2.3 基於記憶體掃描的反病毒技術
2.2.4 基於行為監控的反病毒技術
2.2.5 基於新興技術的反病毒技術
2.2.6 反病毒技術前沿
2.2.7 反病毒技術展望
2.3 了解PE檔案
2.3.1 什麼是PE檔案
2.3.2 PE檔案的結構
2.4 免殺原理
2.4.1 檔案免殺原理
2.4.2 記憶體免殺原理
2.4.3 行為免殺原理
2.5 工具脫殼技巧
2.5.1 殼的分類
2.5.2 免殺與脫殼是什麼關係
2.5.3 使用專用脫殼工具脫殼
2.5.4 使用通用脫殼工具脫殼
2.6 小結
第3章 免殺與特徵碼
3.1 特徵碼免殺技術
3.1.1 理想狀態下的免殺
3.1.2 由腳本木馬免殺理解特徵碼
3.2 特徵碼定位原理
3.2.1 特徵碼逐塊填充定位原理
3.2.2 特徵碼逐塊暴露定位原理
3.2.3 特徵碼混合定位原理
3.3 腳本木馬定位特徵碼
3.4 MyCCL查找檔案特徵碼
3.4.1 MyCCL的典型套用
3.4.2 針對MyCCL的一點思考
3.5 MyCCL查找記憶體特徵碼
3.6 特徵碼修改方法
3.6.1 簡單的特徵碼修改
3.6.2 特徵碼修改進階
3.7 小結
第4章 其他免殺技術
4.1 修改入口點免殺
4.2 使用VMProtect加密
4.3 Overlay附加數據的處理及套用
4.4 驅動程式免殺修改技巧
4.4.1 驅動程式的常見免殺方法
4.4.2 驅動程式的手工免殺思路
4.5 補丁在免殺中的套用
4.6 PE檔案進階介紹
4.6.1 PE檔案格式
4.6.2 虛擬記憶體的簡單介紹
4.6.3 PE檔案的記憶體映射
4.7 網頁木馬的免殺
4.7.1 腳本木馬免殺
4.7.2 網頁掛馬的免殺
4.8 小結
第5章 花指令與免殺
5.1 什麼是花指令
5.2 腳本木馬的花指令套用
5.3 花指令的根基-彙編語言
5.3.1 認識彙編
5.3.2 通過反彙編添加任意功能
5.4 花指令入門
5.5 花指令在免殺領域的套用
5.5.1 花指令的套用技巧
5.5.2 花指令的修改技巧簡介
5.5.3 空白區域尋找與加空白區段
5.6 花指令的高級套用
5.6.1 花指令的提取與快速套用
5.6.2 SEH異常的套用
5.7 小結
第6章 殼在免殺中的套用
6.1 殼的基礎知識
6.2 殼在免殺領域的套用
6.2.1 加殼的免殺原理
6.2.2 FreeRes多重加殼
6.3 殼的修改技巧
6.3.1 殼的初級修改
6.3.2 製作通用補丁
6.4 小結
高級篇 免殺技術進階
第7章 PE檔案格式詳解
7.1 MS-DOS頭
7.1.1 重要欄位
7.1.2 其他欄位
7.2 PE檔案頭
7.2.1 Signature欄位
7.2.2 IMAGE_FILE_HEADER結構
7.2.3 IMAGE_OPTIONAL_HEADER結構(x86/x64)
7.2.4 數據目錄表
7.3 區段表
7.3.1 IMAGE_SECTION_HEADER結構
7.3.2 區段名功能約定
7.3.3 區段對齊詳解
7.3.4 地址轉換
7.4 導出表
7.4.1 IMAGE_EXPORT_DIRECTORY結構
7.4.2 識別導出表
7.5 導入表
7.5.1 IMAGE_IMPORT_DESCRIPTOR結構
7.5.2 識別導入表
7.6 資源
7.6.1 資源結構
7.6.2 識別資源
7.7 異常
7.8 安全
7.8.1 安全目錄結構
7.8.2 識別安全結構
7.9 基址重定位
7.9.1 基址重定位表結構
7.9.2 識別基址重定位表
7.10 調試
7.11 特殊結構數據(著作權)
7.12 全局指針
7.13 TLS
7.13.1 TLS的回調函式
7.13.2 TLS的結構(x86/x64)
7.13.3 識別TLS
7.14 載入配置(x86/x64)
7.15 綁定導入表
7.15.1 綁定導入表結構
7.15.2 識別綁定導入表
7.16 導入地址表
7.17 延遲載入表
7.17.1 延遲載入表結構
7.17.2 識別延遲載入表
7.18 COM描述符
7.19 小結
第8章 PE檔案知識在免殺中的套用
8.1 PE檔案與免殺思路
8.1.1 移動PE檔案頭位置免殺
8.1.2 導入表移動免殺
8.1.3 導出表移動免殺
8.2 PE檔案與反啟發式掃描
8.2.1 最後一個區段為代碼段
8.2.2 可疑的區段頭部屬性
8.2.3 可疑的PE選項頭的有效尺寸值
8.2.4 可疑的代碼節名稱
8.2.5 多個PE頭部
8.2.6 導入表項存在可疑導入
8.3 一個稍顯複雜的例子-隱藏導入表
8.3.1 操作原理與先決條件
8.3.2 修改PE檔案
8.3.3 構造我們的反彙編代碼
8.4 小結
第9章 軟體逆向工程
9.1 準備工作
9.1.1 要準備的工具及基礎知識
9.1.2 程式是從哪裡開始運行的
9.2 一個簡單的小例子
9.3 函式識別初探
9.4 if-else分支
9.4.1 以常量為判斷條件的簡單if-else分支
9.4.2 以變數為判斷條件的簡單if-else分支
9.4.3 以常量為判斷條件的複雜if-else分支
9.4.4 以變數為判斷條件的複雜if-else分支
9.4.5 識別三目運算符
9.5 循環分支
9.5.1 do-while循環
9.5.2 while循環
9.5.3 for循環
9.5.4 循環體的語句外提最佳化
9.6 switch-case分支
9.6.1 簡單switch-case分支識別技巧
9.6.2 複雜分支的switch-case識別
9.6.3 switch-case分支結構與稀疏矩陣
9.6.4 switch-case分支結構與平衡二叉樹
9.7 加法與減法的識別與最佳化原理
9.7.1 加法的識別與最佳化
9.7.2 減法的識別與最佳化
9.8 乘法與除法的識別與最佳化原理
9.8.1 乘法的位移最佳化
9.8.2 乘法的lea指令最佳化
9.8.3 除法與倒數相乘
9.8.4 倒數相乘與定點運算的配合
9.8.5 除法運算的識別與最佳化
9.8.6 取模運算的識別與最佳化
9.9 指針與數組
9.9.1 指針與數組的淵源
9.9.2 數組的不同表達方式
9.10 數組、結構體與對象
9.10.1 數組與結構體
9.10.2 結構體與類
9.11 變數作用域的識別
9.12 識別構造與析構函式
9.12.1 快速識別出類
9.12.2 識別構造函式
9.12.3 識別析構函式
9.13 虛函式與純虛函式的識別
9.13.1 識別簡單的虛函式
9.13.2 識別較複雜的虛函式
9.14  正確識別類的繼承關係
9.15 最後一役
9.15.1 MFC逆向初探
9.15.2 分析BypassUAC.exe
9.16 小結
第10章 源碼級免殺
10.1 怎樣定位產生特徵的原始碼
10.1.1 定位檔案特徵
10.1.2 定位行為特徵
10.2 基於源碼的特徵修改
10.2.1 變換編譯器與編譯選項
10.2.2 添加垃圾代碼
10.2.3 語法變換
10.2.4 添加彙編花指令
10.3 小結
第11章 詳解C++殼的編寫
11.1 了解殼的運行流程
11.2 設計一個純C++編寫的殼
11.2.1 用C++編寫的殼應該是什麼樣的
11.2.2 編寫過程中會遇到的問題
11.3 用C++寫一個簡單的殼
11.3.1 配置工程
11.3.2 編寫Stub部分
11.3.3 編寫加殼部分
11.3.4 編寫界面部分
11.4 設計一個由C++編寫的專業殼
11.4.1 為問題找到答案
11.4.2 設計專業殼的框架
11.4.3 如何設計Stub部分
11.4.4 如何設計加殼部分
11.4.5 需要注意的細節問題
11.5 怎樣調試由C++編寫的Stub部分
11.6 小結
第12章 黑客是怎樣打造免殺殼的
12.1 免殺殼與加密殼的異同
12.2 導入表加密
12.3 代碼混淆與代碼亂序
12.4 附加驅動
12.5 小結
第13章 脫殼技術
13.1 尋找OEP
13.1.1 利用記憶體斷點
13.1.2 利用堆疊平衡
13.1.3 利用編譯語言特點
13.1.4 利用跨區段跳轉
13.2 轉儲記憶體映像
13.3 重建導入表
13.3.1 導入表重建原理
13.3.2 使用ImportREC重建導入表
13.4 小結
第14章 Rootkit基礎
14.1 構建一個Rootkit基礎環境
14.1.1 構建開發環境
14.1.2 構建基於Visual Studio 2012的調試環境
14.1.3 構建基於WinDbg的調試環境
14.1.4 將Rootkit載入到系統
14.1.5 創建一個簡單的驅動並調試
14.2 何為Ring0層
14.3 關鍵表
14.4 記憶體分頁
14.4.1 地址轉譯
14.4.2 記憶體訪問檢查
14.4.3 Windows對重要表的保護
14.5 記憶體描述符表
14.6 中斷描述符表(IDT)
14.7 系統服務調度表
14.8 控制暫存器
14.8.1 利用CR0禁用記憶體保護機制
14.8.2 其他控制暫存器
14.9 小結
第15章 Rootkit在免殺中的套用
15.1 用戶模式Rootkit
15.1.1 DLL遠程注入技巧
15.1.2 內聯鉤子
15.1.3 導入地址表鉤子
15.1.4 一個保護檔案不被刪除的例子
15.2 核心編程基礎
15.2.1 核心編程環境與用戶層編程環境的異同
15.2.2 如何選擇Windows驅動開發模型
15.2.3 驅動設備與請求處理
15.2.4 核心編程中的數據類型
15.2.5 函式調用
15.2.6 Windows核心編程的特點
15.3 核心模式Rootkit
15.3.1 SYSENTER鉤子
15.3.2 SSDT鉤子
15.3.3 內聯鉤子
15.3.4 IRP鉤子
15.3.5 LADDR鉤子
15.3.6 IDT鉤子
15.3.7 IOAPIC鉤子
15.4 小結
第16章 免殺技術前沿
16.1 免殺技術的發展趨勢
16.2 免殺前沿之突破主動防禦
16.2.1 “移花接木”之螢幕截圖突破主動防禦
16.2.2 “暗渡陳倉”之利用可信進程突破主動防禦
16.2.3 “釜底抽薪”之利用系統進程突破主動防禦
16.2.4 “順手牽羊”之利用邏輯漏洞突破主動防禦
16.2.5 “渾水摸魚”之利用變形複製突破主動防禦
16.2.6 “金蟬脫殼”之利用異同逃逸虛擬機
16.2.7 “借屍還魂”之利用替換檔案突破主動防禦
16.2.8 “借刀殺人”之利用調試接口突破主動防禦
16.3 黑客免殺技術的展望
16.4 小結
擴展篇 遏制免殺技術初探
第17章 淺談部分免殺技巧的遏制
17.1 盯緊PE檔案
17.2 盯緊程式行為
17.3 小結
第18章 反特徵碼定位
18.1 釋放干擾碼
18.2 定位行為的判定
18.3 設定“靶特徵碼”
18.4 小結
第19章 遏制免殺與Anti Rootkit
19.1 適當的監控
19.2 基本檢測邏輯
19.3 Rootkit檢測方法初探
19.4 小結
第20章 淺談反病毒產品的改進
20.1 雲查殺與本地查殺緊密結合
20.2 注重感染型病毒木馬的清除工作
20.3 精進啟發式掃描解決效率問題
20.4 小結
附錄A 80x86彙編基礎知識

相關詞條

熱門詞條

聯絡我們