內容簡介
本書是國內移動遊戲安全領域的開山之作,填補了移動遊戲安全書籍的空白,揭開了移動遊戲外掛的神秘面紗。 隨著移動網際網路的日益普及,業內對移動安全領域的專業人才的需求逐年增加,而該領域的專業人才相對匱乏,很多開發人員和有志於從事相關行業的在校學生等一直缺少相關的參考資料和書籍。作為移動安全領域的入門書籍,本書以移動端(涵蓋了Android 和iOS兩大平台)的遊戲逆向分析和外掛技術為切入點,詳細講述了手遊安全領域的諸多基礎知識和技能,包括:移動端開發和調試環境搭建、典型的移動遊戲特性、與外掛相關的安全開發技術、遊戲和外掛的逆向分析方法、外掛開發實戰演練、遊戲引擎逆向分析等內容,書中的部分原始碼可免費從網上下載。讀者在掌握本書的內容之後,便可入門手遊安全領域,同時可以很容易地將在本書中學到的知識擴展至移動端的其他領域,例如:安全方案開發、病毒分析、軟體逆向及保護等。
圖書目錄
第 1 篇 概述篇 1
第1 章 手遊面臨的安全風險 2
1.1 靜態修改檔案 3
1.1.1 修改遊戲資源 3
1.1.2 修改代碼 4
1.1.3 修改配置 4
1.2 動態篡改邏輯 4
1.2.1 修改代碼 5
1.2.2 修改數據 6
1.3 遊戲協定 6
1.3.1 篡改遊戲協定 6
1.3.2 重發遊戲協定 7
1.4 遊戲盜號 7
1.5 惡意發言 8
1.6 工作室 8
1.7 小結 8
第 2 章 外掛的定義、分類及實現原理 9
2.1 外掛的定義 9
2.2 外掛的分類 10
2.2.1 輔助版外掛 10
2.2.2 破解版外掛 15
2.3 外掛的實現原理 15
2.3.1 輔助版外掛的實現原理 16
2.3.2 破解版外掛的實現原理 17
2.4 小結 18
第 3 章 手遊外掛技術匯總 19
3.1 ARM 彙編 19
3.2 C、C++語言 19
3.3 Android 開發 20
3.4 iOS 開發 20
3.5 了解常用的遊戲引擎 20
3.6 靜態分析(IDA 分析) 21
3.7 動態分析(Android、iOS 調試) 21
3.8 有必要了解的其他程式語言 21
3.9 靜態修改 22
3.10 動態修改 22
3.11 小結 22
第 2 篇 環境搭建篇 23
第4 章 開發環境搭建 24
4.1 Android 開發環境搭建 24
4.1.1 Cygwin 環境搭建 24
4.1.2 Eclipse 環境搭建 27
4.1.3 Android 平台的Native 程式編寫 29
4.1.4 Android Native 程式的NDK 編譯 30
4.1.5 Android Native 程式的載入運行 30
4.2 iOS Xcode 開發環境搭建 31
4.2.1 下載Xcode 31
4.2.2 真機部署 32
4.3 iOS 越獄開發環境搭建 33
4.3.1 Theos 越獄開發環境搭建 34
4.3.2 iOSOpenDev 下載與安裝 35
4.3.3 如何創建和編譯iOS 動態庫檔案 36
4.3.4 如何載入、運行iOS 動態庫 37
4.4 小結 38
第 5 章 調試環境搭建 39
5.1 Android 平台調試環境的搭建 39
5.2 iOS 32 位調試環境的搭建 41
5.2.1 軟體安裝 41
5.2.2 iOS 32 位程式的調試 42
5.3 iOS 64 位程式調試環境的搭建 44
5.3.1 iPhone 設備的CPU 類型介紹 44
5.3.2 lldb 環境搭建 45
5.3.3 lldb 調試介紹 46
5.4 小結 48
第 6 章 工具匯總與使用 49
6.1 IDA Pro 49
6.1.1 用IDA 載入執行檔 50
6.1.2 用IDA 分析執行檔 52
6.1.3 IDA 功能界面 54
6.2 APKTool 工具 61
6.2.1 反編譯APK 檔案 62
6.2.2 重打包APK 檔案 63
6.3 ILSpy 工具 64
6.3.1 載入檔案 64
6.3.2 保存反編譯代碼 65
6.4 MachOView 工具 66
6.4.1 載入Mach-O 檔案 67
6.4.2 檔案頭信息 68
6.4.3 加密信息獲取 69
6.5 MobileSubStrate 工具組件 70
6.5.1 MobileHooker 71
6.5.2 MobileLoader 71
6.5.3 Safe Mode 72
6.6 小結 72
第 3 篇 遊戲基礎篇 73
第7 章 手遊開發基礎概述 74
7.1 遊戲玩法與分類 74
7.1.1 MMORPG 類遊戲 75
7.1.2 FPS 類遊戲 77
7.1.3 ARPG 類遊戲 78
7.1.4 卡牌類遊戲 79
7.1.5 RTS 類遊戲 79
7.1.6 消除類遊戲 80
7.1.7 MOBA 類遊戲 81
7.1.8 跑酷類遊戲 81
7.2 遊戲系統及開發的相關概念 82
7.2.1 手遊系統的組成 82
7.2.2 手遊開發語言 88
7.2.3 手遊網路模式 88
7.3 小結 89
第 8 章 遊戲引擎的基本概念及常見引擎介紹 90
8.1 什麼是遊戲引擎 90
8.2 遊戲引擎子系統 91
8.2.1 渲染系統 91
8.2.2 音頻系統 92
8.2.3 物理系統 93
8.2.4 人工智慧 93
8.3 常用手遊引擎 94
8.3.1 Cocos2D 引擎 94
8.3.2 Unity 3D 引擎 95
8.4 小結 96
第 9 章 遊戲漏洞概述 97
9.1 遊戲安全漏洞的基本概念 97
9.1.1 遊戲邏輯漏洞 98
9.1.2 遊戲協定穩定型漏洞 98
9.1.3 遊戲服務端校驗疏忽型漏洞 99
9.2 遊戲漏洞風險點分類 99
9.2.1 手遊常見類型 99
9.2.2 手遊風險 100
9.3 小結 104
第 4 篇 逆向篇 105
第10 章 靜態分析 106
10.1 ARM 反彙編速成 106
10.1.1 ARM 體系簡介 106
10.1.2 ARM 指令樣例解析 107
10.1.3 Thumb 指令簡述 110
10.1.4 函式傳參 111
10.1.5 浮點數基礎 111
10.2 Android 平台的ELF 檔案格式 113
10.2.1 檔案頭信息 114
10.2.2 程式頭信息 115
10.2.3 節表頭信息 117
10.3 iOS 平台的Mach-O 檔案格式 118
10.3.1 檔案頭格式 119
10.3.2 Load Command 信息 121
10.4 IDA 靜態分析 123
10.4.1 IDA 啟動及載入檔案 123
10.4.2 IDA 靜態分析主界面及視窗 124
10.4.3 用IDA 保存靜態分析結果 128
10.4.4 IDA 靜態分析的常用功能及快捷鍵 129
10.5 小結 132
第 11 章 動態分析 133
11.1 Android 平台的IDA 動態調試 133
11.1.1 啟動IDA 調試器 133
11.1.2 載入Android 原生動態程式庫 135
11.1.3 動態調試主界面 138
11.1.4 IDA 動態調試斷點和腳本功能 139
11.1.5 IDA 動態調試修改數據功能 141
11.1.6 用IDA 調試器修改代碼 143
11.2 iOS 平台中的GDB 動態調試 144
11.2.1 用GDB 載入調試程式 144
11.2.2 GDB 常用的調試功能 146
11.3 iOS 平台的lldb 動態調試 151
11.3.1 用lldb 載入調試程式 151
11.3.2 lldb 的調試功能 154
11.3.3 其他功能 157
11.4 小結 158
第 5 篇 開發篇 159
第12 章 定製化外掛開發流程 160
12.1 什麼是定製化外掛 160
12.2 定製化外掛開發的基礎流程 161
12.3 定製化外掛開發各環節介紹 161
12.3.1 逆向分析遊戲邏輯 162
12.3.2 驗證外掛功能是否可行 162
12.3.3 注入遊戲進程 163
12.3.4 枚舉遊戲進程模組 163
12.3.5 Hook 關鍵函式 163
12.3.6 遊戲記憶體數據修改 164
12.3.7 反調試功能 164
12.4 小結 165
第 13 章 注入技術的實現原理 166
13.1 什麼是進程注入技術 166
13.2 Android 平台下ptrace 注入技術的實現 167
13.2.1 ptrace 函式介紹 167
13.2.2 ptrace 注入進程流程 168
13.2.3 ptrace 注入的實現 169
13.2.4 ptrace 注入實例測試 173
13.3 Android 平台下Zygote 注入技術的實現 174
13.3.1 Zygote 注入技術的原理 174
13.3.2 Zygote 注入技術的實現流程 174
13.3.3 Zygote 注入器的實現方式 175
13.3.4 注入Zygote 的模組功能實現 182
13.3.5 Zygote 注入實例測試 182
13.4 Android 平台感染ELF 檔案的注入技術實現 184
13.4.1 ELF 檔案的格式 185
13.4.2 感染ELF 檔案的注入實現原理 186
13.4.3 感染ELF 檔案的注入實現過程 187
13.4.4 感染ELF 檔案的注入實例分析 188
13.4.5 感染ELF 檔案的注入編程實現 192
13.4.6 感染ELF 檔案的注入實例測試 194
13.5 iOS 平台越獄環境的注入實現 195
13.5.1 利用Theos 環境創建注入工程 195
13.5.2 工程檔案說明 196
13.5.3 編譯和安裝 200
13.5.4 iOS 注入原理介紹 202
13.6 小結 203
第 14 章 Hook 技術的實現原理 205
14.1 Hook 技術簡介 205
14.2 Android 平台基於異常的Hook 實現 206
14.2.1 基於異常Hook 的實現原理 206
14.2.2 Android 平台基於異常Hook 的實現流程 207
14.2.3 基於異常Hook 的實現代碼 208
14.2.4 基於異常Hook 的實例測試 212
14.3 Android 平台的Inline Hook 實現 214
14.3.1 Inline Hook 的實現原理 214
14.3.2 Inline Hook 的實現流程 215
14.3.3 Inline Hook 的實現代碼 216
14.3.4 Inline Hook 的實例測試 220
14.4 Android 平台下導入表Hook 的實現 224
14.4.1 導入表Hook 的實現原理 224
14.4.2 導入表Hook 的實現流程 224
14.4.3 導入表Hook 的實現代碼 225
14.4.4 Android 平台下導入表Hook 的實例測試 229
14.5 小結 230
第 15 章 遊戲進程的模組信息獲取 231
15.1 Android 平台進程模組的信息獲取 231
15.1.1 Android 記憶體模組遍歷的原理 232
15.1.2 Android 記憶體模組遍歷的實現 233
15.1.3 實例測試 236
15.2 iOS 平台進程模組信息的獲取 237
15.2.1 Dyld API 遍歷模組的原理 237
15.2.2 Dyld API 遍歷模組實現 239
15.2.3 通過記憶體遍曆法獲取模組的原理 239
15.2.4 通過記憶體遍曆法獲取模組信息的實現 241
15.2.5 實例測試 247
15.3 小結 249
第 16 章 篡改遊戲內容的實現原理 250
16.1 遊戲內容讀寫方式分類 250
16.2 非注入式篡改 251
16.2.1 篡改APK 安裝包 251
16.2.2 篡改遊戲的安裝目錄檔案 253
16.2.3 篡改“/proc/”目錄檔案 253
16.3 注入式篡改 258
16.3.1 篡改記憶體數據 259
16.3.2 篡改邏輯代碼 259
16.3.3 注入式篡改代碼實例講解 260
16.4 小結 263
第 17 章 反調試技術 264
17.1 Android 平台的常規反調試技術 264
17.1.1 Android 平台的Self-Debugging 反調試方案 265
17.1.2 Android 平台的輪詢檢測反調試方案 268
17.1.3 Android 平台Java 層的反調試技術 270
17.2 iOS 平台的反調試技術 270
17.2.1 iOS 平台拒絕被附加反調試方案 271
17.2.2 iOS 平台的輪詢檢測反調試方案 272
17.3 小結 273
第 6 篇 實戰篇 275
第18 章 遊戲逆向分析實戰篇 276
18.1 C++遊戲分析實戰篇 276
18.1.1 C++遊戲識別 277
18.1.2 C++基礎 278
18.1.3 C++遊戲的逆向分析方法 279
18.1.4 C++遊戲的破解思路 281
18.1.5 C++遊戲逆向分析實戰篇——《雷霆戰機》無敵和秒殺功能分析 281
18.2 Unity 3D 遊戲分析實戰篇 289
18.2.1 識別Unity 3D 遊戲 289
18.2.2 Unity 3D 遊戲的破解方法 290
18.2.3 Unity 3D 遊戲分析涉及的工具 291
18.2.4 Unity 3D 遊戲分析實戰篇——《星河戰神》的無限衝刺功能分析 292
18.3 Lua 遊戲分析實戰 295
18.3.1 識別Lua 遊戲 295
18.3.2 破解Lua 遊戲的方法 296
18.3.3 常用工具 298
18.3.4 Lua 遊戲實戰——破解《疾風獵人》的Lua 代碼 298
18.3.5 Lua 遊戲分析實戰——破解《游龍英雄》的Lua 代碼 300
18.4 小結 302
第 19 章 外掛逆向分析實戰——《雷霆戰機》圈圈外掛分析 303
19.1 外掛整體分析 303
19.2 外掛注入功能分析 304
19.2.1 com.oozhushou-1.apk 檔案分析 304
19.2.2 hhloader 模組分析 309
19.2.3 外掛注入的實現方式 311
19.3 外掛作弊功能分析 312
19.3.1 秒殺功能的實現分析 312
19.3.2 忽略傷害功能的實現分析 315
19.3.3 護盾延遲功能的實現分析 316
19.4 小結 317
第 20 章 外掛開發實戰——《2048》手遊快速通關功能分析及開發 318
20.1 遊戲功能分析 318
20.1.1 功能可行性分析 318
20.1.2 遊戲引擎的確認 320
20.1.3 關鍵邏輯的逆向分析 320
20.2 外掛功能的實現 326
20.2.1 實現思路 326
20.2.2 實現原理 327
20.2.3 實現流程 327
20.2.4 實現代碼 328
20.3 測試結果 329
20.4 小結 330
第 21 章 Unity3D 引擎逆向分析 332
21.1 Unity 3D 引擎概述 332
21.2 Android 平台Unity 3D 引擎的Mono 機制分析 333
21.2.1 Mono 介紹 333
21.2.2 Mono 主框架的執行流程 334
21.2.3 C#函式調用的執行過程 335
21.3 iOS 平台的Unity 3D 引擎IL2CPP 機制分析 338
21.3.1 IL2CPP 機制生成代碼的對比 338
21.3.2 逆向分析IL2CPP 機制中C#函式的調用方式 342
21.3.3 Unity 3D 引擎的IL2CPP 機制安全性分析 347
21.4 Unity 3D 引擎AB 機制分析及《天天來戰》AB 包還原 349
21.4.1 Unity 3D 的AB 打包實現 349
21.4.2 C#腳本的AB 包載入及運行過程 351
21.4.3 《天天來戰》遊戲的AB 包處理方式分析及還原 352
21.5 小結 358