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,默认打开,但内部所有过程是关闭的。需要程序中根据需要使能。
持续更新。