[Soot-list] Generating Android APK CallFlowGraph

Modhi Alsobiehy m99m20 at hotmail.com
Sat Jul 5 13:25:37 EDT 2014


Hi all,

I need to traverse the call flow graph of android apps( apk files).

I understand that I must set an entry point so to start, I tried the following code :




----------------------------------------------------------------------------------------------------


mport java.io.IOException;

import java.util.Collections;


import org.xmlpull.v1.XmlPullParserException;


import soot.PackManager;

import soot.Scene;

import soot.SootMethod;

import soot.jimple.infoflow.android.SetupApplication;

import soot.options.Options;


public class CFG {


	public CFG() {

	// TODO Auto-generated constructor stub

	}


	public static void main(String[] args) {

	// TODO Auto-generated method stub

	SetupApplication app = new SetupApplication("D:/AndroidADT/adt-bundle-windows-x86_64-20131030/sdk/platforms","D:/APKs/location.apk");



	try {

	app.calculateSourcesSinksEntrypoints("D:/FlowDroid/SourcesAndSinks.txt");

	} catch (IOException e) {

	// TODO Auto-generated catch block

	e.printStackTrace();

	} catch (XmlPullParserException e) {

	// TODO Auto-generated catch block

	e.printStackTrace();

}



soot.G.reset();



	Options.v().set_src_prec(Options.src_prec_apk);



	Options.v().set_process_dir(Collections.singletonList("D:/APKs/location.apk"));



	Options.v().set_android_jars("D:/AndroidADT/adt-bundle-windows-x86_64-20131030/sdk/platforms");



	Options.v().set_whole_program(true);



	Options.v().set_allow_phantom_refs(true);



	Options.v().set_output_format(Options.output_format_none);



	Options.v().setPhaseOption("cg.spark", "on");



Scene.v().loadNecessaryClasses(); 



SootMethod entryPoint = app.getEntryPointCreator().createDummyMain();



Options.v().set_main_class(entryPoint.getSignature());



Scene.v().setEntryPoints(Collections.singletonList(entryPoint));



	System.out.println(entryPoint.getActiveBody());



PackManager.v().runPacks();



	System.out.println(Scene.v().getCallGraph().size());



}


}

---------------------------------------------------------------------------------------------------------------------

Unfortunately, I am getting the following error:

Exception in thread "main" java.lang.NoClassDefFoundError: pxb/android/axml/NodeVisitor



at soot.jimple.infoflow.android.manifest.ProcessManifest.handle(Unknown Source)



at soot.jimple.infoflow.android.manifest.ProcessManifest.<init>(Unknown Source)



at soot.jimple.infoflow.android.manifest.ProcessManifest.<init>(Unknown Source)



at soot.jimple.infoflow.android.SetupApplication.calculateSourcesSinksEntrypoints(Unknown Source)



at soot.jimple.infoflow.android.SetupApplication.calculateSourcesSinksEntrypoints(Unknown Source)




	at apkCFG.CFG.main(CFG.java:25)



Caused by: java.lang.ClassNotFoundException: pxb.android.axml.NodeVisitor





at java.net.URLClassLoader$1.run(Unknown Source)



at java.net.URLClassLoader$1.run(Unknown Source)




	at java.security.AccessController.doPrivileged(Native Method)





at java.net.URLClassLoader.findClass(Unknown Source)



at java.lang.ClassLoader.loadClass(Unknown Source)



at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)



at java.lang.ClassLoader.loadClass(Unknown Source)



... 6 more



Any help or advise on how to do that would be deeply appreciated!

Thanx!!







Sent from Windows Mail
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20140705/6757285f/attachment-0003.html 


More information about the Soot-list mailing list