代码:
sootMain.java文件
package com.sun.soot.example
import java.util.Collections
import soot.PackManager
import soot.Scene
import soot.Transform
import soot.options.Options
public class sootMain {
private static boolean SOOT_INITIALIZED=false
private final static String androidJAR="./lib/android.jar"
private final static String appApk="./LedPedometer.apk"
public static void initialiseSoot()
{
if(SOOT_INITIALIZED)
return
Options.v().set_allow_phantom_refs(true)
Options.v().set_prepend_classpath(true)
Options.v().set_validate(true)
Options.v().set_output_format(Options.output_format_jimple)
// Options.v().set_output_format(Options.output_format_dex)
Options.v().set_process_dir(Collections.singletonList(appApk))
Options.v().set_force_android_jar(androidJAR)
Options.v().set_src_prec(Options.src_prec_apk)
Options.v().set_soot_classpath(androidJAR)
Scene.v().loadNecessaryClasses()
SOOT_INITIALIZED=true
}
public static void main(String[] args)
{
initialiseSoot()
PackManager.v().getPack("jtp").add(new Transform("jtp.myAnalysis", new MyAnalysis()))
PackManager.v().runPacks()
PackManager.v().writeOutput()
}
}
MyAnalysis.java文件
package com.sun.soot.example
import java.util.Iterator
import java.util.Map
import soot.*
import soot.jimple.*
import soot.jimple.internal.*
import soot.toolkits.graph.*
import soot.options.Options
import soot.tagkit.LineNumberTag
import soot.tagkit.Tag
import soot.toolkits.graph.CompleteBlockGraph
import soot.toolkits.scalar.ArraySparseSet
import soot.util.Chain
import soot.util.HashChain
public class MyAnalysis extends BodyTransformer{
protected void internalTransform(final Body body,String phase, @SuppressWarnings("rawtypes")Map options){
for (SootClass c:Scene.v().getApplicationClasses()) {
System.out.println("[sootClass]"+c)
for(SootMethod m:c.getMethods())
{
//System.out.println("[sootMethod]"+m)
if(m.isConcrete())
{
Body b=m.retrieveActiveBody()
// System.out.println("[body]"+b)
Iterator<Unit> i=b.getUnits().snapshotIterator()
while(i.hasNext())
{
Unit u=i.next()
}
}
}
}
}
}