简体   繁体   English

使用帮助程序类使用Soot来检测Android应用

[英]Instrumenting Android apps with Soot using a helper class

I am instrumenting Android applications using a helper class following the example for Java instrumentation in http://www.sable.mcgill.ca/soot/tutorial/profiler2/profiler2.html . 我正在按照http://www.sable.mcgill.ca/soot/tutorial/profiler2/profiler2.html中 Java工具示例使用帮助器类对Android应用程序进行工具检测。

In my BodyTransformer, I have a static block to load MyCounter class 在我的BodyTransformer中,我有一个静态块来加载MyCounter类

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

Since Soot.Main.main(args) that processes my args (in which I provide -android-jars) is not executed while it is loading MyCounter, Soot cannot find my android jar and gives the error: 由于处理我的args的Soot.Main.main(args)(我在其中提供-android-jars)在加载MyCounter时未执行,因此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

As a solution, I provided my command line arguments (android jars, soot classpath, prepend classpath and process directory) in my main class, before creating my BodyTransformer. 作为解决方案,在创建BodyTransformer之前,我在主类中提供了命令行参数(android jars,soot类路径,前置类路径和process目录)。 Now, it works. 现在,它可以工作了。

I would like to ask whether there is a more proper way to solve this problem. 我想问一下是否有更合适的方法来解决这个问题。

loadClassAndSupport is nor sufficicient. loadClassAndSupport也不足够。 Here is what you should do. 这是您应该做的。 In your analysis' main method, before you call Soot's main method add the following: 在分析的main方法中,调用Soot的main方法之前,请添加以下内容:

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

Then within your analysis simply use Scene.v().getSootClass("MyCounter"). 然后在您的分析中只需使用Scene.v()。getSootClass(“ MyCounter”)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM