-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

Android軟件安全權威指南

( 簡體 字)
作者:豐生強類別:1. -> 程式設計 -> 手機程式 -> Android
譯者:
出版社:電子工業出版社Android軟件安全權威指南 3dWoo書號: 50763
詢問書籍請說出此書號!

缺書
NT售價: 475

出版日:3/1/2019
頁數:468
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121355202
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:



自2013年《Android軟件安全與逆向分析》出版至今,已經過去了五年。目前,移動平臺已經成為人們上網的主要方式,手機操作系統只剩下了Android和iOS。Android也從手機平臺滲透到智能電視、智能家居甚至智能交通、智慧物流領域。可以說,Android已經融入了我們的生活。五年前,Android才剛剛開始普及;五年后,Android已經“雄霸天下”了。同時,隨著Android被廣泛地應用到我們生活的各個領域,如何保護自己公司或者甲方的軟件,甚至如何有效地進行高強度的保護性開發,都已經成為安全技術人員必須直面的需求。
在這五年中,軟件保護技術從第一代殼——DEX加密、字符串加密、資源加密、反調試及自定義DexClassLoader,進化到第二代殼——DEX抽取與so加固、DEX Method代碼抽取、DEX動態加載及so加固,再進化到第三代殼——DEX動態解密與so混淆、DEX Method代碼動態解密及so代碼膨脹混淆,直至現在最流行的第四代殼——代碼虛擬化保護,也就是本書主要與大家分享的基于LLVM編譯器實現的Obfuscator-LLVM技術。
初入Android安全圈的讀者不必擔心讀不懂這本書。這本書完全從基礎講起,覆蓋Android軟件安全領域的大部分知識點,是一本內容循序漸進、可以幫助您拾級而上的好書。在跟隨非蟲暢游Android安全世界的旅途中,您還可以來看雪論壇尋找志同道合的良師益友,分享學習中的見解和經驗,相信這些都會對您開闊視野、提高技術水平有很大的幫助。


看雪學院創始人 段 鋼
2018年11月21日



前言

筆者在2013年曾出版過一本Android安全圖書——《Android軟件安全與逆向分析》。當時,Android軟件安全問題剛剛凸顯出來。經歷了數年的快速發展,Android平臺上的安全技術與行業趨勢發生了很大的變化,本書會集中討論這些內容。
首先是Android系統自身的安全性。從筆者開始關注Android領域時的2.2版本至今,Android已經發生了脫胎換骨的變化。應用的權限細粒度管理,系統強制啟用SELinux、內核KASLR,以及設備存儲的強制全盤加密等多種安全手段的實施,都使得Android系統正在向更安全、更穩定的方向發展。
從Android 4.4開始引入的ART虛擬機到后來不斷進行的優化過程中可以看出,APK無論是在安裝速度還是在運行時的流暢度上都節節攀升!這是一個好消息。但同時,壞消息也不斷傳出。Android平臺上的軟件,經歷了數年井噴式的發展,質量難免參差不齊,而惡意軟件的橫行,也給Android系統的名聲帶來了不好的影響。幸運的是,這些不好的影響正在遠離我們——Android官方對待安全的態度是安全從業人員有目共睹的。
本書包括但不限于以下內容。
*全平臺覆蓋講解,包括Windows、Linux、macOS三大平臺上的Android軟件開發、逆向分析、動態調試、軟件殼等內容。
*文件格式講解,包括DEX、ODEX、AXML、ARSC、OAT、SO等。
*Java層與Native層的軟件逆向分析講解。
*ARM匯編內幕,包括對Thumb指令、ARM指令、AArch64指令格式的講解。
*Hook與注入方案講解。
*軟件保護技術講解。

內容特色
本書的內容特色如下。
*循序漸進的學習路線。本書對知識與技術要點的講解是由淺入深逐步展開的,對工具的使用及原理的講解符合國人的學習思路。讀者可以按照本書的目錄順序閱讀和學習。
*大量的實例分析。為了讓讀者充分感受技術涉及的應用場景,本書在講解不同的技術要點時,會輔以大量的實例。書中的所有實例均由筆者精心編寫并反復調試,所有代碼都遵循AGPLv3協議在GitHub上進行了開源。讀者可以通過閱讀這些實例的源碼來加深對技術的理解。
*實用工具的講解。本書提倡多動手、多實踐,而實踐的內容之一就是掌握書中介紹的第三方工具。除了系統地介紹一些命令,本書在講解過程中還使用了大量的第三方工具。這些工具大都是跨平臺且免費開源的。掌握這些工具的使用方法,閱讀并理解這些工具所產生的代碼,了解這些工具的工作原理,有助于將實踐與理論結合起來。

