境搭建、靜態(tài)與動態(tài)分析實戰(zhàn))
Android惡意樣本分析第一件要做的事不是急著脫殼也不是急著抓包而是先搞清楚自己手上是個什么東西。很多剛?cè)腴T的同學(xué)拿到一個樣本APK第一反應(yīng)就是扔進在線掃描平臺看報告這個習(xí)慣我不是說不好而是它容易讓你產(chǎn)生依賴——報告是別人出的特征是別人提取的你只是看了一個結(jié)論自己什么都沒學(xué)會。我自己做移動安全這些年最深的體會就是病毒分析本質(zhì)上是一場信息博弈。樣本在想辦法隱藏自己你在想辦法把它看穿。這個系列的文章我會按照實際分析的推進順序來寫從環(huán)境準(zhǔn)備、靜態(tài)分析、動態(tài)監(jiān)控、脫殼對抗到行為判定一步步把一套完整的分析思路拆給你看。這一篇作為系列的第一篇先解決“從零開始怎么看一個安卓樣本”的問題不涉及太深的反混淆和脫殼對抗重點把這套基礎(chǔ)流程跑通。等這套基本功扎實了后面遇到加固、混淆、HOOK對抗的時候你才有底氣說“我能分析”。1. 分析環(huán)境搭建沒準(zhǔn)備好戰(zhàn)場別急著上槍1.1 為什么必須用獨立的分析環(huán)境我一直跟身邊的人強調(diào)分析惡意樣本絕不能用主力機連插著SIM卡的測試機都不行。因為現(xiàn)在很多安卓惡意樣本帶有非常強的環(huán)境感知能力它們會檢測你手機上是否安裝了常用社交軟件、是否有通話記錄、是否插了SIM卡、甚至?xí)粫盏教囟ǖ尿炞C碼。這些檢測一旦被你手動過掉或者環(huán)境里不存在樣本就會進入“休眠模式”什么都不做你的分析就會陷入“明明拿到了樣本卻看不到任何惡意行為”的尷尬局面。我見過最典型的一個案例某金融類木馬樣本在無SIM卡、無通訊錄的模擬器上運行時非常安靜所有的惡意代碼全部不觸發(fā)。后來我們把通話記錄、通訊錄、短信等數(shù)據(jù)全部模擬出來之后樣本立刻開始活躍加密上傳通訊錄、攔截短信驗證碼、隱藏自身圖標(biāo)動作一個接一個。這個例子充分說明了“模擬真實用戶環(huán)境”的重要性。獨立分析環(huán)境要滿足以下幾個條件系統(tǒng)是干凈的沒有任何個人數(shù)據(jù)、常用APP、甚至不要登錄任何賬號網(wǎng)絡(luò)是可控的最好能實時看到樣本對外發(fā)出的每一個請求有完整的快照回滾能力樣本搞壞了系統(tǒng)可以一鍵恢復(fù)工具的安裝要克制不要裝一堆大而全的監(jiān)控軟件——工具本身可能被樣本反檢測1.2 我推薦的模擬器配置方案安卓樣本分析的主流載體還是模擬器因為快照、回滾、網(wǎng)絡(luò)監(jiān)控都方便。我自己常用的組合是這樣的夜神模擬器安卓7作為主力動態(tài)分析環(huán)境安卓9或更高版本的系統(tǒng)鏡像用于分析那些強制要求高版本系統(tǒng)的樣本真機刷了原生系統(tǒng)的舊手機用于模擬器上跑不了或者行為異常的情況選擇安卓7是有講究的。早期的惡意樣本絕大多數(shù)都兼容安卓7以下版本而且安卓7的ART運行時對Xposed框架的兼容性極好很多HOOK方案在安卓7上不需要考慮SELinux和Siginfo太多問題。另外許多加固方案的脫殼機對安卓7的支持也是最成熟的比如你在FART或者Youpk上看到的兼容條件絕大多數(shù)都寫著“支持安卓7.0-9.0”。模擬器的配置有幾個細(xì)節(jié)值得注意不要開Root權(quán)限的默認(rèn)設(shè)置很多安全檢測軟件自己就是靠Root運行的你先開Root你的分析工具就已經(jīng)暴露了CPU核心數(shù)給到4核以上內(nèi)存給到4G以上樣本很多時候要跑好幾個小時資源不夠會假死打開模擬器的“外部網(wǎng)絡(luò)”訪問權(quán)限如果只允許模擬器訪問局部網(wǎng)有些樣本的聯(lián)網(wǎng)行為會異常1.3 基礎(chǔ)分析工具清單這套工具是我每次拿到新樣本都必須提前準(zhǔn)備好的整理成清單給你參考工具作用使用場景JADXAPK靜態(tài)反編譯直接看Java層代碼快速瀏覽樣本邏輯jadx-guiJADX的可視化界面帶反編譯功能日常主要分析工具frida動態(tài)插樁框架任意Java層函數(shù)HOOK動態(tài)分析核心objection基于Frida的免Root動態(tài)分析快速繞過Root檢測、SSL PinningXposed/LSPosedJava層及部分Native層HOOK框架高版本模擬器動態(tài)分析Wireshark網(wǎng)絡(luò)流量抓取和分析抓樣本通信數(shù)據(jù)Charles/FiddlerHTTPS解密代理分析樣本與服務(wù)器的加密通信好壓/7-Zip解包APK查看資源文件和原始文件強調(diào)一點工具不是越多越好而是越順越好。你自己用得最順手的工具組合效率永遠(yuǎn)是最高的。我見過很多人電腦上裝了一堆工具結(jié)果每個工具都不會深度使用拿樣本分析的時候反而不知道怎么下手。1.4 網(wǎng)絡(luò)管控怎么做模擬器的網(wǎng)絡(luò)管控最容易忽略但是最影響分析質(zhì)量。我常用的方案是在宿主機上搭一個代理服務(wù)器模擬器的流量全部指向這個代理代理記錄所有HTTP/HTTPS請求的域名、路徑、參數(shù)HTTPS流量用Charles的中間人證書解密查看這里面有一個非常大的坑后面專門會講很多惡意樣本做了SSL Pinning校驗?zāi)阋粧齑碜TTPS它會直接報錯退出。所以網(wǎng)絡(luò)分析必須準(zhǔn)備兩套方案一套是正常代理解密另一套是用Frida繞過SSL校驗后再抓包。2. 靜態(tài)分析三件套解包、看清單、搜特征2.1 把APK拆開看看里面有什么拿到樣本后第一件事永遠(yuǎn)是解包。APK本質(zhì)上是個ZIP包你可以直接用7-Zip打開。解包后的目錄結(jié)構(gòu)是這樣assets/ 存放本地資源文件、加密的payload等 lib/ 存放SO庫armeabi-v7a、arm64-v8a META-INF/ 簽名信息和清單文件 res/ 各種資源文件 AndroidManifest.xml 核心配置文件 classes.dex 程序主代碼Dalvik字節(jié)碼看APK目錄能獲得的第一手信息是很多的assets目錄里有沒有可疑的加密文件——很多惡意樣本會把真正的惡意代碼藏在assets里的加密文件中運行時再解密釋放lib目錄下的SO庫的名字和數(shù)量——如果大量SO庫名帶“protect”“secure”“shell”之類的字樣那基本就是加了殼classes.dex的數(shù)量——正常APP一般一個dex就夠如果解壓出來是好幾個dex要么功能確實很大要么就是把惡意代碼拆分隱藏了我印象很深的一個樣本解包后在assets目錄下看到一個文件叫dd.dat大小有4MB多而這整個APK才6MB。正常APK的資源文件是不會有這種大體積的.dat文件的后來確認(rèn)這個文件就是加密的惡意payload運行時解密釋放到應(yīng)用私有目錄執(zhí)行。2.2 讀懂AndroidManifest.xmlAndroidManifest.xml是APK的“身份證”里面什么關(guān)鍵信息都有。拿JADX打開樣本后第一件事是看manifest。主要關(guān)注這幾個點包名包名是唯一的很多惡意樣本會偽裝成正常的包名來迷惑用戶入口Activity通常第一個啟動的界面權(quán)限列表樣本申請了哪些權(quán)限是否有與其功能不符合的敏感權(quán)限Service、Receiver列表看樣本注冊了哪些后臺服務(wù)Application的name有加固的話這個值會被替換成殼的Application看權(quán)限列表是識別惡意樣本最快的途徑之一。你想想一個計算器APP申請讀取通訊錄、發(fā)送短信、獲取定位權(quán)限這正常嗎明顯不對。反過來如果這個計算器APP申請了“系統(tǒng)設(shè)置修改”權(quán)限那更不用想絕對有鬼。但也要注意高級樣本越來越會“克制”權(quán)限申請它們會把敏感行為拆分成多次申請、或者運行時通過動態(tài)注冊服務(wù)來避免在安裝時暴露權(quán)限。所以看權(quán)限只是第一步不是判斷依據(jù)。2.3 關(guān)鍵代碼特征快速定位解包和看清單只是前期偵查真正要命的代碼定位得靠搜索。我最常搜索的代碼特征包括反射調(diào)用搜索Class.forName、getMethod、invoke惡意樣本經(jīng)常用反射做動態(tài)加載來隱藏真實行為動態(tài)加載搜索DexClassLoader、PathClassLoader樣本把惡意代碼藏在加密文件里運行時會動態(tài)加載系統(tǒng)命令執(zhí)行搜索Runtime.getRuntime().exec、ProcessBuilder直接在Java層執(zhí)行系統(tǒng)命令隱私數(shù)據(jù)獲取搜索getDeviceId、getSubscriberId、getSimSerialNumber設(shè)備信息是黑產(chǎn)最想要的短信/通訊錄操作搜索SmsManager、ContentResolver查詢通訊錄加密算法搜索AES、DES、RSA、Cipher樣本和服務(wù)器通信前數(shù)據(jù)一般都會加密這些特征搜出來之后結(jié)合JADX的“交叉引用”功能誰調(diào)用了我、我調(diào)用了誰就能一步一步把整個調(diào)用鏈串起來。這個過程有點像剝洋蔥一層一層剝開最終露出樣本的“心臟”。有一個搜特征的技巧我記得特別牢不要只搜索一個詞要多組合幾個關(guān)鍵詞。比如一個惡意行為需要三四個特征函數(shù)組合才能觸發(fā)你只搜一個肯定不夠反過來如果你搜到三個以上的敏感行為特征出現(xiàn)在同一段代碼里那基本就能確定這是惡意邏輯。2.4 靜態(tài)分析的局限靜態(tài)分析不是萬能的它的最大敵人是代碼混淆和運行時動態(tài)行為。靜態(tài)分析只能看到“代碼長的什么樣”看不到“代碼運行時干了什么”。比如加密的payload在靜態(tài)階段是解密不了的因為密鑰可能在SO庫里、可能在服務(wù)器上、甚至可能在用戶輸入里——靜態(tài)階段根本無從知曉。另外很多惡意樣本的代碼被做了控制流平坦化、字符串加密靜態(tài)分析看到的就是一堆亂糟糟的跳轉(zhuǎn)和看不到明文的字符串這時候還得上動態(tài)分析。3. 動態(tài)分析實操讓樣本自己跑起來現(xiàn)原形3.1 動態(tài)分析的三大前置條件動態(tài)分析就是把樣本放到隔離環(huán)境里讓它真正運行起來然后觀察它的行為。但跑之前有三個前置條件必須準(zhǔn)備到位快照備份模擬器當(dāng)前狀態(tài)做一個快照樣本跑掛了直接恢復(fù)網(wǎng)絡(luò)代理已配置Charles/Wireshark已經(jīng)掛好流量等著抓Hook工具已注入Frida server已經(jīng)在模擬器里跑起來了有一次我犯了個低級錯誤樣本還沒開始跑Frida server沒啟動等樣本起來了我才發(fā)現(xiàn)結(jié)果大部分通信流量已經(jīng)錯過了。所以這三樣?xùn)|西必須在樣本安裝之前就全部就緒。3.2 安裝、啟動、觀察、記錄四步法接下來是動態(tài)分析的常規(guī)流程安裝樣本注意看安裝時的權(quán)限申請彈窗很多樣本會誘導(dǎo)用戶給權(quán)限啟動樣本啟動后不要急著點先在系統(tǒng)進程里找到它確認(rèn)進程存活觀察行為看進程列表變化、看文件讀寫、看網(wǎng)絡(luò)流量、看界面跳轉(zhuǎn)記錄每步操作包括點擊了哪里、彈了什么窗、觸發(fā)了什么行為動態(tài)分析最關(guān)鍵的一點是要像真實用戶一樣操作樣本。你需要點擊它的界面按鈕模擬正常交互。有些樣本的惡意行為要特定操作才會觸發(fā)比如雙擊五次、長按三秒、輸入特定代碼等等。3.3 用Frida看Java層動態(tài)調(diào)用Frida是目前動態(tài)分析的主流方案它的能力是直接在運行時修改Java層方法邏輯打印所有關(guān)鍵函數(shù)的調(diào)用參數(shù)和返回值。以抓取getDeviceId為例Frida腳本可以這樣寫Java.perform(function() { var TelephonyManager Java.use(android.telephony.TelephonyManager); TelephonyManager.getDeviceId.implementation function() { var result this.getDeviceId(); console.log(getDeviceId called, result result); return result; }; });這個腳本運行后一旦樣本調(diào)用了getDeviceId我們就能看到它拿走了什么設(shè)備信息。這種方式的優(yōu)勢是對樣本完全透明樣本感知不到自己被監(jiān)視。我自己常用的是用objection直接做Frida插樁因為它自動化程度高你可以直接輸入命令查看當(dāng)前調(diào)用了哪些方法、實時攔截和修改返回值。像這樣objection -g com.example.malware explore進入交互模式后輸入android hooking list activities可以列出所有Activity輸入android hooking watch class android.telephony.TelephonyManager就能監(jiān)控TelephonyManager的所有方法調(diào)用。3.4 動態(tài)加載的代碼怎么分析前面靜態(tài)分析時提到的DexClassLoader在動態(tài)分析階段就能暴露真面目了。當(dāng)樣本運行起來在JADX里看到DexClassLoader加載的dex路徑上你會看到一個真實存在的文件這時候你就可以把那個文件拉出來再扔進JADX里反編譯——這其實就是脫殼的雛形。加密payload也一樣運行時它必須解密才能加載你只要在解密后、加載前的那一刻把文件抓出來整個加密就破了。這個時機抓得好不好直接決定了你的分析效率。4. 流量分析看樣本和自己的服務(wù)器說了什么4.1 流量抓取的兩個層次樣本運行起來之后的網(wǎng)絡(luò)行為是你判斷它的用途、他的上線指令、它的遠(yuǎn)控地址最直接證據(jù)。流量分析分兩個層次第一層抓包看HTTP/HTTPS明文。這是最直觀的。樣本跟服務(wù)器通信GET/POST請求、響應(yīng)包內(nèi)容一目了然。Charles上直接可以看到域名、路徑、參數(shù)、返回值。第二層看TCP/UDP層的直接通信。有些樣本不走HTTP直接裸TCP發(fā)數(shù)據(jù)——這通常是為了逃避HTTP層的檢測規(guī)則。Wireshark能看到這些原始流量。4.2 HTTPS解密與SSL Pinning繞過現(xiàn)在絕大多數(shù)安卓惡意樣本的通信都是HTTPS加密的直接抓包只能看到證書握手看不到內(nèi)容。所以要用Charles的中間人證書來解密HTTPS流量。在模擬器上信任Charles的證書之后HTTP請求就能被解密查看。但真正麻煩的是SSL Pinning。樣本把自己的服務(wù)器證書固定在了客戶端代碼里中間人證書不被信任SSL握手直接失敗。繞過SSL Pinning的標(biāo)準(zhǔn)做法是用Frida Hook掉證書校驗函數(shù)Java.perform(function() { var TrustManagerImpl Java.use(com.android.org.conscrypt.TrustManagerImpl); TrustManagerImpl.verifyChain.implementation function() { return []; // 直接返回空數(shù)組跳過證書校驗 }; });跑上這個腳本后再開Charles抓包HTTPS流量的內(nèi)容就能看到了。4.3 通信內(nèi)容分析能從流量里發(fā)現(xiàn)的典型惡意特征包括上傳本機信息POST請求的Body里帶設(shè)備ID、手機號碼、通訊錄數(shù)據(jù)接收遠(yuǎn)程指令服務(wù)器響應(yīng)一個JSON包含actionsendSms之類的命令字段下載惡意載荷樣本從服務(wù)器下載一個APK或DEX然后動態(tài)加載執(zhí)行心跳?;顧C制每30秒或者1分鐘發(fā)一次心跳包保持和控制端的長連接我曾經(jīng)分析過一個樣本它的網(wǎng)絡(luò)行為會周期性向服務(wù)器發(fā)送加密心跳包。抓包后發(fā)現(xiàn)心跳包的內(nèi)容是一串經(jīng)過AES加密的base64字符串用硬編碼在樣本里的密鑰做解密后能直接看到里面包含手機的IMEI號、SIM卡運營商信息和當(dāng)前電量——這些數(shù)據(jù)本身不敏感但組合起來就拼湊出這個手機號用戶的完整畫像了這就是黑產(chǎn)泄數(shù)前的情報收集行為。5. 惡意行為判定與分類5.1 常見惡意軟件的判定標(biāo)準(zhǔn)把前面靜態(tài)、動態(tài)、流量三個階段的信息收集匯總之后就能判定樣本是否屬于惡意軟件了。常見的分類維度如下隱私竊取類偷偷獲取通訊錄、短信、定位、設(shè)備信息并上傳資費消耗類后臺發(fā)短信、訂購SP服務(wù)、下載應(yīng)用遠(yuǎn)程控制類接收服務(wù)器指令執(zhí)行操作包括靜默安裝、卸載應(yīng)用勒索類加密用戶文件彈窗索要贖金廣告推送類強推廣告、靜默安裝推廣應(yīng)用判定標(biāo)準(zhǔn)最好用一個簡單粗暴的邏輯你愿不愿意讓這個APP在你的主力手機上運行如果你猶豫了這個APP基本就有問題。5.2 行為特征、證據(jù)鏈完整記錄分析完要寫報告報告的核心是形成一條完整的證據(jù)鏈。惡意行為的證據(jù)鏈要滿足“時間、地點、人物、事件”四要素時間樣本在什么時間觸發(fā)了惡意行為啟動后多久點擊后多久地點樣本在什么路徑下釋放了什么文件assets/dd.dat被解壓到/data/data目錄對象樣本操作了哪些數(shù)據(jù)獲取的IMEI、通訊錄條目數(shù)事件具體的惡意動作上傳了內(nèi)容、執(zhí)行了命令寫報告的時候這套證據(jù)鏈越完整你的分析結(jié)論就越可信。6. 反分析對抗樣本不想讓你看到的那些事6.1 Root檢測、模擬器檢測與繞過越高端的樣本越會檢查自己是不是運行在一個“安全環(huán)境”里。常見的手段有Root檢測檢查su文件是否存在、檢查Root權(quán)限模擬器檢測檢查Build.FINGERPRINT里是否包含generic關(guān)鍵字調(diào)試檢測檢查Debug.isDebuggerConnected()返回值或者檢測TracerPidHOOK框架檢測檢測Xposed相關(guān)包名是否存在這些檢測一旦命中樣本要么直接退出要么故意返回假數(shù)據(jù)坑的就是分析者。繞過思路也很清晰讓樣本認(rèn)為它運行在一臺真實手機上、而且這臺真實手機沒有Root、沒有調(diào)試、沒有HOOK。最暴力的辦法是直接用Frida修改檢測函數(shù)的返回值Java.perform(function() { var RootBeer Java.use(com.scottyab.rootbeer.RootBeer); RootBeer.isRooted.implementation function() { return false; }; });這種逐個Hook的方法在“代碼閱讀”階段很有用但在“樣本實際運行”階段我覺得最靠譜的還是直接不觸發(fā)檢測條件——不要在模擬器里開Root標(biāo)志、不要裝Xposed全家桶、用Frida的時候用frida-server而不是Xposed。6.2 加固、混淆與動態(tài)脫殼現(xiàn)在市面上主流的安卓加固方案如360、騰訊樂固、愛加密等都有對應(yīng)的脫殼方案。第一篇文章不展開講脫殼但我先把我踩過的坑說出來脫殼機不是一鍵就能出的很多時候脫殼出來的dex內(nèi)存是殘缺的還需要配合修復(fù)工具做DEX修復(fù)這個過程很消磨耐心。遇到加固樣本時我的建議是“能繞則繞”先看樣本是不是有“未加固版本”的上線更新檢測有時候老的版本沒加固新版本加了你分析舊通知就行優(yōu)先用Frida做運行時HOOK基里糊涂地繞過硬校驗直接看運行時行為脫殼機出來之后需要修復(fù)修復(fù)里最核心的是重新計算DEX的checksum和結(jié)構(gòu)對齊用現(xiàn)成的腳本是可以搞定的6.3 反調(diào)試與Anti-Frida技巧真正高端的樣本會直接檢測Frida的特征比如檢查/data/local/tmp/frida-server路徑是否存在、掃描進程列表里的frida進程、甚至檢查特定端口27042是否被監(jiān)聽。針對這類樣本我的建議是使用frida-server改名比如改成crash、systemd之類的合法名稱用frida -H遠(yuǎn)程模式把frida-server放在一臺單獨的機器上與樣本跑在同一個設(shè)備但進程列表里看不到frida用r0capture這類不依賴Frida的解法做脫殼7. 實戰(zhàn)案例復(fù)盤一個模擬遠(yuǎn)控木馬的分析過程7.1 樣本基本信息下面用我之前分析過的一個模擬項目X的遠(yuǎn)控木馬樣本完整走一遍整個分析流程。這是一個偽裝成某辦公軟件的APP包名叫com.system.update一眼看上去人畜無害。JADX打開manifest看到申請的權(quán)限里有讀取聯(lián)系人讀取短信獲取定位發(fā)送短信安裝其他應(yīng)用系統(tǒng)設(shè)置修改一個辦公軟件要發(fā)送短信和安裝應(yīng)用這個權(quán)限組合開了一個很不好的頭。7.2 靜態(tài)階段發(fā)現(xiàn)的核心線索在JADX里搜索Runtime.getRuntime().exec找到了一個非??梢傻暮瘮?shù)代碼大概是這樣的private void execShell(String cmd) { try { Process p Runtime.getRuntime().exec(cmd); // ... } catch (Exception e) { } }繼續(xù)追蹤這個函數(shù)的調(diào)用來源發(fā)現(xiàn)它被一個監(jiān)聽短信的BroadcastReceiver調(diào)用。也就是說這個樣本在收到特定的短信指令后會執(zhí)行系統(tǒng)命令。這已經(jīng)是教科書級的遠(yuǎn)控木馬行為了。7.3 動態(tài)階段的關(guān)鍵證據(jù)樣本啟動后Charles里很快就看到它有一個POST請求到https://update.xx-xxxxx.com/api/v1/report請求的Body是一串加密過的JSON密文。Frida hook解密函數(shù)拿到明文內(nèi)容后發(fā)現(xiàn)里面包含了設(shè)備的IMEI、手機號碼、通訊錄前10條記錄的全部內(nèi)容。這還不夠繼續(xù)觀察運行行為發(fā)現(xiàn)樣本在收到服務(wù)器返回的一條指令序列后會觸發(fā)DexClassLoader動態(tài)加載一個下發(fā)的惡意dex。這個dex才是完整的勒索模塊會掃描存儲卡上的文件并加密。整個鏈條到這里就非常清晰了誘騙安裝-竊取個人信息上傳-接收遠(yuǎn)程指令-下載執(zhí)行勒索模塊。這已經(jīng)是一個完整的多階段攻擊鏈。8. 常見問題與排查技巧實錄8.1 問題速查表現(xiàn)象可能原因解決辦法樣本安裝后打開閃退缺少依賴庫或檢測到模擬器環(huán)境用真機分析或修改模擬器特征Frida連接不上模擬器版本不匹配、端口被占檢查frida-server版本與客戶端一致?lián)Q端口抓包抓不到HTTPS內(nèi)容SSL Pinning未繞過用Frida hook證書校驗函數(shù)樣本運行后沒有任何行為依賴特定環(huán)境SIM卡、通訊錄在模擬器里模擬真實用戶環(huán)境脫殼后的dex無法反編譯DEX結(jié)構(gòu)損壞用修復(fù)工具修復(fù)checksum和結(jié)構(gòu)對齊網(wǎng)絡(luò)流量一片空白網(wǎng)絡(luò)代理配置錯誤檢查模擬器代理設(shè)置與宿主機端口8.2 分析流程中的幾個關(guān)鍵時間點我分享一下我分析樣本時最常記錄的“關(guān)鍵時間點”安裝時包名是不是正常簽名安裝彈窗有沒有誘導(dǎo)詞首次啟動時有沒有申請敏感權(quán)限有沒有先彈出隱私政策惡意樣本經(jīng)常偽造隱私政策走形式點擊主要功能時點擊按鈕后流量里發(fā)生了什么事收到特定指令時比如來短信、接入USB、連上WiFi這類事件觸發(fā)下樣本是什么反應(yīng)把每個關(guān)鍵時間點記錄下來分析完成后你會得到一張完整的“行為時間軸”這就是報告的大綱。8.3 心態(tài)調(diào)整分析樣本是在拼耐心安卓病毒分析不是一場閃電戰(zhàn)而是一場持久戰(zhàn)。我見過太多人拿一個棘手樣本分析了一個小時就放棄了要么說“這個樣本太高級了”要么說“工具不行”。實際上大多數(shù)時候是耐心不夠、方法不對。我自己分析最久的一個樣本前前后后花了兩周時間。驗證下來發(fā)現(xiàn)它就是簡單的加固加反調(diào)試難點全在于“反調(diào)試”這一層。一旦繞過了反調(diào)試?yán)锩鎯?nèi)容非常簡單。所以遇到卡住的時候別急著換工具先回想一下是不是漏了某個檢測、或者某個環(huán)境條件沒滿足。寫在最后這一篇先把安卓病毒分析的基礎(chǔ)流程理順了搭建環(huán)境、靜態(tài)解剖、動態(tài)監(jiān)控、流量取證、行為判定、對抗思路再到一個完整案例的復(fù)盤。整個流程跑通一遍之后你基本就具備了獨立分析一個普通惡意樣本的能力。下一篇我會專門講“脫殼實戰(zhàn)”會把常見商業(yè)殼的脫殼方法、DEX修復(fù)原理和Frida在脫殼中的高級用法一一展開。這個領(lǐng)域最深的水就在脫殼和反混淆里但有了這一篇的地基你會走得穩(wěn)很多。最后分享一個我個人的習(xí)慣每分析完一個樣本把所有用到的命令、腳本、遇到的坑、突破的關(guān)鍵點整理成一份筆記。這個筆記既是積累也是武器下次再遇到同類型樣本直接照著筆記推進速度能快一大截。