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