內容簡介
加密與解密:軟體保護技術攻防指南
內容簡介
基礎知識的介紹包含Windows 例外機制、核心基礎、偵錯器、加密演算法等,核心技術方面則有反組譯技術、靜態分析技術、動態分析技術、程式植入技術、Hook 技術、漏洞分析技術、脫殼技術等;以軟體逆向為切入點,講述了軟體安全領域相關的基礎知識和技能。讀者閱讀本書後,很容易就能在逆向分析、漏洞分析、安全程式設計、病毒分析等領域進行擴展。這些知識點的相互關聯,將促使讀者開闊思路,融會貫通,領悟更多的學習方法,提升自身的學習能力。
內容簡介
基礎知識的介紹包含Windows 例外機制、核心基礎、偵錯器、加密演算法等,核心技術方面則有反組譯技術、靜態分析技術、動態分析技術、程式植入技術、Hook 技術、漏洞分析技術、脫殼技術等;以軟體逆向為切入點,講述了軟體安全領域相關的基礎知識和技能。讀者閱讀本書後,很容易就能在逆向分析、漏洞分析、安全程式設計、病毒分析等領域進行擴展。這些知識點的相互關聯,將促使讀者開闊思路,融會貫通,領悟更多的學習方法,提升自身的學習能力。
作者簡介
作者簡介
段鋼
於資訊安全領域具有廣泛影響力的安全網站「看雪學院」的創始人及營運管理者,致力於研究資訊安全等相關技術,曾與相關領域專業人士共同出版數本技術專著。2016年創立上海看雪科技有限公司後,以看雪學院為基礎,致力於營造一個能供PC、智慧型行動裝置安全研究及逆向工程開發者和愛好者討論的交流平台。
段鋼
於資訊安全領域具有廣泛影響力的安全網站「看雪學院」的創始人及營運管理者,致力於研究資訊安全等相關技術,曾與相關領域專業人士共同出版數本技術專著。2016年創立上海看雪科技有限公司後,以看雪學院為基礎,致力於營造一個能供PC、智慧型行動裝置安全研究及逆向工程開發者和愛好者討論的交流平台。
內容目錄
目錄
基礎篇
CHAPTER 01 基礎知識
1.1 什麼是加密與解密
1.1.1 軟體的加密與解密
1.1.2 軟體逆向工程
1.1.3 逆向工程分析技術
1.2 文字字元
1.2.1 ASCII 與Unicode 字元集
1.2.2 位元組儲存順序
1.3 Windows 作業系統
1.3.1 Win32 API 函數
1.3.2 WOW64
1.3.3 Windows 訊息機制
1.3.4 虛擬記憶體
偵錯篇
CHAPTER 02 動態分析技術
2.1 OllyDbg 偵錯器
2.1.1 OllyDbg 的介面
2.1.2 OllyDbg 的設定
2.1.3 基本操作
2.1.4 常用中斷點
2.1.5 外掛程式
2.1.6 Run trace
2.1.7 Hit trace
2.1.8 偵錯符號
2.1.9 載入程式
2.1.10 OllyDbg 的常見問題
2.2 x64dbg 偵錯器
2.3 MDebug 偵錯器
2.3.1 MDebug 的介面
2.3.2 運算式
2.3.3 偵錯
2.3.4 中斷點
2.3.5 MDebug 的其他功能
2.4 WinDbg 偵錯器
2.4.1 WinDbg 的安裝與設定
2.4.2 偵錯過程
2.4.3 中斷點指令
2.4.4 堆疊視窗
2.4.5 記憶體指令
2.4.6 指令稿
2.4.7 偵錯功能擴充
2.4.8 小結
CHAPTER 03 靜態分析技術
3.1 檔案類型分析
3.2 反組譯引擎
3.2.1 OllyDbg 的ODDisasm
3.2.2 BeaEngine
3.2.3 Udis86
3.2.4 Capstone
3.2.5 AsmJit
3.2.6 Keystone
3.2.7 小結
3.3 靜態反組譯
3.3.1 IDA Pro 簡介
3.3.2 IDA 的設定
3.3.3 IDA 主視窗
3.3.4 交換參考
3.3.5 參考重新命名
3.3.6 標籤的用法
3.3.7 格式化指令運算元
3.3.8 函數的操作
3.3.9 程式和資料轉換
3.3.10 字串
3.3.11 陣列
3.3.12 結構
3.3.13 列舉類型
3.3.14 變數
3.3.15 FLIRT
3.3.16 IDC 指令稿
3.3.17 外掛程式
3.3.18 IDA 偵錯器
3.3.19 遠端偵錯
3.3.20 其他功能
3.3.21 小結
3.4 十六進位工具
3.5 靜態分析技術應用實例
3.5.1 解密初步
3.5.2 逆向工程初步
解密篇
CHAPTER 04 逆向工程分析技術
4.1 32 位元軟體逆向工程技術
4.1.1 啟動函數
4.1.2 函數
4.1.3 資料結構
4.1.4 虛擬函數
4.1.5 控制敘述
4.1.6 循環敘述
4.1.7 數學運算子
4.1.8 文字字串
4.1.9 指令修改技巧
4.2 64 位元軟體逆向工程技術
4.2.1 暫存器
4.2.2 函數
4.2.3 資料結構
4.2.4 控制敘述
4.2.5 循環敘述
4.2.6 數學運算子
4.2.7 虛擬函數
4.2.8 小結
CHAPTER 05 展示版本保護技術
5.1 序號保護方式
5.1.1 序號保護機制
5.1.2 如何攻擊序號保護機制
5.1.3 字串比較形式
5.1.4 製作註冊機
5.2 警告視窗
5.3 時間限制
5.3.1 計時器
5.3.2 時間限制
5.3.3 拆解時間限制保護
5.4 選單功能限制
5.4.1 相關函數
5.4.2 拆解選單限制保護
5.5 KeyFile 保護
5.5.1 相關API 函數
5.5.2 拆解KeyFile 保護
5.6 網路驗證
5.6.1 相關函數
5.6.2 破解網路驗證的一般想法
5.7 光碟檢測
5.7.1 相關函數
5.7.2 拆解光碟保護
5.8 只執行1 個實例
5.8.1 實現方法
5.8.2 實例
5.9 常用中斷點設定技巧
CHAPTER 06 加密演算法
6.1 單向雜湊演算法
6.1.1 MD5 演算法
6.1.2 SHA 演算法
6.1.3 SM3 密碼雜湊演算法
6.1.4 小結
6.2 對稱加密演算法
6.2.1 RC4 流密碼
6.2.2 TEA 演算法
6.2.3 IDEA 演算法
6.2.4 BlowFish 演算法
6.2.5 AES 演算法
6.2.6 SM4 區塊編碼器演算法
6.2.7 小結
6.3 公開金鑰加密演算法
6.3.1 RSA 演算法
6.3.2 ElGamal 公開金鑰演算法
6.3.3 DSA 數位簽章演算法
6.3.4 橢圓曲線密碼編碼學
6.3.5 SM2 演算法
6.4 其他演算法
6.4.1 CRC32 演算法
6.4.2 Base64 編碼
6.5 常見的加密函數庫介面及其識別
6.5.1 Miracl 大數運算函數庫
6.5.2 FGInt
6.5.3 其他加密演算法函數庫介紹
6.6 加密演算法在軟體保護中的應用
系統篇
CHAPTER 07 Windows 核心基礎
7.1 核心理論基礎
7.1.1 許可權等級
7.1.2 記憶體空間版面配置
7.1.3 Windows 與核心啟動過程
7.1.4 Windows R3 與R0 通訊
7.1.5 核心函數
7.1.6 核心驅動模組
7.2 核心重要資料結構
7.2.1 核心物件
7.2.2 SSDT
7.2.3 TEB
7.2.4 PEB
7.3 核心偵錯基礎
7.3.1 使用WinDbg 架設雙機偵錯環境
7.3.2 載入核心驅動並設定符號表
7.3.3 SSDT 與Shadow SSDT 的檢視
CHAPTER 08 Windows 下的例外處理
8.1 例外處理的基本概念
8.1.1 例外列表
8.1.2 例外處理的基本過程
8.2 SEH 的概念及基礎
8.2.1 SEH 的相關資料結構
8.2.2 SEH 處理常式的安裝和移除
8.2.3 SEH 實例追蹤
8.3 SEH 例外處理常式原理及設計
8.3.1 例外分發的詳細過程
8.3.2 執行緒例外處理
8.3.3 例外處理的堆疊展開
8.3.4 MSC 編譯器對執行緒例外處理的增強
8.3.5 頂層例外處理
8.3.6 例外處理常式的安全性
8.4 向量化例外處理
8.4.1 向量化例外處理的使用
8.4.2 VEH 與SEH 的異同
8.4.3 向量化例外處理的新內容
8.5 x64 平台上的例外處理
8.5.1 原生x64 程式的例外分發
8.5.2 WOW64 下的例外分發
8.6 例外處理常式設計中的注意事項
8.7 例外處理的實際應用
8.7.1 使用SEH 對使用者輸入進行驗證
8.7.2 SEH 在加密與解密中的應用
8.7.3 用VEH 實現API Hook
8.8 本章小結
CHAPTER 09 Win32 偵錯API
9.1 偵錯相關函數簡要說明
9.2 偵錯事件
9.3 建立並追蹤處理程序
9.4 偵錯循環本體
9.5 處理偵錯事件
9.6 執行緒環境
9.7 將程式植入處理程序
CHAPTER 10 VT 技術
10.1 硬體虛擬化的基本概念
10.1.1 概述
10.1.2 相關結構和組合語言指令
10.1.3 EPT 機制
10.2 VT 技術的應用
10.2.1 編譯執行ShadowWalker
10.2.2 分析Hypervisor
10.2.3 檢測VT 支援情況
10.2.4 VMCS 的設定
10.2.5 EPT 的設定
10.2.6 開啟VT
10.2.7 記憶體隱藏的實現
10.3 VT 偵錯方法
CHAPTER 11 PE 檔案格式
11.1 PE 的基本概念
11.1.1 基底位址
11.1.2 虛擬位址
11.1.3 相對虛擬位址
11.1.4 檔案偏移位址
11.2 MS-DOS 表頭
11.3 PE 檔案表頭
11.3.1 Signature 欄位
11.3.2 IMAGE_FILE_HEADER 結構
11.3.3 IMAGE_OPTIONAL_HEADER結構
11.4 區塊
11.4.1 區塊表
11.4.2 常見區塊與區塊合併
11.4.3 區塊的對齊值
11.4.4 檔案偏移與虛擬位址的轉換
11.5 輸入表
11.5.1 輸入函數的呼叫
11.5.2 輸入表的結構
11.5.3 輸入位址表
11.5.4 輸入表實例分析
11.6 綁定輸入
11.7 輸出表
11.7.1 輸出表的結構
11.7.2 輸出表實例分析
11.8 基址重定位
基礎篇
CHAPTER 01 基礎知識
1.1 什麼是加密與解密
1.1.1 軟體的加密與解密
1.1.2 軟體逆向工程
1.1.3 逆向工程分析技術
1.2 文字字元
1.2.1 ASCII 與Unicode 字元集
1.2.2 位元組儲存順序
1.3 Windows 作業系統
1.3.1 Win32 API 函數
1.3.2 WOW64
1.3.3 Windows 訊息機制
1.3.4 虛擬記憶體
偵錯篇
CHAPTER 02 動態分析技術
2.1 OllyDbg 偵錯器
2.1.1 OllyDbg 的介面
2.1.2 OllyDbg 的設定
2.1.3 基本操作
2.1.4 常用中斷點
2.1.5 外掛程式
2.1.6 Run trace
2.1.7 Hit trace
2.1.8 偵錯符號
2.1.9 載入程式
2.1.10 OllyDbg 的常見問題
2.2 x64dbg 偵錯器
2.3 MDebug 偵錯器
2.3.1 MDebug 的介面
2.3.2 運算式
2.3.3 偵錯
2.3.4 中斷點
2.3.5 MDebug 的其他功能
2.4 WinDbg 偵錯器
2.4.1 WinDbg 的安裝與設定
2.4.2 偵錯過程
2.4.3 中斷點指令
2.4.4 堆疊視窗
2.4.5 記憶體指令
2.4.6 指令稿
2.4.7 偵錯功能擴充
2.4.8 小結
CHAPTER 03 靜態分析技術
3.1 檔案類型分析
3.2 反組譯引擎
3.2.1 OllyDbg 的ODDisasm
3.2.2 BeaEngine
3.2.3 Udis86
3.2.4 Capstone
3.2.5 AsmJit
3.2.6 Keystone
3.2.7 小結
3.3 靜態反組譯
3.3.1 IDA Pro 簡介
3.3.2 IDA 的設定
3.3.3 IDA 主視窗
3.3.4 交換參考
3.3.5 參考重新命名
3.3.6 標籤的用法
3.3.7 格式化指令運算元
3.3.8 函數的操作
3.3.9 程式和資料轉換
3.3.10 字串
3.3.11 陣列
3.3.12 結構
3.3.13 列舉類型
3.3.14 變數
3.3.15 FLIRT
3.3.16 IDC 指令稿
3.3.17 外掛程式
3.3.18 IDA 偵錯器
3.3.19 遠端偵錯
3.3.20 其他功能
3.3.21 小結
3.4 十六進位工具
3.5 靜態分析技術應用實例
3.5.1 解密初步
3.5.2 逆向工程初步
解密篇
CHAPTER 04 逆向工程分析技術
4.1 32 位元軟體逆向工程技術
4.1.1 啟動函數
4.1.2 函數
4.1.3 資料結構
4.1.4 虛擬函數
4.1.5 控制敘述
4.1.6 循環敘述
4.1.7 數學運算子
4.1.8 文字字串
4.1.9 指令修改技巧
4.2 64 位元軟體逆向工程技術
4.2.1 暫存器
4.2.2 函數
4.2.3 資料結構
4.2.4 控制敘述
4.2.5 循環敘述
4.2.6 數學運算子
4.2.7 虛擬函數
4.2.8 小結
CHAPTER 05 展示版本保護技術
5.1 序號保護方式
5.1.1 序號保護機制
5.1.2 如何攻擊序號保護機制
5.1.3 字串比較形式
5.1.4 製作註冊機
5.2 警告視窗
5.3 時間限制
5.3.1 計時器
5.3.2 時間限制
5.3.3 拆解時間限制保護
5.4 選單功能限制
5.4.1 相關函數
5.4.2 拆解選單限制保護
5.5 KeyFile 保護
5.5.1 相關API 函數
5.5.2 拆解KeyFile 保護
5.6 網路驗證
5.6.1 相關函數
5.6.2 破解網路驗證的一般想法
5.7 光碟檢測
5.7.1 相關函數
5.7.2 拆解光碟保護
5.8 只執行1 個實例
5.8.1 實現方法
5.8.2 實例
5.9 常用中斷點設定技巧
CHAPTER 06 加密演算法
6.1 單向雜湊演算法
6.1.1 MD5 演算法
6.1.2 SHA 演算法
6.1.3 SM3 密碼雜湊演算法
6.1.4 小結
6.2 對稱加密演算法
6.2.1 RC4 流密碼
6.2.2 TEA 演算法
6.2.3 IDEA 演算法
6.2.4 BlowFish 演算法
6.2.5 AES 演算法
6.2.6 SM4 區塊編碼器演算法
6.2.7 小結
6.3 公開金鑰加密演算法
6.3.1 RSA 演算法
6.3.2 ElGamal 公開金鑰演算法
6.3.3 DSA 數位簽章演算法
6.3.4 橢圓曲線密碼編碼學
6.3.5 SM2 演算法
6.4 其他演算法
6.4.1 CRC32 演算法
6.4.2 Base64 編碼
6.5 常見的加密函數庫介面及其識別
6.5.1 Miracl 大數運算函數庫
6.5.2 FGInt
6.5.3 其他加密演算法函數庫介紹
6.6 加密演算法在軟體保護中的應用
系統篇
CHAPTER 07 Windows 核心基礎
7.1 核心理論基礎
7.1.1 許可權等級
7.1.2 記憶體空間版面配置
7.1.3 Windows 與核心啟動過程
7.1.4 Windows R3 與R0 通訊
7.1.5 核心函數
7.1.6 核心驅動模組
7.2 核心重要資料結構
7.2.1 核心物件
7.2.2 SSDT
7.2.3 TEB
7.2.4 PEB
7.3 核心偵錯基礎
7.3.1 使用WinDbg 架設雙機偵錯環境
7.3.2 載入核心驅動並設定符號表
7.3.3 SSDT 與Shadow SSDT 的檢視
CHAPTER 08 Windows 下的例外處理
8.1 例外處理的基本概念
8.1.1 例外列表
8.1.2 例外處理的基本過程
8.2 SEH 的概念及基礎
8.2.1 SEH 的相關資料結構
8.2.2 SEH 處理常式的安裝和移除
8.2.3 SEH 實例追蹤
8.3 SEH 例外處理常式原理及設計
8.3.1 例外分發的詳細過程
8.3.2 執行緒例外處理
8.3.3 例外處理的堆疊展開
8.3.4 MSC 編譯器對執行緒例外處理的增強
8.3.5 頂層例外處理
8.3.6 例外處理常式的安全性
8.4 向量化例外處理
8.4.1 向量化例外處理的使用
8.4.2 VEH 與SEH 的異同
8.4.3 向量化例外處理的新內容
8.5 x64 平台上的例外處理
8.5.1 原生x64 程式的例外分發
8.5.2 WOW64 下的例外分發
8.6 例外處理常式設計中的注意事項
8.7 例外處理的實際應用
8.7.1 使用SEH 對使用者輸入進行驗證
8.7.2 SEH 在加密與解密中的應用
8.7.3 用VEH 實現API Hook
8.8 本章小結
CHAPTER 09 Win32 偵錯API
9.1 偵錯相關函數簡要說明
9.2 偵錯事件
9.3 建立並追蹤處理程序
9.4 偵錯循環本體
9.5 處理偵錯事件
9.6 執行緒環境
9.7 將程式植入處理程序
CHAPTER 10 VT 技術
10.1 硬體虛擬化的基本概念
10.1.1 概述
10.1.2 相關結構和組合語言指令
10.1.3 EPT 機制
10.2 VT 技術的應用
10.2.1 編譯執行ShadowWalker
10.2.2 分析Hypervisor
10.2.3 檢測VT 支援情況
10.2.4 VMCS 的設定
10.2.5 EPT 的設定
10.2.6 開啟VT
10.2.7 記憶體隱藏的實現
10.3 VT 偵錯方法
CHAPTER 11 PE 檔案格式
11.1 PE 的基本概念
11.1.1 基底位址
11.1.2 虛擬位址
11.1.3 相對虛擬位址
11.1.4 檔案偏移位址
11.2 MS-DOS 表頭
11.3 PE 檔案表頭
11.3.1 Signature 欄位
11.3.2 IMAGE_FILE_HEADER 結構
11.3.3 IMAGE_OPTIONAL_HEADER結構
11.4 區塊
11.4.1 區塊表
11.4.2 常見區塊與區塊合併
11.4.3 區塊的對齊值
11.4.4 檔案偏移與虛擬位址的轉換
11.5 輸入表
11.5.1 輸入函數的呼叫
11.5.2 輸入表的結構
11.5.3 輸入位址表
11.5.4 輸入表實例分析
11.6 綁定輸入
11.7 輸出表
11.7.1 輸出表的結構
11.7.2 輸出表實例分析
11.8 基址重定位