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

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