Android系統信息和安全機制(學習筆記)

Android系統信息和安全機制

主要內容:

  • Android系統信息的獲取
  • PackageManager的使用
  • ActivityManager的使用
  • Android安全機制

1.Android系統信息獲取

要獲取系統的配置信息,通常可以從以下兩個方面獲取

  • android.os.Build
  • SystemProperty

    1.1 android.os.Build

    android.os.Build類中的信息非常豐富,它包含了系統編譯時的大量設備,配置信息:

  • Build.BOARD // 主板

  • Build.BRAND // Android系統定製商
  • Build.SUPPORTED_ABIS // CPU指令集
  • Build.DEVICE // 設備參數
  • Build.DISPLAY // 顯示屏參數
  • Build.FINGERPRINT // 唯一編號
  • Build.SERIAL // 硬件序列號
  • Build.ID // 修訂版本列表
  • Build.MANUUFACTURER //硬件製造商
  • Build.MODER // 版本
  • Build.HARDWARE // 硬件名
  • Build.PRODUCT // 手機產品名
  • Build.TAGS // 描述Build的標籤
  • Build.TYPE // Builder類型
  • Build.VERSION.CODENAME // 當前開發代號
  • Build.VERSION.INCREMENTAL // 源碼控制版本號
  • Build.VERSION.RELEASE // 版本字符串
  • Build.VERSION.SDK_INT // 版本號
  • Build.HOST // Host值
  • Build.USER // User名
  • Build.TIME // 編譯時間

    1.2 SystemProperty

    SystemProperty包含了許多系統配置屬性值和參數,很多信息與上面通過android.os.Build獲取的值是相同的:

  • os.version // OS版本

  • os.name // OS名稱
  • os.arch // OS架構
  • user.home // Home屬性
  • user.name // Name屬性
  • user.dir // Dir屬性
  • user.timezone // 時區
  • path.separator // 路徑分隔符
  • line.separator // 行分隔符
  • file.separator // 文件分隔符
  • java.vendor.url // Java vender URL屬性
  • java.class.path // Java Class 路徑
  • java.class.version // Java Class 版本
  • java.vender // Java Vender屬性
  • java.version // Java版本
  • java.home // Java Home屬性

1.3 Android系統信息實例

String board = Build.BOARD;
String brand = Build.BRAND;

String os_version = System.getProperty("os.version");
String os_name = System.getProperty("os.name");

2. Android Apk應用信息獲取之PackageManager

2.1 PackageManager

這裏寫圖片描述

在上圖中,最裏面的框代表整個Activity的信息,系統提供了ActivityInfo類來進行封裝。
最外面的框代表着整個Mainifest文件中節點的信息,系統提供了PackageInfo來進行封裝。
而Android系統提供了PackageManager來負責管理所有已安裝的App。

  • ActivityInfo
    ActivityInfo封裝了在Mainifest文件中和之間的所有信息,包括name,icon,label.launchmode等
  • ServiceInfo
    ServiceInfo與ActivityInfo類似,它封裝了之間的所有信息。
  • ApplicationInfo
    ApplicationInfo也是一樣,它封裝了之間的信息,不過特別的是,ApplicationInfo包含很多Flag,FLAG_SYSTEM表示系統應用,FLAG_EXTERNAL_STORAGE表示安裝在SDCard上的應用等,通過這些Flag,可以方便地判斷應用的類型。
  • PackageInfo
    PackageInfo與前面三個Info類似,都是用於封裝Mainifest文件的相關節點信息,而PackageInfo包含了所有的Activity,Service等信息。
  • ResolveInfo
    ResolveInfo比較特殊,它封裝的是包含信息的上一級信息,所以它可以返回ActivityInfo,ServiceInfo等包含的信息,它經常用來幫助我們找到那些包含特定Intent條件的信息,如帶分享功能,播放功能的應用。

有了上面這些用於封裝的Bean對象後,PackageManager就可以通過調用各種方法,返回不同類型的Bean對象了。PackageManager經常使用方法:

  • getPackageManager——通過調用這個方法返回PackageManager對象。
  • getApplicationInfo——以ApplicationInfo的形式返回指定包名 的ApplicationInfo
  • getApplicationIcon——返回指定包名的Icon
  • getInstalledApplication——以ApplicationInfo的形式返回安裝的應用
  • getInstalledPackages——以PackageInfo的形式返回安裝的應用
  • queryIntentActivites——返回指定intent的ResolveInfo對象,Activity對象
  • queryIntentServices——返回指定intent的ResolveInfo對象,Service對象
  • resolveActivity——返回指定intent的Activity
  • resolveService——返回指定intent的Service

判斷App類型的依據,就是利用ApplicationInfo中的FLAG_SYSTEM來進行判斷,代碼如下:

app.flags & ApplicationInfo.FLAG_SYSTEM

通過這樣的標誌區分,可以判斷出以下幾種不同的應用類型

  • 如果當前應用的flags & ApplicationInfo.FLAG_SYSTEM != 0 則爲系統應用。
  • 如果當前應用的flags & ApplicationInfo.FLAG_SYSTEM <= 0 則爲第三方應用。
  • 特殊的,當系統應用經過升級後,也將成爲第三方應用:flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP != 0 。
  • 如果當前應用的flags & ApplicationInfo.FALG_EXTERNAL_STORAGE != 0 則爲安裝在SDCard上的應用。

3. Android Apk應用信息獲取之ActivityManager

PackageManager重點在於獲得應用的包信息,而ActivityManager重點在於獲得在運行的應用程序信息。
內存信息:
- ActivityManager.MemoryInfo
MemoryInfo有幾個非常重要的字段:availMem——系統可用內存,totalMem——總內存,threshold——低內存的閾值,即區分是否低內存的臨界值,lowMemory——是否處於低內存。
- Debug.MemoryInfo
ActivityManager.MemoryInfo通常用於獲取全局的內存使用信息,而Debug.MemoryInfo用於統計進程下的內存信息。
- RunningAPPProgressInfo
RunningAPPProgressInfo是運行進程的信息,存儲的字段是進程相關的信息,progressName——進程名,pid——進程pid,uid——進程uid,pkgList——該進程下的所有包。
- RunningServiceInfo
RunningServiceInfo用於封裝運行的服務信息,activeSince——第一次被激活的時間,方式,foreground——服務是否在後臺執行。

5. Android安全機制

5.1 Android安全機制簡介

Android開發者在Android系統中建立了五道防線來保護Android系統的安全。

5.1.1 第一道防線

代碼安全機制——代碼混淆progrard

5.1.2 第二道防線

應用接入權限控制——AndroidMainifest文件權限聲明,權限檢查機制。

5.1.3 第三道防線

應用簽名機制——數字證書

5.1.4 第四道防線

Linux內核層安全機制——Uid、訪問權限控制

5.1.5 第五道防線

Android虛擬機沙箱機制——沙箱隔離

5.2 Android系統安全隱患

5.2.1 代碼漏洞

5.2.2 Root風險

5.2.3 安全機制不健全

5.2.4 用戶安全意識

5.2.5 Android開發原則與安全

5.3 Android Apk反編譯

三個工具:

5.3.1 apktool

5.3.2 Dex2jar、jd-gui

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章