源链接:https://github.com/Sable/soot/wiki/Running-Soot-as-Eclipse-Plugin
Eclipse集成soot
注:该插件无法安装在luna版本下,建议使用kepler版本。
Soot是一个Java二进制代码分析和转换框架,它提供了一个用于建立中间表示层(即IR)、分析和转换的Java API,同时支持class文件的注解(annotation)。最近它还被进一步扩展以更好的支持Dalvik/Android二进制码的分析和转换。
1.Soot用于Eclipse插件:用户总是希望他们的开发成果有着简单的接口和开发平台。而The Soot-Eclipse插件在Eclipse中集成了Soot,用户可以:
- 自动优化class文件并使用更加先进的优化选项
- 导入class文件并使用Dava反编译它们
- 使用可以高亮显示的jimple编辑器
- 在source和IR层观察参数信息
- 使用交互式控制流图进行分析
此插件可运行在Eclipse3.3版本上(测试版本为3.3.2)
2.Eclipse安装Soot插件的步骤:
- 菜单中Help-> Software Updates (install new software)
- 点击Add,name自己填一个,地址用http://sable.github.io/soot/eclipse/(原文中的地址已经不能用了)
- 一路next,重启,搞定
注:原文提到eclipse会提示无法找到GEF或Draw2D,这个我没有遇到。
译者注:Java版本一定要用1.7或者以下版本,1.8有些新特性不支持!!
3.Soot-Eclipse插件的使用:建立一个工程给Soot使用,一个Eclipse工程的结构如下所示,"src"文件夹存放源代码文件,"bin"文件夹存放class。Soot会自动识别这些文件的位置。
转换不同的IR:Eclipse插件可以很容易的将java源文件或者二进制文件转成Jimple或者Grimp中间表示层,或者逆向转换。右键点击.java文件,并选择合适的选项,如图所示:
SootOutput:Soot将生成的文件放入工程当前目录下的“SootOutput”文件夹中,这个过程会在console视图下显示。
显示数据流分析的结果:Soot可以使用三种不同的标签来显示数据流分析的结果:String Tag _: 当鼠标悬停在标签上时显示string; _Colour Tag:颜色高亮显示标记的stmt或者值;Link Tag:从标记过的stmt或者value跳转至另一个stmt,通过点击源stmt或value(这句翻的有问题,希望哪位能给点帮助)。例如,右击Testclass,选择 Process Source File –> Run Soot…. 在output选项中选择jimple,在Phase Options/Jimple Annotation Pack选项中激活Reaching Defs Tagger,然后点击run。此时打开.java文件会发现有些不一样的东西,如图。我们可以在我们自己的分析中加入各种各样的标签。
扩展Soot:使用插件扩展Soot很简单,我们甚至在Eclipse中提供了稳定的示例。点击File -> New -> Example然后选中其中一个
soot将新建一个java工程作为项目的载体,输入项目所有必要的信息,Eclipse然后会自动显示示例文件
注意到是soot库一部分的PackManager等文件访问类型,工程是如何访问库的?soot插件自动提供了指向soot库的路径变量SOOTCLASSES,对于示例工程来说,变量是自动添加的。如果你想不使用示例工程扩展soot,你需要自行添加变量。
假设现在我们想将我们新的BodyTransformer应用到Testclass类。再一次,右击Testclass.java,Soot -> Process Source File -> Run Soot。
只有在此时我们需要选择SootMain Class标签然后按照下图所示填写值。