如何學習本書內容
本書共12章,系統地講解了與Android軟件安全相關的環境搭建、文件格式、靜態分析、動態調試、Hook與注入、軟件保護技術、軟件殼等主題。環境搭建是學習本書內容的門檻,這部分內容主要針對沒有Android開發基礎的讀者,之后的每一個技術點都是既獨立又相輔相成的。雖然有一定基礎的讀者可以跳過一些自己已經掌握的章節,直接閱讀后續內容,但筆者并不鼓勵大家這么做。
在本書中,對命令行工具會以直接展示終端命令和輸出結果的形式講解,對GUI工具會以截圖展示操作步驟及操作結果的形式講解。讀者可以按照書中的指引一步步地進行操作。

讀者定位
本書主要講解與Android平臺軟件安全相關的技術,因此在讀者的定位上自然離不開“軟件”與“安全”這兩個領域。
在“軟件”領域,適合閱讀本書的讀者包括:
*高校軟件開發相關專業的學生;
*Android軟件開發工程師;
*系統底層開發人員。
在“安全”領域,適合閱讀本書的讀者包括:
*高校信息安全相關專業的學生;
*軟件安全研究員;
*逆向工程師;
*病毒分析師。

閱讀須知
本書是筆者無數個日夜辛苦調試與寫作的成果。寫作本書花費了筆者大量的時間與精力。因此,筆者不歡迎閱讀盜版書的讀者。無論通過什么渠道、出于什么目的,閱讀盜版書的行為都對筆者造成了極大的傷害。
任何技術都有自己的應用場景,任何知識都有更新與迭代的周期。寫作本書時,恰遇Android系統升級到Android O,Android軟件的開發語言正式由Java變為Kotlin,因此,書中講解的工具與技術都是基于這個時期的系統版本的。本書不對后續系統版本中工具與技術的可行性提供任何擔保,也不歡迎好事之徒對書中內容的可行性進行無端的猜測。
本書是一本工具實踐書,講解了工具的使用與原理,以及在實際分析過程中可能遇到的大部分問題。但是,這既不代表本書能夠幫助讀者解決所有的問題,也不代表讀者僅通過閱讀本書就可以完整地理解系統的安全機制及所有的軟件攻防手法——單純通過閱讀一本書無法完全了解逆向工程這門深奧的學問。
逆向工程是一種特殊的技術,它就像一把利刃,使用得當可以保護自己,使用不當就會傷害別人。本書內容只用于探討技術,不得用于任何非法目的。任何企圖通過本書介紹的技術從惡的讀者,都請好自為之。筆者不承擔由于濫用本書技術造成的任何后果。
致謝
感謝父母的養育之恩,是他們給予我生命。他們是最可愛的人!
感謝老婆對我工作的理解。寫作是一件非常辛苦的事情,感謝她在我寫作的過程中悉心照顧寶寶,讓我能全身心地投入寫作。雖然娃兒現在還不太懂得什么叫感謝,不過我還是要感謝他,是他讓我的人生變得完整。
好書總能給人帶來心靈上的震撼。感謝美女作家李沉嫣,是她那扣人心弦的文字感染了我,給了我踏入寫作大門的最初動力。
感謝電子工業出版社對本書內容的肯定,以及編輯潘昕對本書質量的嚴格把控。
很榮幸本書能以看雪軟件安全系列圖書的形式出版,感謝看雪論壇對本書的支持。看雪論壇是國內最專業的軟件安全交流社區,歡迎大家一起到看雪論壇進行技術交流。
感謝愛加密對本書的支持。愛加密是全國領先的移動信息安全服務提供商,其獨創的App虛擬機保護等多項技術,為全國的企業和政府機構提供了安全保護。
感謝軟件安全專家熊貓正正在技術上的悉心指導。
感謝老友聽鬼哥講故事在寫作過程中給予的幫助。他“安利”的八段錦拳法,適合每一個IT從業者練習。每天適當運動,能換來一天的好精神。
感謝黃藥師多年來對我寫作的支持。雖然沒有跟他學過太極拳,但他獨到的見解,總能讓人開闊視野。
感謝bingghost多年來對我寫作的支持。盡管餓了么的伙食很好,但這個IT男通過鍛煉,完全變成了型男。
感謝roysue-陳佳林。他用年輕化的視角,讓我學到了很多。
感謝Google持續開發與更新Android操作系統。Android是目前最具探索價值的開源操作系統,它不僅能讓人們的生活更加豐富多彩,更能優化整個移動互聯網的生態、創造良好的就業環境。
感謝ChelpuS開發了Android破解工具Lucky Patcher。在Android 2.0時代,筆者就是通過逆向分析這款工具的實現原理,進入了Android軟件加密與解密的奇妙世界。
感謝oleavr開發了Frida框架。雖然我平時不怎么寫JavaScript代碼,但不得不承認,Frida是非常厲害的框架,它讓Android平臺加密與解密的玩法上了一個新臺階。
還要感謝很多朋友,他們都在我的技術研究和工作中給予了很多的幫助。他們是:邢俊杰、Luffy-高磊、陳萌萌、OWASP-子明智者、劉楊、畫家、周群、f8left、戴帽子的鼠Zz、泉哥、脫殼白、大臉貓、劉慶海、浩克、林浩然、李佳、聶君、葫蘆娃、潘博文、郭邵洋、debugee、謝鵬、ilanyu、wing、Invincible、LL、NWMonster、途夫、ZeNix、Kido、夜華、盧樹文。
感謝購買本書的讀者朋友們,你們的支持是我最大的動力。


豐生強(非蟲)
2018年12月
內容簡介:

本書主要介紹Android平臺上的軟件安全技術。從平臺搭建和語言基礎開始,循序漸進地講解了Android平臺上的軟件攻防技術。本書共12章,系統地講解了與Android軟件安全相關的環境搭建、文件格式、靜態分析、動態調試、Hook與注入、軟件保護技術、軟件殼等多個主題。本書較第1版更新幅度較大,加入了Windows、Linux、macOS 3個平臺上的軟件平臺支持,在文件格式上加入了OAT、ELF等新的文件格式。另外,本書更新調整了目錄結構,將Java與Native層的軟件安全技術分開講解,在內容安排上更加細致、合理。同時,加入了時下流行的軟件殼章節,內容大多是目前尚未公開的技術。另外,書中的每一章中都以實例講解的方式來展開內容,實踐性較強。
目錄:

第1章 搭建Android程序分析環境
1.1 搭建Windows分析環境 1
1.1.1 安裝JDK 1
1.1.2 安裝Android SDK 2
1.1.3 安裝Android NDK 5
1.1.4 Android Studio集成開發環境 6
1.1.5 創建Android模擬器 7
1.1.6 Cygwin 9
1.1.7 Bash on Ubuntu on Windows 11
1.2 搭建macOS分析環境 12
1.2.1 安裝JDK 12
1.2.2 安裝Android SDK 14
1.2.3 安裝Android NDK 14
1.2.4 Android Studio集成開發環境 15
1.3 搭建Ubuntu分析環境 15
1.3.1 安裝JDK 16
1.3.2 安裝Android SDK 17
1.3.3 安裝Android NDK 17
1.3.4 Android Studio集成開發環境 18
1.4 常用逆向分析工具 19
1.5 常用Linux Shell命令 19
1.6 搭建源碼分析環境 20
1.6.1 在macOS中編譯Android源碼 20
1.6.2 在Ubuntu中編譯Android源碼 26
1.6.3 在Windows中編譯Android源碼 26
1.7 本章小結 27

第2章 如何分析Android程序
2.1 編寫第一個Android程序 28
2.1.1 創建Android工程 28
2.1.2 編譯生成APK文件 30
2.2 破解第一個Android程序 35
2.2.1 破解入手 35
2.2.2 反編譯APK文件 35
2.2.3 分析APK文件 36
2.2.4 修改smali文件的代碼 44
2.2.5 重新編譯APK文件并簽名 45
2.2.6 安裝和測試 47
2.2.7 小結 48
2.3 本章小結 48

第3章 Dalvik可執行格式與字節碼規范
3.1 Dalvik虛擬機 49
3.1.1 Dalvik虛擬機的特點 49
3.1.2 Dalvik虛擬機與Java虛擬機的區別 49
3.1.3 虛擬機的執行流程 54
3.1.4 虛擬機的執行方式 56
3.2 Dalvik語言基礎 56
3.2.1 Dalvik指令格式 57
3.2.2 DEX反匯編工具 58
3.2.3 Dalvik寄存器 59
3.2.4 寄存器命名法 61
3.2.5 Dalvik字節碼 62
3.3 Dalvik指令集 63
3.3.1 指令類型 64
3.3.2 空操作指令 64
3.3.3 數據操作指令 64
3.3.4 返回指令 65
3.3.5 數據定義指令 65
3.3.6 鎖指令 66
3.3.7 實例操作指令 66
3.3.8 數組操作指令 66
3.3.9 異常指令 67
3.3.10 跳轉指令 67
3.3.11 比較指令 68
3.3.12 字段操作指令 69
3.3.13 方法調用指令 69
3.3.14 數據轉換指令 70
3.3.15 數據運算指令 70
3.4 Dalvik指令練習 71
3.4.1 編寫smali文件 71
3.4.2 編譯smali文件 73
3.4.3 測試運行 73
3.5 本章小結 73

