[Soot-list] Generating Android APK CallFlowGraph

Steven Arzt Steven.Arzt at cased.de
Fri Jul 18 12:07:48 EDT 2014


Hi Lokesh,

 

You can manually iterate over the callgraph using Scene.v().getCallgraph().listener() and print it out in dot format  which should be fairly simple as it is just a QueueReader over the edges. Still, I think Soot can also directly do that, but I have never used  the dot visualizer for callgraphs.

 

Afterwards, you can visualize the dot file using GraphViz.

 

Best regards,

  Steven

 

Von: LOKESH JAIN [mailto:lokeshjain92 at gmail.com] 
Gesendet: Freitag, 18. Juli 2014 18:04
An: Steven Arzt
Cc: Modhi Alsobiehy; soot-list at cs.mcgill.ca; soot-list at sable.mcgill.ca; soot-list at googlegroups.com
Betreff: Re: [Soot-list] Generating Android APK CallFlowGraph

 

Hi,

A gentle reminder. Please reply fast. I need it for my research project.

 

Regards

Lokesh

 

On Thu, Jul 17, 2014 at 9:21 PM, LOKESH JAIN <lokeshjain92 at gmail.com> wrote:

Thanks a lot Steven and Modhi. It worked.

It is showing call graph in words. How can I graphically see the call graph for apk files as we see for java files??

 

Regards

Lokesh Jain

 

On Thu, Jul 17, 2014 at 6:11 PM, Steven Arzt <Steven.Arzt at cased.de> wrote:

Hi Lokesh,

 

It seems that you are missing the axml-2.0.jar library on your Java classpath.

 

Best regards,

  Steven

 

Von: soot-list-bounces at CS.McGill.CA [mailto:soot-list-bounces at CS.McGill.CA] Im Auftrag von Modhi Alsobiehy
Gesendet: Donnerstag, 17. Juli 2014 14:39
An: LOKESH JAIN
Cc: soot-list at cs.mcgill.ca; soot-list at sable.mcgill.ca; soot-list at googlegroups.com
Betreff: Re: [Soot-list] Generating Android APK CallFlowGraph

 

Hi Lokesh,

 

Open the folder of your project and add the call back file into it.

 

-Best,

Modhi


On Jul 17, 2014, at 12:03 PM, "LOKESH JAIN" <lokeshjain92 at gmail.com> wrote:

Hi all,

Modhi, I am using your code for generating call graph for apk file. But, I am getting 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 CFG.main(CFG.java:33)
Caused by: java.lang.ClassNotFoundException: pxb.android.axml.NodeVisitor
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 6 more

It's pretty much the same error that you were getting. Though I had checked , there is no duplicate library added. Also there is already AndroidCallbacks.txt in soot-infoflow-android, i haven't understood how to add it into my project.
Any help would be appreciated. Thank You
Regards
Lokesh


On Saturday, 5 July 2014 23:04:49 UTC+5:30, Modhi Alsobiehy wrote:

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/20140718/43d12385/attachment-0003.html 


More information about the Soot-list mailing list