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
根據實際情況選擇
我這里只下載 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 已不推薦使用這些模式)
先到這里吧 估計要寫拆成三個文章來寫。