标签归档:Java

Soot的过程

soot Phrases

Soot的标准过程无非就是从Classes到Jimple Bodies再到Baf Bodies再到Classes的过程。

先看这个是必要的。理解了Soot的过程,才知道在哪里插入修改,然后又达到些什么目的。

主要参考文章:Packs and phases in Soot(2008) 

从jb开始:所有的非系统方法都有jb,而jb生成的过程是不可修改的,可以理解成这是一个忠于原著的内容翻译过程。

下一步是cg:生成整个调用图。此阶段的修改适用于调用关系分析,以至一些污点传染分析等。

再下一步是whole program:注意到wjtp->wjop->wjap和后面的jtp->jop->jap是类似的,只是前者针对全局进行处理。wjtp的过程的修改适用于加入inter-analysis(全程序范围分析),可用于soot.Main里面修改一些context?猜测的。wjop的过程修改适用于全局替换或插入?wjap,不清楚。

w-*的过程默认是不打开的,要使用的话需要显式指定soot启用w过程(-w)。

而jtp,用于加入intra-analysis,在方法中增加一些锚点等。默认打开。

jop,默认不打开。可用于混淆代码?猜测的。

jap,默认打开,但内部所有过程是关闭的。需要程序中根据需要使能。

 

持续更新。

 

 

在Soot之前有分析过的一些工具

这里列举一下,就当是备份了。

首先看的是QARK,基于python和JRE1.6的一个工具,运行在OSX和*nix上,(值得留意的是,在最近的查找中,windows上的支持越来越少了),主要是漏洞检测工具。类似的Java代码漏洞检测工具不少,但不是我想要的。我想要的是一个容易理解和修改的污点检测工具,用来跟踪敏感数据的流向。

SPARTA/DARPA,一个大学项目,要得到源代码,然后依赖于人工添加注释的方法得到信息流,source(源),sink(流向)的数据。提供一个检查框架,依赖于半自动的方式检查APK里面的malware风险。由于是人工参与,所以成本控制方面并不理想。需要a.训练相关的人检查,b.需要开发者提供代码并有效注释。

继续阅读

Soot初入

很抱歉的是很久很久没有做过Java工程了,加上Soot又是一个历史很悠久的项目,而用者也不多。

这是一个反编译并重新优化/修改/混淆代码的Java分析框架。

以下是一些Java的基础,哭。

JAVA_HOME

CLASSPATH,用于jvm运行时查找相关class的,如果当前路径查找,必须加入”.”。相关的.jar如果不想-cp(classpath的缩写),也必须加入CLASSPATH。

有包路径的class,直接查找是不行的,要构造个包……

继续阅读