Soot獲取Android應用Manifest信息

Soot簡介

Soot是一個Java靜態分析框架,它提供了四種中間(representation)表現用於分析與轉換Java字節碼.Soot既可以作爲優化和檢查class文件的工具也可以作爲一個開發與優化Java字節碼的框架。

使用Soot可以對Android應用進行靜態分析,Android靜態分析指APK不在運行的情況下,根據某些代碼特徵來分析應用具有哪些行爲。

Manifest簡介

每個Android應用都有AndroidManifest.xml文件,它位於整個項目的根目錄,定義了應用程序及其組件的結構和數據,是Android應用的入口文件,定義瞭如下內容:

  • 程序的基本信息包名、程序版本號、sdk版本號
  • 應用的備份、調試信息
  • 四大組件信息(Activity、Service、Receiver、Provider),以及組件暴露等信息
  • 應用的Permission權限

這篇文章講解的挺清楚的,https://blog.csdn.net/u012486840/article/details/52468931

代碼實現

Soot庫裏面有ProcessManifest類,可以將Manifest轉換爲ProcessManifest對象,通過該對象可獲取Manifest.xml所有的信息

import org.xmlpull.v1.XmlPullParserException;
import soot.jimple.infoflow.android.manifest.ProcessManifest;

import java.io.IOException;

/**
 * @author wzj
 * @create 2018-07-06 21:11
 **/
public class MenifestChecker
{
    /**
     * apk路徑
     */
    private static String apkPath = "H:\\JAVA\\Soot\\apk\\clock.apk";

    public static void main(String[] args) throws IOException, XmlPullParserException
    {
        ProcessManifest processManifest = new ProcessManifest(apkPath);

        //獲取包名
        System.out.println(processManifest.getManifest().getAttribute("package"));

        System.out.println(processManifest.getPermissions());
        System.out.println(processManifest.getActivities());
        System.out.println(processManifest.getServices());
        System.out.println(processManifest.getProviders());
    }
}

源碼地址

https://github.com/HelloKittyNII/soot-android-static-analysis

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