使用助手类使用Soot检测Android应用程序

时间:2014-05-30 09:10:09

标签: java android soot

我正在使用辅助类来检测Android应用程序,遵循http://www.sable.mcgill.ca/soot/tutorial/profiler2/profiler2.html中的Java检测示例。

在我的BodyTransformer中,我有一个静态块来加载MyCounter类

counterClass = Scene.v().loadClassAndSupport("MyCounter");

由于在加载MyCounter时没有执行处理我的args(我提供-android-jars)的Soot.Main.main(args),因此Soot无法找到我的android jar并给出错误:

Caused by: java.lang.RuntimeException: You are analyzing an Android application but did not define android.jar. Options -android-jars or -force-android-jar should be used.
at soot.Scene.defaultClassPath(Scene.java:455)
at soot.Scene.getSootClassPath(Scene.java:224)
at soot.SootResolver.<init>(SootResolver.java:81)
at soot.Singletons.soot_SootResolver(Singletons.java:802)
at soot.SootResolver.v(SootResolver.java:91)
at soot.Scene.loadClass(Scene.java:667)
at soot.Scene.loadClassAndSupport(Scene.java:653)
at MyBodyTransformer.<clinit>(MyBodyTransformer.java:26)
... 1 more

作为一个解决方案,我在创建BodyTransformer之前在我的主类中提供了我的命令行参数(android jars,soot classpath,prepend classpath和process directory)。现在,它的工作原理。

我想问一下是否有更合适的方法来解决这个问题。

1 个答案:

答案 0 :(得分:0)

loadClassAndSupport也不够用。这是你应该做的。在您的分析'main方法中,在调用Soot的main方法之前添加以下内容:

Scene.v()addBasicClass( “MyCounter”);

然后在你的分析中只需使用Scene.v()。getSootClass(“MyCounter”)。