基於 Android APP 安全測試流程


基於 Android APP APK解包與逆向 安全測試流程 客戶端程序安全、敏感信息安全

1. 大綱

APK 解包與逆向 

客戶端程序安全  

敏感信息安全 

部分測試會用到 jdk   Eclipse+ADT+Android SDK 這開發平台弄會比較麻煩 可能會放到后面講

如果你只是想快速測試某 APP 不妨用阿里雲 MQC    以及網易易盾

特別需要說的  :建議移動安全適合專人來做,因為需要專門的電腦環境配置也比較麻煩。

2. 需要的環境以及工具

SDK:Java JDK,Android SDK。  

apk 工具:android 組件安全測試工具,activity 劫持測試工具,android 擊鍵記錄測試工具, 

代理工具(proxydroid),MemSpector,Host Editor。 

工具:7zip,dex2jar,jd-gui,apktool,IDA pro,ApkAnalyser,Eclipse,dexopt-wrapper,010 editor,SQLite Studio,ApkIDE。 

3.apk 解包與逆向

APK 解包和逆向是所有 APP 安全分析的開始。當然我這里說的比較淺顯。

一般 APK 用壓縮包軟件即可打開解壓 我這里使用的 7zip  好處無廣告無捆綁速度還行,這里隨便找的一個游戲 APP 具體就不透露了

工具  dex2jar  jd-gui

3.1 下載與使用 dex2jar 

下載地址:https://sourceforge.net/projects/dex2jar/

使用:

解壓之后輸入  d2j-dex2jar.bat 文件名  一般為 classes.dex  (見上圖)  APK 解壓放到了桌面 test 文件夾中

會在 dex2jar 目錄生成一個這個文件

那么如何查看該 jar 文件的內容呢?此時就需要安裝 jd-gui。 

3.2 下載與使用 jd-gui

下載地址: http://jd.benow.ca/ 

使用沒什么好說 windows 就一個 exe  打開之后就這樣  下圖中打開 classes.dex2jar-jar 代碼是經過混淆處理的 最明顯就是其中有 a.b.c.d 這樣的內容。

如果沒有混淆處理這里應該明文,混淆處理是一種防止逆向的手段,混淆處理后雖然也有逆向分析手段但是這里不具體分析了。

沒有混淆處理基本說明 apk 發開人員安全意識不夠。

3.3 反編譯 so 庫

工具 IDA PRO   大名鼎鼎的工具 – - 下載地址應該不需要了

APK 解壓之后在 lib/armeabi 有個.so 文件  用 IDA pro  打開 可以看到 so 文件中包含的函數,ARM 匯編代碼,導入導出函數等信息

4. 客戶端程序安全

4.1 安裝包簽名

檢測客戶端是否經過恰當簽名(正常情況下應用都應該是簽名的,否則無法安裝),簽名是否符合規范。

工具 jarsigner    

jarsigner 這個是命令行執行工具  只要安裝了 jdk  會在 jdk 中的 bin 目錄里 用來執行(具體 JDK 安裝要配置環境變量不贅述)

C:\Program Files\Java\jdk1.8.0_121\bin>jarsigner.exe

用法: jarsigner [選項] jar-file 別名

       jarsigner -verify [選項] jar-file [別名...]

[-keystore <url>]           密鑰庫位置 

[-storepass <口令>]         用於密鑰庫完整性的口令 

[-storetype <類型>]         密鑰庫類型 

[-keypass <口令>]           私有密鑰的口令 (如果不同) 

[-certchain <文件>]         替代證書鏈文件的名稱 

[-sigfile <文件>]           .SF/.DSA 文件的名稱 

[-signedjar <文件>]         已簽名的 JAR 文件的名稱 

[-digestalg <算法>]        摘要算法的名稱 

[-sigalg <算法>]           簽名算法的名稱 

[-verify]                   驗證已簽名的 JAR 文件 

[-verbose[:suboptions]]     簽名/驗證時輸出詳細信息。 

                            子選項可以是 all, grouped 或 summary 