第4章 常見Android文件格式
4.1 庫文件 74
4.1.1 jar包 74
4.1.2 aar包 75
4.2 APK 78
4.2.1 APK文件結構 78
4.2.2 APK文件的生成流程 79
4.2.3 APK的安裝流程 84
4.3 classes.dex 90
4.3.1 DEX文件結構 90
4.3.2 DEX文件的驗證與優化過程 104
4.3.3 DEX文件的修改 108
4.3.4 MultiDex 111
4.4 AndroidManifest.xml 113
4.4.1 AndroidManifest.xml文件的格式 113
4.4.2 AXML文件格式 114
4.4.3 AXML文件的修改 121
4.5 resources.arsc 121
4.5.1 ARSC文件格式 122
4.5.2 ARSC文件的修改 128
4.6 META-INF目錄 128
4.6.1 CERT.RSA 128
4.6.2 MANIFEST.MF 129
4.6.3 CERT.SF 130
4.7 ODEX 132
4.7.1 生成ODEX文件 132
4.7.2 ODEX文件格式 132
4.7.3 將ODEX文件轉換成DEX文件 136
4.8 OAT 137
4.8.1 ART虛擬機 137
4.8.2 生成OAT文件 137
4.8.3 OAT文件格式 138
4.8.4 將OAT文件轉換成DEX文件 141
4.9 本章小結 143

第5章 靜態分析Android程序
5.1 靜態分析簡介 145
5.2 閱讀smali代碼 145
5.2.1 smali文件結構 145
5.2.2 循環語句 148
5.2.3 switch分支語句 153
5.2.4 try/catch語句 158
5.3 閱讀Java代碼 163
5.3.1 將DEX文件轉換成jar包 163
5.3.2 jar分析工具 163
5.4 代碼定位技巧 164
5.4.1 入口分析法 164
5.4.2 信息反饋法 165
5.4.3 特征函數法 165
5.5 使用JEB進行靜態分析 165
5.5.1 安裝JEB 165
5.5.2 JEB的靜態分析功能 166
5.5.3 JEB的腳本化與插件 169
5.6 使用IDA Pro進行靜態分析 170
5.6.1 IDA Pro對Android的支持 170
5.6.2 分析DEX文件 170
5.6.3 定位關鍵代碼 172
5.7 使用Androguard進行靜態分析 174
5.7.1 安裝Androguard 175
5.7.2 Androguard的使用方法 175
5.7.3 使用androlyze.py進行分析 179
5.8 本章小結 182

第6章 動態分析Android程序
6.1 動態分析框架 183
6.2 動態分析技巧 189
6.2.1 代碼注入法 189
6.2.2 棧跟蹤法 192
6.2.3 Method Profiling 193
6.2.4 UI檢查 196
6.3 使用JDB動態調試APK 198
6.4 使用JEB動態調試APK 200
6.5 使用IDA Pro動態調試APK 201
6.6 本章小結 203

第7章 ARM反匯編基礎
7.1 Android與ARM處理器 204
7.1.1 ARM處理器架構概述 204
7.1.2 Android支持的處理器架構 205
7.2 Android ARM EABI 206
7.2.1 armeabi 206
7.2.2 armeabi-v7a 207
7.2.3 arm64-v8a 208
7.3 ARM原生程序的生成過程 208
7.3.1 預處理 210
7.3.2 編譯 211
7.3.3 匯編 215
7.3.4 鏈接 215
7.4 ARM匯編語言 216
7.4.1 ARM匯編程序結構 216
7.4.2 匯編指令 221
7.4.3 寄存器 223
7.4.4 處理器尋址方式 224
7.4.5 子程序參數傳遞 227
7.5 ARM匯編指令集 230
7.5.1 ARM指令集分類 230
7.5.2 ARM指令編碼 231
7.5.3 ARM指令格式解析 233
7.5.4 常見ARM指令 234
7.6 Thumb匯編指令集 240
7.6.1 16位Thumb指令編碼 240
7.6.2 16位Thumb指令格式解析 241
7.6.3 32位Thumb指令編碼 242
7.6.4 32位Thumb指令格式解析 244
7.7 AArch64匯編指令集 246
7.7.1 AArch64指令編碼 246
7.7.2 AArch64指令格式解析 247
7.8 本章小結 250

