戰(zhàn)指南:三種工具從 APK 中提取與解碼 AndroidManifest.xml)
文檔教程網(wǎng)絡(luò)安全【免費(fèi)下載鏈接】mastgThe OWASP Mobile Application Security Testing Guide (MASTG) is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes for verifying the OWASP Mobile Security Weakness Enumeration (MASWE) weaknesses, which are in alignment with the OWASP MASVS.項(xiàng)目地址https://gitcode.com/gh_mirrors/ow/mastg點(diǎn)擊查看免費(fèi)下載AndroidManifest.xml 是 Android 應(yīng)用的安全身份證它聲明了權(quán)限、組件、導(dǎo)出狀態(tài)、備份開關(guān)、SDK 版本等關(guān)鍵信息是移動(dòng)應(yīng)用安全測(cè)試中最先要檢查的文件之一。本文基于 OWASP MASTG 的 MASTG-TECH-0117完整講解如何用 jadx、apktool、aapt2 三種主流工具從 APK 中提取并解碼該文件對(duì)比各工具輸出格式的差異尤其是uses-sdk元素的處理差異并銜接 MASTG 中后續(xù)的 Manifest 分析與組件暴露測(cè)試流程。讀完本文你將掌握在任何一次 Android 滲透測(cè)試開始時(shí)快速、正確地獲取可讀 Manifest 的實(shí)操方法。為什么不能直接解壓 APK 來(lái)讀 Manifest在 Android 平臺(tái)概覽 章節(jié)中明確說(shuō)明每一個(gè) Android 應(yīng)用在 APK 的根目錄都包含一個(gè)AndroidManifest.xml文件但該文件以二進(jìn)制 XML 格式binary XML存儲(chǔ)而不是普通的文本 XML。這個(gè)文件定義了應(yīng)用的結(jié)構(gòu)與關(guān)鍵屬性Android 操作系統(tǒng)在安裝和運(yùn)行時(shí)依賴它來(lái)完成權(quán)限授予、組件注冊(cè)、Intent 路由等操作。因此直接用unzip等工具解壓 APK 得到的AndroidManifest.xml是一堆二進(jìn)制字節(jié)無(wú)法用文本編輯器直接閱讀。在 apktool 工具頁(yè) 中也印證了這一點(diǎn)僅用標(biāo)準(zhǔn)unzip解包 APK 會(huì)留下一些不可讀的文件AndroidManifest.xml就是其中之一——它被編碼為二進(jìn)制 XML 格式。要從 APK 中獲得人類可讀的 Manifest必須先用專用工具提取并解碼。不同工具解碼出的結(jié)果格式各不相同有的盡量保留原始 XML 結(jié)構(gòu)有的在解碼過(guò)程中對(duì)內(nèi)容進(jìn)行了解釋或改寫。下面依次介紹 MASTG 推薦的三種方案。方法一使用 jadxMASTG-TOOL-0018jadx 是一款開源 Dex/Java 反編譯器同時(shí)提供 CLIjadx與 GUIjadx-gui兩種形態(tài)其功能覆蓋資源與 Manifest 解碼、符號(hào)重構(gòu)、交叉引用查找、類/符號(hào)/資源/代碼搜索、自定義擴(kuò)展 API 以及應(yīng)用調(diào)試支持等是 MASTG 中最常用的 Android 分析工具之一。在只關(guān)心 Manifest而不需要反編譯全部源碼的場(chǎng)景下使用 jadx CLI 的--no-src參數(shù)僅提取資源而不反編譯源碼jadx --no-src -d out_dir MASTG-DEMO-0001.apk其中--no-src跳過(guò) Java 源碼反編譯只處理資源速度更快、輸出更干凈-d out_dir指定輸出目錄末尾參數(shù)為待分析的 APK 文件路徑。jadx 會(huì)將 Manifest完整地輸出到out_dir/resources/AndroidManifest.xml并且包含uses-sdk元素——這一點(diǎn)是 jadx 與 apktool 的關(guān)鍵差異詳見(jiàn)下文。例如對(duì) MASTG 演示應(yīng)用 MASTG-DEMO-0001 解包后其 Manifest 開頭形如?xml version1.0 encodingutf-8? manifest xmlns:androidhttp://schemas.android.com/apk/res/android ... uses-sdk android:minSdkVersion29 android:targetSdkVersion35 /可以看出 jadx 的輸出是標(biāo)準(zhǔn)的 XML 格式屬性沿用android:命名空間前綴minSdkVersion與targetSdkVersion直接以元素形式呈現(xiàn)無(wú)需再查其他文件。方法二使用 apktoolMASTG-TOOL-0011apktool 是 Android 安全測(cè)試與逆向工程的另一款核心工具。除了解碼 Manifest 之外默認(rèn)運(yùn)行時(shí)會(huì)自動(dòng)將二進(jìn)制 Manifest 解碼為文本 XML、提取文件資源并將 DEX 反匯編為 smali 代碼后者在本書后續(xù)的代碼層面分析中會(huì)再次用到。提取 Manifest 的推薦命令$ apktool d -s -f -o output_dir MASTG-DEMO-0001.apk I: Using Apktool 2.11.1 on MASTG-DEMO-0001.apk with 8 threads I: Copying raw classes.dex file... ... I: Loading resource table... I: Decoding file-resources... I: Decoding values */* XMLs... I: Decoding AndroidManifest.xml with resources...各參數(shù)含義ddecode解碼模式-sno-src跳過(guò)對(duì) dex 文件的 baksmali 反匯編只保留原始classes.dex因此速度更快——在僅需 Manifest 的場(chǎng)景下務(wù)必加上-fforce若輸出目錄已存在則強(qiáng)制覆蓋-o output_dir指定輸出目錄。解碼完成后Manifest 位于output_dir/AndroidManifest.xml可以直接用文本編輯器打開查看。apktool 輸出的目錄中還包含apktool.yml記錄解碼輸出信息、original/含 JAR 的MANIFEST.MF、res/應(yīng)用資源目錄等具體結(jié)構(gòu)見(jiàn) apktool 工具頁(yè)。注意apktool 會(huì)隱藏uses-sdk元素使用 apktool 解碼 APK 時(shí)你可能會(huì)注意到反編譯后的AndroidManifest.xml中缺少uses-sdk元素即包含minSdkVersion與targetSdkVersion的那個(gè)元素。這是預(yù)期行為——apktool 并沒(méi)有丟棄這些值而是把它們移入了同目錄下的獨(dú)立文件apktool.yml而非插入到解碼后的 XML Manifest 中sdkInfo: minSdkVersion: 29 targetSdkVersion: 35這意味著如果測(cè)試流程依賴從 Manifest 直接讀取 SDK 版本信息例如判斷targetSdkVersion是否達(dá)到平臺(tái)安全要求使用 apktool 時(shí)需同時(shí)查閱apktool.yml的sdkInfo字段而使用 jadx 時(shí)則可以直接在 XML 內(nèi)看到uses-sdk。這一差異在 MASTG-TECH-0117 中被明確強(qiáng)調(diào)也是兩種工具輸出行為最重要的區(qū)別之一。方法三使用 aapt2MASTG-TOOL-0124如果你只關(guān)心 Manifest 中的特定值包名、版本、權(quán)限、SDK 版本等可以使用 aapt2。aapt2 位于 Android SDK Build Tools自 26.0.2 修訂版起提供中路徑形如[SDK-Path]/build-tools/[version]/aapt2。讀取 Manifest 摘要信息的命令$ aapt2 d badging MASTG-DEMO-0001.apk package: nameorg.owasp.mastestapp versionCode1 versionName1.0 platformBuildVersionName15 platformBuildVersionCode35 compileSdkVersion35 compileSdkVersionCodename15 sdkVersion:29 targetSdkVersion:35 uses-permission: nameandroid.permission.INTERNET uses-permission: nameorg.owasp.mastestapp.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION application-label:MASTestApp ...重要提醒a(bǔ)apt2 的輸出不是 XML 文件而是類似上面的鍵值對(duì)格式。它以自定義命名約定輸出各條目例如package:給出包名與版本信息、sdkVersion:/targetSdkVersion:給出 SDK 版本、uses-permission:逐行列出聲明的權(quán)限、application-label:給出應(yīng)用顯示名稱等。這種格式適合快速提取單個(gè)值可配合grep過(guò)濾但結(jié)構(gòu)信息如組件聲明、導(dǎo)出狀態(tài)不如 XML 輸出完整需要時(shí)仍需回到前兩種方法。三種工具輸出格式對(duì)比工具輸出位置格式是否含uses-sdk適用場(chǎng)景jadx--no-srcout_dir/resources/AndroidManifest.xml標(biāo)準(zhǔn) XMLandroid:前綴命名是直接在 XML 內(nèi)需要完整可讀的 Manifest且不想反編譯源碼apktoold -s -foutput_dir/AndroidManifest.xml標(biāo)準(zhǔn) XMLandroid:前綴命名否值移入apktool.yml的sdkInfo后續(xù)可能還要反匯編 smali 或重打包 APKaapt2d badging終端標(biāo)準(zhǔn)輸出自定義鍵值格式非 XML如application-debuggable以sdkVersion:/targetSdkVersion:行呈現(xiàn)只查包名、版本、權(quán)限等特定值正如 MASTG-TECH-0150分析 AndroidManifest所強(qiáng)調(diào)的輸出格式取決于提取工具。jadx 與 apktool 輸出標(biāo)準(zhǔn) XML屬性沿用android:前綴如android:debuggabletrue而 aapt2 輸出自定義解碼格式命名約定不同如application-debuggable。后續(xù)的 grep 搜索、字段定位腳本等分析手段都應(yīng)基于所選工具的格式來(lái)設(shè)計(jì)。提取之后在 MASTG 測(cè)試體系中的銜接AndroidManifest.xml的提取是整個(gè) Android 安全測(cè)試鏈的第一步MASTG 中大量測(cè)試項(xiàng)都以本技術(shù)為前提MASTG-TECH-0126提取 Manifest 后檢索所有uses-permission元素評(píng)估權(quán)限是否遵循最小權(quán)限原則MASTG-TECH-0150系統(tǒng)性地分析 Manifest 中的屬性、標(biāo)志、權(quán)限與組件聲明MASTG-TECH-0159查找android:exportedtrue的導(dǎo)出 ActivityMASTG-TECH-0160、MASTG-TECH-0161、MASTG-TECH-0162分別針對(duì)activity/activity-alias、service、receiver元素記錄其android:name、android:exported、android:permission與 intent filter識(shí)別暴露給其他應(yīng)用的 IPC 入口點(diǎn)。同時(shí)在 Android 平臺(tái)概覽 中還提到一個(gè)容易被忽視的事實(shí)構(gòu)建期 Manifest 會(huì)被合并——最終 APK 中的 Manifest 是應(yīng)用自身聲明與所有依賴庫(kù)合并后的產(chǎn)物可能包含開發(fā)者并未顯式聲明的權(quán)限、組件或設(shè)置。因此安全評(píng)估必須分析合并后的最終輸出即從 APK 中實(shí)際提取出的那份才能理解應(yīng)用的真實(shí)暴露面。例如從 MASTG-DEMO-0001 的 APK 提取出的 Manifest 中就可以看到比源碼聲明更多的元素package屬性唯一應(yīng)用標(biāo)識(shí)、uses-sdkminSdkVersion/targetSdkVersion、新增的 activity、provider、receiver以及android:debuggabletrue這類暴露調(diào)試狀態(tài)的標(biāo)志。小結(jié)獲取 AndroidManifest.xml 是 Android 應(yīng)用安全評(píng)估的起點(diǎn)也是 OWASP MASTG 中眾多測(cè)試項(xiàng)的共同前置步驟。根據(jù)場(chǎng)景選擇工具即可需要完整 XML 且含 SDK 信息用 jadx--no-src需要兼顧后續(xù) smali 分析或重打包用 apktoold -s -f注意sdkInfo在apktool.yml只查關(guān)鍵值用 aapt2d badging注意非 XML 輸出。掌握這三種工具的差異你就能在任何 Android 測(cè)試項(xiàng)目的開局階段快速獲得準(zhǔn)確的 Manifest 數(shù)據(jù)為后續(xù)的權(quán)限審計(jì)、組件暴露檢測(cè)與加固評(píng)估奠定基礎(chǔ)。贊分享文檔教程網(wǎng)絡(luò)安全【免費(fèi)下載鏈接】mastgThe OWASP Mobile Application Security Testing Guide (MASTG) is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes for verifying the OWASP Mobile Security Weakness Enumeration (MASWE) weaknesses, which are in alignment with the OWASP MASVS.項(xiàng)目地址https://gitcode.com/gh_mirrors/ow/mastg點(diǎn)擊查看免費(fèi)下載相關(guān)推薦OpenCore Legacy Patcher舊Mac免費(fèi)升級(jí)最新macOSOpenCore Legacy Patcher舊Mac免費(fèi)升級(jí)最新macOS 蘋果給每代macOS都劃定了機(jī)型門檻舊Intel Mac到點(diǎn)就被擋在外面。Op文檔教程網(wǎng)絡(luò)安全OWASP MASTG Android UnCrackable L4r2Pay破解實(shí)戰(zhàn)PIN 碼提取與白盒密碼逆向指南OWASP MASTG Android UnCrackable L4r2Pay破解實(shí)戰(zhàn)PIN 碼提取與白盒密碼逆向指南 本文以 apps/android/文檔教程網(wǎng)絡(luò)安全OWASP MASTG 實(shí)戰(zhàn)Android UnCrackable L1 逆向挑戰(zhàn)——從 APK 靜態(tài)分析到動(dòng)態(tài) Hook 提取隱藏密鑰OWASP MASTG 實(shí)戰(zhàn)Android UnCrackable L1 逆向挑戰(zhàn)——從 APK 靜態(tài)分析到動(dòng)態(tài) Hook 提取隱藏密鑰 UnCrackabl文檔教程網(wǎng)絡(luò)安全上一篇如何一鍵為海量本地音樂(lè)添加同步歌詞LRCGET完整使用指南下一篇如何免費(fèi)激活Windows和OfficeKMS_VL_ALL_AIO終極指南創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考