[-certs]                    輸出詳細信息和驗證時顯示證書 

[-tsa <url>]                時間戳頒發機構的位置 

[-tsacert <別名>]           時間戳頒發機構的公共密鑰證書 

[-tsapolicyid <oid>]        時間戳頒發機構的 TSAPolicyID 

[-tsadigestalg <算法>]      時間戳請求中的摘要數據的算法 

[-altsigner <類>]           替代的簽名機制的類名 

[-altsignerpath <路徑列表>] 替代的簽名機制的位置 

[-internalsf]               在簽名塊內包含 .SF 文件 

[-sectionsonly]             不計算整個清單的散列 

[-protected]                密鑰庫具有受保護驗證路徑 

[-providerName <名稱>]      提供方名稱 

[-providerClass <類>        加密服務提供方的名稱 

  [-providerArg <參數>]]… 主類文件和構造器參數 

[-strict]                   將警告視為錯誤 

警告

第一條 是因為簽名密鑰不在本地密鑰庫中

第二條 沒有時間戳

再執行命令

jarsigner.exe -verify -verbose -certs C:\Users\Administrator\Desktop\test.apk

顯示內容比較多看部分就可以 紅框部分有地點:成都  名稱為 darknights   

若客戶端安裝包簽名有異常(例如簽名證書為第三方開發商而不是客戶端發布方),此時高風險;若無異常則無風險。

4.2 客戶端程序保護

反編譯 使用 apktool  

章節 3 基本講的反編譯內容。這里在補充一個 apktool 反編譯為 smali 代碼

工具 apktool   

下載:https://ibotpeaches.github.io/Apktool/install/

根據實際情況選擇

我這里只下載 jar  放到 windows 目錄

然后會生成一個 跟 apk 同名的文件夾  下面會有一個 smali 的文件夾

因為這個應用在之前做了混淆   現在看 在 alipay(支付寶接口) 關鍵部分也是做了混淆

判定:此時應用為低風險

大部分代碼(包括核心代碼)經過混淆,此時低風險。

部分代碼混淆,關鍵代碼(加密或通信等)可以獲知其關鍵代碼,此時中風險

客戶端全部進行加殼保護,此時認為無風險。

5. 敏感信息安全

5.1 數據文件

主要的是在安卓環境中測試,安裝解包后的文件是否權限合理,這里需要用到 Eclipse+ADT+Android SDK   但是作為簡單簡介可以用任意一個安卓模擬器來做

這里我使用的是逍遙模擬器(安卓)新裝的一個 ES 文件瀏覽器   最左邊是測試的 APP

ES 文件瀏覽器 的好處 

1:安卓處於保護自己的目的,一般系統自帶文件管理是看不到所有文件的。 

2:有些文件修改需要 ROOT 權限 es 文件瀏覽器有 ROOT 工具 

打開 ES 文件瀏覽器點擊應用 可以看到這樣應用 package Name  可以根據這個關鍵字去目錄里搜索

ROOT 工具箱打開不然你看不到隱藏的文件

根據關鍵字搜索找到文件

基本權限跟 LINUX 表示方法是一樣 關鍵要觀察這個應用所在目錄下的所有文件權限(除 LIB 目錄下外)

判斷:

正常的文件權限最后三位應為空(類似「rw-rw—-」),即除應用自己以外任何人無法讀寫;

目錄則允許多一個執行位(類似「rwxrwx—x」)。如果文件任何人可寫就存在安全問題。

如下圖(開頭字母是 D 的目錄)  安卓也有命令行具體調用這里不多說了 因為模擬器我搞半天沒調用出來

特別說明的:

當客戶端使用 MODE_WORLD_READABLE 或 MODE_WORLD_WRITEABLE 模式創建文件時,shared_prefs 目錄下文件的權限也會多出一些,這不一定是安全問題(Google 已不推薦使用這些模式)

先到這里吧 估計要寫拆成三個文章來寫。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM