我正在尝试获取apk文件的调用图。我运行下面的代码。但之后当我检查sootOutput文件时,它是空的!!有任何想法吗? P.S:它打印图表的大小,没有错误!
提前谢谢
import java.io.IOException;
import java.util.Collections;
import org.xmlpull.v1.XmlPullParserException;
import soot.PackManager;
import soot.Scene;
import soot.SootMethod;
import soot.jimple.infoflow.android.SetupApplication;
import soot.options.Options;
public class call {
public call() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
// TODO Auto-generated method stub
SetupApplication app = new SetupApplication("D:\\Users\\ML\\AppData\\Local\\Android\\sdk\\platforms","D:/b.apk");
try {
app.calculateSourcesSinksEntrypoints("C:\\Users\\ML\\workspace\\Graph\\1.txt");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
soot.G.reset();
Options.v().set_src_prec(Options.src_prec_apk);
Options.v().set_process_dir(Collections.singletonList("D:/b.apk"));
Options.v().set_android_jars("D:\\Users\\ML\\AppData\\Local\\Android\\sdk\\platforms");
Options.v().set_whole_program(true);
Options.v().set_allow_phantom_refs(true);
Options.v().set_output_format(Options.output_format_boutput_format_class);
Options.v().setPhaseOption("cg.spark", "on");
Scene.v().loadNecessaryClasses();
SootMethod entryPoint = app.getEntryPointCreator().createDummyMain();
Options.v().set_main_class(entryPoint.getSignature());
Scene.v().setEntryPoints(Collections.singletonList(entryPoint));
//System.out.println(entryPoint.getActiveBody());
PackManager.v().runPacks();
System.out.println(Scene.v().getCallGraph().size());
}
}
答案 0 :(得分:0)
您正以非常非标准的方式使用Soot。特别是,您实际上从未实际调用过写出输出所需的Soot方法。我强烈建议调用Soot自己的主方法soot.Main.main,然后插入一堆变形金刚。