1. 程式人生 > >android apk反編譯安全檢查----shared_preferences任意讀寫漏洞

android apk反編譯安全檢查----shared_preferences任意讀寫漏洞

測試某apk時,使用http://appscan.360.cn進行首次分析,報出存在shred_prefs任意讀寫的問題。於是研究一下測試思路。此文純屬個人分析,若有不對指出,還請指出。

一、shared_prefs任意讀寫漏洞的檢查思路

1.apk進行反編譯成smali語言

使用apktool的命令apktool d XX.apk -o OutputFolder即可。

2.遍歷搜尋

遍歷OutputFolder資料夾中.samli檔案,搜尋裡面是否有  getSharedPreferences方法。

3.判斷getSharedPreferences方法傳入的引數值

檢查到getSharedPreferences方法後,進一步檢視該方法的引數值,是否為0x01\0x02\0x03,它們分別表示可讀、可寫、可讀可寫

一個smali語言例子:

const/4 v2, 0x3

invoke-virtual {p0, v1, v2}, Landroid/content/Context;->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences;
表示getSharedPreferences的mode為v2,即0x3,可讀可寫。

二、getSharedPreferences方法詳細分析

方法定義:getSharedPreferences(String name , int mode)

引數意義:

name  ---- xml檔案的名字。該檔案所在路徑為/data/data/應用名字/shared_prefs/name.xml。

mode ---- 開啟xml檔案的方式,有如下五種:

Context.MODE_PRIVATE = 0 (0x0000):預設方式,表示僅本程式可用,其他程式不可訪問,寫入方式為覆蓋

Context.APPEND = 32768 (0x8000):表示僅本程式可用,其他程式不可訪問,寫入方式為追加

Context.MODE_WORLD_READABLE = 1 (0x0001):表示檔案可被其他程式讀取

Context.MODE_WORLD_WRITEABLE = 2 (0x0002):表示檔案可被其他程式寫入

Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE = 3 (0x0003):表示檔案可被其他程式讀取、寫入

由此可見,當mode的值為1、2、3時,是具有安全風險的。

三、風險

導致應用資訊洩露、篡改,嚴重的話,會導致應用崩潰、影響手機執行

四、修改方法

將mode的值改為Context.MODE_PRIVATE或者Context.APPEND,阻止其他程式的訪問。

在其他程式必須可以訪問的情況下,需要保證shared_prefs檔案中不存在使用者敏感資訊,在應用程式中,也要增加對該檔案讀操作時的異常處理。