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