第8章 Android原生程序開發與逆向分析
8.1 原生程序開發 251
8.1.1 原生程序工程 252
8.1.2 STL的選擇 253
8.1.3 JNI 254
8.1.4 編譯選項與配置項 256
8.2 原生程序移植 256
8.2.1 ADT項目的移植 257
8.2.2 UNIX開源項目的移植 258
8.2.3 CMake項目的移植 262
8.2.4 其他類型項目的移植 264
8.3 原生程序入口函數 264
8.3.1 原生程序入口函數分析 264
8.3.2 so入口函數分析 269
8.4 原生程序文件格式 271
8.4.1 原生程序的文件類型 271
8.4.2 AArch64 ELF文件格式 274
8.4.3 Program Header Table 278
8.4.4 Section Header Table 281
8.4.5 .dynamic節區 283
8.4.6 字符串表 285
8.4.7 符號表 286
8.4.8 got表與plt表 287
8.4.9 地址重定位表 291
8.5 原生程序逆向分析工具 295
8.5.1 NDK Toolchain 295
8.5.2 IDA Pro 297
8.5.3 Hopper 301
8.6 原生C程序逆向分析 302
8.6.1 編譯原生C程序 303
8.6.2 for循環分支結構 305
8.6.3 while循環分支結構 309
8.6.4 if……else分支結構 312
8.6.5 switch循環分支結構 316
8.6.6 優化后的C程序 319
8.7 原生C++ 程序逆向分析 321
8.7.1 C++ STL的逆向分析 322
8.7.2 C++ 類的逆向分析 326
8.7.3 C++ 程序的RTTI 332
8.8 原生so動態庫逆向分析 336
8.9 本章小結 337

第9章 Android原生程序動態調試
9.1 gdb調試器 338
9.1.1 ndk-gdb腳本 338
9.1.2 配置gdb調試器 339
9.1.3 gdb調試器的常用命令 340
9.1.4 使用gdb調試Android原生程序 342
9.1.5 gdb調試器的GUI前端 344
9.2 lldb調試器 346
9.2.1 配置lldb調試器 346
9.2.2 lldb調試器的常用命令 348
9.2.3 使用lldb調試Android原生程序 350
9.2.4 lldb調試器的GUI前端 353
9.3 使用IDA Pro調試Android原生程序 353
9.4 本章小結 358

第10章 Hook與注入
10.1 Hook的類型 359
10.1.1 Dalvik Hook 359
10.1.2 ART Hook 362
10.1.3 LD_PRELOAD Hook 364
10.1.4 GOT Hook 366
10.1.5 Inline Hook 367
10.2 Hook框架Xposed 368
10.3 Hook場景與應用 372
10.3.1 開啟日志調試輸出 372
10.3.2 APK插件 373
10.3.3 繞過SSL Pinning 373
10.4 動態注入 374
10.4.1 so動態庫注入 374
10.4.2 DEX注入 376
10.5 注入框架Frida 377
10.5.1 Frida的安裝與配置 377
10.5.2 執行注入與Hook 378
10.5.3 跟蹤Native方法 384
10.6 本章小結 386

第11章 軟件保護技術
11.1 軟件保護技術簡介 387
11.2 軟件混淆技術 388
11.2.1 源碼混淆 389
11.2.2 模板混淆 389
11.2.3 AST混淆 391
11.2.4 IR混淆 397
11.2.5 DEX混淆 397
11.2.6 DEX二次混淆 399
11.3 資源保護 401
11.4 完整性校驗 403
11.5 反調試技術 404
11.5.1 調試器狀態檢測 404
11.5.2 調試器端口檢測 404
11.5.3 進程狀態檢測 406
11.6 運行環境檢測 407
11.6.1 模擬器檢測 407
11.6.2 Root檢測 409
11.6.3 Hook檢測 409
11.7 本章小結 411

第12章 軟件殼
12.1 Android軟件殼 412
12.2 軟件殼的特征與偵察 413
12.2.1 編譯器指紋 413
12.2.2 軟件殼的特征 416
12.2.3 查殼工具 418
12.3 動態加載型殼 418
12.3.1 緩存脫殼法 418
12.3.2 內存Dump脫殼法 419
12.3.3 動態調試脫殼法 420
12.3.4 Hook脫殼法 423
12.3.5 系統定制脫殼法 424
12.4 代碼抽取型殼 425
12.4.1 內存重組脫殼法 425
12.4.2 Hook脫殼法 427
12.4.3 系統定制脫殼法 427
12.5 代碼混淆殼 429
12.5.1 LLVM基礎 430
12.5.2 編寫Pass 434
12.5.3 Obfuscator-LLVM 440
12.5.4 代碼混淆殼的脫殼 443
12.6 本章小結 451
序: