使用Flowdroid生成Android程序API调用序列
Flowdroid是一个开源项目,可以对Apk进行静态分析,提取API调用序列。源码地址为Flowdroid项目
安装过程按照这篇文章 Flowdroid安装进行就可以了。
下面的代码实现了对APK的批量提取。
package cqu.van;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Vector;
import soot.MethodOrMethodContext;
import soot.Scene;
import soot.SootMethod;
import soot.jimple.infoflow.android.SetupApplication;
import soot.jimple.toolkits.callgraph.CallGraph;
import soot.jimple.toolkits.callgraph.Targets;
public class GetAPI {
//设置android的jar包目录
public final static String androidPlatformPath = "C:\\Users\\van\\AppData\\Local\\Android\\Sdk\\platforms";
//设置要分析的APK文件
public final static String appDirPath = "F:\\Sample\\benapk";
//设置结果输出的路径
//public final static String AnaPath = "F:\\Sample\\malapi";
public final static String SenapiPath = "";
static Object ob = new Object();
private static Map<String,Boolean> visited = new HashMap<String,Boolean>();
private static Vector<String> file_vec = new Vector<String>();
private static Vector<String> sen_api = new Vector<String>();
public static void getfile(){
File file = new File(appDirPath);
File[] tempList = file.listFiles();
for (int i = 0; i < tempList.length; i++) {
if (tempList[i].isFile()) {
int lenname =tempList[i].getName()