Android應(yīng)用安全實(shí)戰(zhàn):Frida協(xié)議分析
定 價(jià):89 元
叢書(shū)名:網(wǎng)絡(luò)空間安全技術(shù)叢書(shū)
Android應(yīng)用安全是一個(gè)熱門話題,本書(shū)從Hook框架Frida出發(fā),由淺入深,帶領(lǐng)讀者掌握Frida框架的使用方法,并讓讀者能夠解決逆向分析、安全測(cè)試、算法還原和關(guān)鍵代碼快速定位等實(shí)際問(wèn)題。Android應(yīng)用安全實(shí)戰(zhàn):Frida協(xié)議分析共8章,首先講解了Frida框架環(huán)境安裝配置,隨后講解了如何使用Frida框架對(duì)Android應(yīng)用的Java層和so層進(jìn)行分析,并設(shè)計(jì)了算法自吐框架,*后講解了Frida框架的高級(jí)應(yīng)用和算法轉(zhuǎn)發(fā)。從*基礎(chǔ)的環(huán)境安裝到中高級(jí)逆向技巧均有涉獵,能夠讓讀者在實(shí)戰(zhàn)中掌握Frida框架,并應(yīng)用于Android逆向分析之中。Android應(yīng)用安全實(shí)戰(zhàn):Frida協(xié)議分析內(nèi)容翔實(shí),理論與實(shí)戰(zhàn)相結(jié)合,可供Android開(kāi)發(fā)工程師、Android應(yīng)用安全工程師、爬蟲(chóng)工程師、逆向分析工程師以及想要從事逆向領(lǐng)域工作的人員學(xué)習(xí)。
《Android應(yīng)用安全實(shí)戰(zhàn):Frida協(xié)議分析》融合了資深爬蟲(chóng)工程師多年實(shí)戰(zhàn)經(jīng)驗(yàn),采用理論和實(shí)踐相結(jié)合的模式,六大實(shí)戰(zhàn)案例,帶領(lǐng)讀者掌握逆向分析,進(jìn)階Android端爬蟲(chóng)。語(yǔ)言簡(jiǎn)練、內(nèi)容實(shí)用,配有270分鐘二維碼視頻,使讀者身臨其境,迅速、深入地掌握Frida框架的使用方法。
前言Android應(yīng)用的安全問(wèn)題在業(yè)內(nèi)備受關(guān)注,但這方面相關(guān)的系統(tǒng)性資料卻不多。本書(shū)從Hook框架Frida出發(fā)來(lái)講解如何對(duì)Android應(yīng)用的協(xié)議進(jìn)行分析。這本書(shū)講了什么本書(shū)共8章,全書(shū)整體圍繞Frida框架進(jìn)行講解,并配合大量實(shí)戰(zhàn),相信會(huì)讓讀者學(xué)會(huì)該框架的使用方法。第1章介紹的是在Android系統(tǒng)下使用Frida框架進(jìn)行逆向的環(huán)境搭建。 當(dāng)然這里安裝的環(huán)境只是基礎(chǔ)的環(huán)境,實(shí)際上Android逆向需要配置的環(huán)境比這多得多。 比如反編譯dex需要的jadx、jeb工具,反編譯so文件需要的IDA工具,開(kāi)發(fā)App應(yīng)用程序需要的Android Studio,以及各種抓包工具等。 不過(guò),一開(kāi)始能夠掌握基本的逆向工具就已經(jīng)足夠了。第2章主要介紹Java層的逆向分析,Android應(yīng)用常見(jiàn)的代碼都存放在Java層,因此對(duì)熟悉Android正向開(kāi)發(fā)的讀者來(lái)說(shuō),學(xué)習(xí)逆向也是較為簡(jiǎn)單的。 配合本章的實(shí)戰(zhàn),學(xué)習(xí)完這章之后,一般較為簡(jiǎn)單的Android應(yīng)用的協(xié)議分析讀者就都可以解決了。第3章主要介紹關(guān)鍵代碼快速定位,看似只是一堆分散的技巧羅列,實(shí)際上是進(jìn)行逆向工作基本的方法。 因?yàn)樵趯?shí)際的逆向分析中,不可能去逐行查看反編譯后的代碼,而只憑感覺(jué)定位也是不夠的,這里把一些常用的定位方法總結(jié)起來(lái),能夠幫助讀者快速提高逆向效率。第4章介紹了算法自吐 腳本的開(kāi)發(fā),本章的內(nèi)容比較重要,因?yàn)樗鼣[脫了以往將純逆向視為體力勞動(dòng)的片面思想,進(jìn)入了更抽象的框架開(kāi)發(fā)。 基于Frida的框架開(kāi)發(fā)并不難,所謂熟能生巧,把日常逆向工作中常用的操作封裝起來(lái),就可以慢慢積累成框架。 讀者可以在完成本章的學(xué)習(xí)后對(duì)自吐 框架進(jìn)行完善,增加更多功能。第5章介紹了so層的逆向分析,只要是有志于在逆向分析領(lǐng)域有所精進(jìn)的逆向工作者,都必須學(xué)會(huì)so層的逆向分析,因?yàn)橐话阌须y度的Android應(yīng)用都會(huì)使用so層加密。第6章介紹了JNI函數(shù)的Hook和快速定位,在so層逆向分析中,經(jīng)常需要和JNI函數(shù)打交道,掌握J(rèn)NI函數(shù)的Hook是必要的。第7章講解內(nèi)存讀寫(xiě)、各種系統(tǒng)函數(shù)的Hook,以及各種代碼的trace方法。第8章介紹了Frida框架算法轉(zhuǎn)發(fā)方案,能夠?qū)ndroid應(yīng)用本身當(dāng)作解密工具,也可以建立解密API方便調(diào)用。學(xué)習(xí)本書(shū)需要注意的事項(xiàng)書(shū)中的Hook框架Frida在命令中多是首字母小寫(xiě)形式frida。App應(yīng)用程序指的是Android系統(tǒng)下的APK。當(dāng)提到某函數(shù)的參數(shù)個(gè)數(shù)是3,指的是從1開(kāi)始共3個(gè)參數(shù)。當(dāng)提到某函數(shù)的第3個(gè)參數(shù),指的是從0開(kāi)始的第4個(gè)參數(shù)。另外,本書(shū)的初衷是為了讓讀者掌握Frida這一Hook框架,并將其用于工作和學(xué)習(xí)當(dāng)中,為避免對(duì)書(shū)中提供的案例造成不利影響,本書(shū)對(duì)涉及的具體應(yīng)用名和包名都會(huì)進(jìn)行省略。什么人適合看這本書(shū)本書(shū)是零基礎(chǔ),可以說(shuō),只要是對(duì)Android應(yīng)用安全感興趣的人都可以閱讀。 當(dāng)然,具有一定Android開(kāi)發(fā)基礎(chǔ)的人讀起來(lái)會(huì)更加輕松。 值得一提的是,當(dāng)下熱門的網(wǎng)絡(luò)爬蟲(chóng),在對(duì)Android應(yīng)用進(jìn)行數(shù)據(jù)爬取時(shí),必然要用到書(shū)里的知識(shí)。 本書(shū)貴在實(shí)用,沒(méi)有講解大量簡(jiǎn)單的基礎(chǔ)知識(shí),而是以實(shí)戰(zhàn)為主,對(duì)大量實(shí)際Android應(yīng)用進(jìn)行分析,跟著書(shū)中內(nèi)容認(rèn)真操作會(huì)讓你飛速進(jìn)步。本書(shū)的資源有哪些本書(shū)的學(xué)習(xí)需要配合卓斌開(kāi)發(fā)的Android測(cè)試應(yīng)用,因?yàn)闀?shū)中的實(shí)操大多是在該應(yīng)用程序上實(shí)踐的。 此外,也會(huì)為讀者提供書(shū)中進(jìn)行逆向分析的案例樣本和所有代碼(掃描封底二維碼即可獲得),而且部分章節(jié)還配有視頻(掃描書(shū)中二維碼即可觀看)。讀者如果在操作過(guò)程中有任何問(wèn)題,或者有解決不了的難題,歡迎聯(lián)系我們,可以添加微信(xiaojianbang8888或者Charleval),也可以加入讀者QQ群945868932。 本人和卓斌致力于安全逆向教育多年,涉及領(lǐng)域包括網(wǎng)絡(luò)爬蟲(chóng)、JavaScript逆向、Android逆向、深度學(xué)習(xí)圖像識(shí)別等。 讀者有進(jìn)一步學(xué)習(xí)的想法,或者對(duì)于書(shū)中的知識(shí)有任何問(wèn)題,都可以通過(guò)以上渠道聯(lián)系我們,我們可以共同討論解決。由于編者水平有限,對(duì)書(shū)中的不足之處,懇請(qǐng)讀者批評(píng)指正。李岳陽(yáng)
李岳陽(yáng),畢業(yè)于北京大學(xué),小肩膀教育聯(lián)合創(chuàng)始人。曾于有道精品課教授Python編程,后為網(wǎng)易云課堂特邀專家,開(kāi)設(shè)包括爬蟲(chóng)工程師等多門課程,擁有多年授課經(jīng)驗(yàn)。曾出版書(shū)籍《反爬蟲(chóng)AST原理與還原混淆實(shí)戰(zhàn)》。卓斌,小肩膀教育創(chuàng)始人,51CTO年度新銳講師。擁有十余年安全開(kāi)發(fā)培訓(xùn)經(jīng)驗(yàn),多年來(lái)研發(fā)多門Web和Android端逆向課程,深受學(xué)員好評(píng)。
前言第1章 Frida逆向環(huán)境搭建1.1 Frida框架介紹1.2 Frida框架環(huán)境搭建1.2.1 Python的安裝1.2.2 Visual Studio Code的安裝1.2.3 Node.js的安裝1.2.4 Frida的安裝1.3 Android平臺(tái)環(huán)境搭建1.3.1 Android系統(tǒng)刷機(jī)1.3.2 獲取Android系統(tǒng)管理員權(quán)限1.3.3 frida-server配置第2章 Frida框架Java層應(yīng)用2.1 Frida框架的Hook方法2.1.1 Hook靜態(tài)方法和實(shí)例方法2.1.2 Hook構(gòu)造方法2.1.3 Hook重載方法2.1.4 Hook方法的所有重載2.1.5 對(duì)象參數(shù)的構(gòu)造2.1.6 主動(dòng)調(diào)用Java函數(shù)2.2 Frida框架Hook類2.2.1 獲取和修改類的字段2.2.2 Hook內(nèi)部類和匿名類2.2.3 枚舉所有已加載的類和枚舉類的所有方法2.2.4 Hook類的所有方法2.3 實(shí)戰(zhàn):某嘟牛協(xié)議分析2.3.1 某嘟牛Java層登錄協(xié)議分析2.3.2 Frida框架輔助協(xié)議分析2.3.3 Frida框架生成加密參數(shù)第3章 關(guān)鍵代碼快速定位3.1 集合的Hook3.1.1 Hook HashMap定位散列表3.1.2 打印函數(shù)棧3.1.3 Hook ArrayList定位動(dòng)態(tài)數(shù)組3.2 組件與事件的Hook3.2.1 Hook Toast定位提示3.2.2 Hook findViewById定位組件3.2.3 Hook setOnClickListener定位按鈕點(diǎn)擊事件3.3 常用類的Hook3.3.1 Hook TextUtils定位用戶輸入3.3.2 Hook JSONObject定位JSON數(shù)據(jù)3.3.3 Hook Collections定位排序算法3.3.4 Hook String定位字符轉(zhuǎn)換3.3.5 Hook StringBuilder定位字符串操作3.3.6 Hook Base64定位編碼3.4 其他類的定位3.4.1 Hook定位接口的實(shí)現(xiàn)類3.4.2 Hook定位抽象類的實(shí)現(xiàn)類3.5 實(shí)戰(zhàn):去除應(yīng)用程序的強(qiáng)制升級(jí)第4章 算法自吐腳本開(kāi)發(fā)4.1 工具函數(shù)封裝4.2 Frida Hook MD5算法4.2.1 Hook MD5算法update方法4.2.2 Hook MD5算法digest方法4.3 Frida Hook MAC算法4.3.1 Hook MAC算法密鑰4.3.2 Hook MAC算法update方法4.3.3 Hook MAC算法doFinal方法4.4 Frida Hook數(shù)字簽名算法4.4.1 Hook 數(shù)字簽名算法update方法4.4.2 Hook 數(shù)字簽名算法sign方法4.5 Objection輔助Hook4.5.1 Objection的安裝和基本使用4.5.2 實(shí)戰(zhàn):某電競(jìng)界面跳轉(zhuǎn)第5章 Frida框架so層基本應(yīng)用5.1 獲取Module5.1.1 通過(guò)模塊名來(lái)獲取Module5.1.2 通過(guò)地址來(lái)獲取Module5.1.3 Process中的常用屬性和方法5.2 枚舉符號(hào)5.2.1 枚舉模塊的導(dǎo)入表5.2.2 枚舉模塊的導(dǎo)出表5.2.3 枚舉模塊的符號(hào)表5.2.4 Module中的常用屬性和方法5.3 Frida Hook so函數(shù)5.3.1 Hook導(dǎo)出函數(shù)5.3.2 從給定地址查看內(nèi)存數(shù)據(jù)5.3.3 Hook任意函數(shù)5.3.4 獲取指針參數(shù)返回值5.3.5 Frida inlineHook獲取函數(shù)執(zhí)行結(jié)果5.4 Frida修改函數(shù)參數(shù)與返回值5.4.1 修改函數(shù)數(shù)值參數(shù)與返回值5.4.2 修改字符串參數(shù)5.5 實(shí)戰(zhàn):某熱點(diǎn)登錄協(xié)議分析第6章 JNI函數(shù)的Hook與快速定位6.1 JNI函數(shù)的Hook6.1.1 JNIEnv的獲取6.1.2 枚舉libart符號(hào)表來(lái)Hook6.1.3 通過(guò)計(jì)算地址的方式來(lái)Hook6.2 主動(dòng)調(diào)用so函數(shù)6.2.1 Frida API主動(dòng)調(diào)用JNI函數(shù)6.2.2 so層文件打印函數(shù)棧6.2.3 DebugSymbol類6.2.4 so層主動(dòng)調(diào)用任意函數(shù)6.2.5 通過(guò)NativeFunction主動(dòng)調(diào)用JNI函數(shù)6.3 JNI函數(shù)注冊(cè)的快速定位6.3.1 Hook dlsym獲取函數(shù)地址6.3.2 Hook RegisterNatives獲取函數(shù)地址6.4 ollvm混淆應(yīng)用協(xié)議分析實(shí)戰(zhàn)6.4.1 jnitrace工具的使用6.4.2 實(shí)戰(zhàn):某App應(yīng)用程序協(xié)議分析第7章 Frida框架so層進(jìn)階應(yīng)用7.1 Frida操作內(nèi)存數(shù)據(jù)7.1.1 內(nèi)存讀寫(xiě)7.1.2 Frida修改so函數(shù)代碼7.1.3 Frida 從內(nèi)存中導(dǎo)出 so函數(shù)7.1.4 ollvm字符串解密7.1.5 構(gòu)造二級(jí)指針7.1.6 讀寫(xiě)文件7.2 Frida其他常用API介紹7.2.1 NativePointer類的常用方法7.2.2 Memory的常用方法7.2.3 替換函數(shù)7.3 Frida進(jìn)階Hook7.3.1 Hook系統(tǒng)函數(shù)dlopen7.3.2 Hook系統(tǒng)函數(shù)JNI_Onload7.3.3 Hook系統(tǒng)函數(shù)initarray7.3.4 Hook系統(tǒng)函數(shù)pthread_create7.3.5 監(jiān)控內(nèi)存讀寫(xiě)7.3.6 函數(shù)追蹤工具frida-trace7.3.7 Frida API的簡(jiǎn)單封裝7.3.8 代碼跟蹤引擎stalker7.4 實(shí)戰(zhàn):某觀察登錄協(xié)議分析第8章 Frida框架算法轉(zhuǎn)發(fā)方案8.1 Frida的Python庫(kù)使用8.1.1 Frida注入方式8.1.2 spawn方式啟動(dòng)與連接非標(biāo)準(zhǔn)端口8.2 Frida與Python交互8.3 Frida的RPC調(diào)用8.4 實(shí)戰(zhàn):某嘟牛Frida算法轉(zhuǎn)發(fā)