第0章準備知識 1
0.1Win32程序 1
0.2 PE程序文件 3
0.3 Win32進程的啟動 5
0.4 PE程序的加載 7
第1部分軟件保護
第1章 軟件保護技術 11
1.1 反調試 11
1.1.1 函數檢測 12
1.1.2 數據檢測 12
1.1.3 符號檢測 13
1.1.4 窗口檢測 13
1.1.5 特征碼檢測 14
1.1.6 行為檢測 14
1.1.7 斷點檢測 15
1.1.8 功能破壞 16
1.1.9 行為占用 16
1.2 反虛擬機 17
1.3 數據校驗 18
1.4 導入表加密 19
1.5 模塊拷貝移位 27
1.6 資源加密 29
1.7 代碼加密 30
1.7.1 代碼變形 30
1.7.2 花指令 33
1.7.3 代碼亂序 33
1.7.4 多分支 35
1.7.5 call鏈 36
1.8 代碼虛擬化 37
1.8.1 堆機 39
1.8.2 棧機 40
1.8.3 狀態機 42
1.9 腳本引擎 42
1.10 網絡加密 42
1.11 硬件加密 42
1.12 代碼簽名 43
第2章 軟件保護繫統 44
2.1 保護功能 44
2.1.1 試用控制 44
2.1.2 授權控制 45
2.1.3 功能擴展 45
2.2 保護繫統 45
2.2.1 WinLicense和Themida 46
2.2.2 VMProtect 47
第3章 軟件保護強化 48
3.1 設計優化 49
3.1.1技巧1:代碼習慣優化 49
3.1.2 技巧2:SDK使用優化 51
3.1.3 技巧3:驗證保護繫統 52
3.2 加殼優化 52
3.2.1 技巧1:側重選擇代碼加密 53
3.2.2 技巧2:精選被保護代碼 54
3.2.3 技巧3:充分測試 55
第2部分軟件破解
第4章 軟件破解工具 58
4.1 調試分析工具 58
4.1.1 OllyDbg 58
4.1.2 WinDBG 59
4.1.3 IDA 60
4.2 修改工具 60
4.2.1 LordPE 60
4.2.2 010Editor 61
4.3 自動化工具 61
第5章 軟件破解技術 62
5.1 靜態分析 63
5.1.1 基本信息分析 63
5.1.2 代碼靜態分析 67
5.2 軟件調試 68
5.2.1 一般調試原理 68
5.2.2 偽調試技術 72
5.2.3 本地調試 73
5.2.4 遠程調試 74
5.2.5 虛擬機調試 76
5.3 反反調試 77
5.4 HOOK 78
5.4.1 代碼HOOK 79
5.4.2 函數HOOK 86
5.4.3 模塊HOOK 86
5.4.4 導出表HOOK 92
5.5 代碼注入 94
5.6 補丁 101
5.6.1 冷補丁 101
5.6.2 熱補丁 102
5.6.3 SMC 102
5.6.4 虛擬化補丁 103
5.7 模塊重定位 103
5.8 沙箱技術 104
5.9 虛擬化 106
5.10 代碼虛擬機 107
5.10.1 OP分支探測 108
5.10.2 OP調試 113
5.11 自動化技術 114
5.11.1 代碼追蹤 114
5.11.2 預執行 118
5.11.3 代碼簡化 120
5.11.4 代碼重建 124
5.11.5 塊執行 125
5.11.6 多分支剔除 126
5.11.7 小結 129
5.12 動態分析 129
5.12.1 著色 129
5.12.2 黑盒測試 132
5.13 功能模擬 132
5.13.1 授權模擬 132
5.13.2 網絡模擬 134
5.13.3 加密狗模擬 134
5.14 脫殼 134
5.14.1 導入表重建 135
5.14.2 資源重建 149
5.14.3 區段重建 152
5.14.4 OEP定位 154
5.14.5 PE頭修復 159
5.14.6 重定位修復 159
5.14.7 PE重建 163
5.14.8 補區段 164
5.15 進程快照技術 166
5.15.1 進程快照技術概述 166
5.15.2 快照脫殼 178
5.16 代碼回溯技術 180
第6章 軟件分析技巧 184
6.1 技巧1:精確代碼範圍 184
6.2 技巧2:多用對比參考 186
6.3 技巧3:逆向思考 187
6.4 技巧4:多利用自動化優勢 187
6.5 技巧5:利用環境優勢 187
6.6 技巧6:盡量避免算法分析 187
6.7 技巧7:夠用原則 188
第3部分自己動手
第7章 打造函數監視器 190
7.1 制定功能 190
7.2 確定技術方案 191
7.3 開發籌備 192
7.4 具體實現 193
7.4.1 啟動目標進程並注入xVMRuntime模塊 196
7.4.2 通信協議 199
7.4.3 事件設定 201
7.4.4 輔助調試功能 216
7.4.5 技術問題 217
7.5 效果演示 217
第8章 打造資源重建工具 220
8.1 制定功能 220
8.2 確定技術方案 220
8.3 開發籌備 222
8.4 具體實現 222
8.4.1 數據結構及通信協議 222
8.4.2 獲取內存段資源數據 223
8.4.3 監控資源函數獲取數據 225
8.4.4 強制搜索內存窮舉獲取數據 227
8.4.5 重建資源區段 230
8.4.6 技術問題 234
8.5 效果演示 235
第9章 打造重定位修復工具 238
9.1 制定功能 238
9.2 確定技術方案 238
9.3 開發籌備 239
9.4 具體實現 239
9.4.1 通信協議 239
9.4.2 注入模塊 240
9.4.3 抓取內存快照 240
9.4.4 對比內存數據 244
9.4.5 重建重定位區段 245
9.5 效果演示 248
9.5.1 DLL模塊重定位修復 249
9.5.2 主模塊重定位修復 251
第10章 打造進程拍照機 253
10.1 制定功能 253
10.2 確定技術方案 253
10.3 開發籌備 255
10.4 具體實現 255
10.4.1 先期模塊注入 255
10.4.2 接管進程內存管理 261
10.4.3 建立函數調用中間層 268
10.4.4 實現場景載入功能 269
10.4.5 轉儲並修正映像及相關數據 270
10.4.6 增加TIB轉儲 274
10.5 效果演示 276
10.5.1 WinLicense測試 276
10.5.2 VMProtect測試 279
第11章 打造函數通用追蹤器 281
11.1 制定功能 281
11.2 確定技術方案 281
11.3 開發籌備 282
11.4 具體實現 283
11.4.1 建立插件框架 283
11.4.2 分層式虛擬機 284
11.4.3 調用代碼查找識別 287
11.5 追蹤函數 294
11.6 重建導入表 299
11.7 修復調用代碼 304
11.7.1 內存式修復 305
11.7.2 文件式修復 307
11.8 效果演示 309
第12章 打造預執行調試器 312
12.1 制定功能 312
12.2 確定技術方案 312
12.3 開發籌備 313
12.4 具體實現 313
12.4.1 預執行功能 313
12.4.2 代碼追蹤記錄功能 317
12.4.3 塊執行功能 321
12.4.4 OP記錄調試功能 327
12.5 效果演示 331
第13章 打造偽調試器 335
13.1 制定功能 335
13.2 確定技術方案 335
13.3 開發籌備 336
13.4 具體實現 336
13.4.1 數據結構與通信協議 337
13.4.2 第1步:界面相關工作 338
13.4.3 第2步:在調試端啟用和禁用偽調試技術 339
13.4.4 第3步:創建調試目標 341
13.4.5 第4步:等待調試事件主循環 344
13.4.6 第5步:被調試端的初始化 346
13.4.7 第6步:中轉異常 349
13.4.8 第7步:輔助調試函數實現 350
13.4.9 小結 354
13.5 效果演示 354
第4部分實例分析
第14章 VMProtect虛擬機分析 358
第15章 WinLicense虛擬機分析 375
第5部分脫殼實例
第16章 VMProtect脫殼 382
第17章 WinLicense脫殼 394
寫在後 405