[Soot-list] Instrumenting Android apps using a helper class
Steven Arzt
Steven.Arzt at cased.de
Fri Oct 17 09:19:02 EDT 2014
Hi Aniya,
If you want to load a basic class, you must register it before you call “loadNecessaryClasses”:
Scene.v().addBasicClass("HelloWorld"); //Adding helper class into scene
Scene.v().loadNecessaryClasses();
Additionally, are you sure that the “Hello World” class is not contained in any package, so “HelloWorld” is really the correct fully-qualified class name? You can check by evaluating SootClass.isPhantom(). If this method returns “true”, you class could not be found and has been replaced by a phantom.
Best regards,
Steven
Von: Aniya Aggarwal [mailto:aniya1234 at iiitd.ac.in]
Gesendet: Freitag, 17. Oktober 2014 14:49
An: soot-list at cs.mcgill.ca; soot-list at sable.mcgill.ca
Cc: steven.arzt at ec-spride.de
Betreff: Re: Instrumenting Android apps using a helper class
Hi All,
Sorry to bug you again. In the previous mail, I found that the code lost all its formatting which makes it difficult to read.
I am trying to instrument an Android application (ie apk) using a Helper Class named "HelloWorld.java". I am using FlowDroid to generate a call graph for the app and then after performing some analysis, trying to instrument the app using "HelloWorld". Since while using FlowDroid, PackManager.v().runPacks() is executed instead of Soot.Main.main(args), therefore I have called Scene.v().addBasicClass("HelloWorld") before PackManager.v().runPacks(). However, when I try to access the methods defined in "HelloWorld" class during instrumentation phase using Scene.v().getSootClass("HelloWorld").getMethods(), it returns an empty list. Please note that HelloWorld.java has two methods defined in it.
I am sharing the code snippet for the main() of my Driver Class for your reference.
Please let me know in case I am trying to access the helper class incorrectly using FlowDroid and suggest an alternative.
//Main Method of Driver Class
public static void main(String[] args) {
SetupApplication app = new SetupApplication("C:\\Program Files (x86)\\Android\\android-sdk\\platforms <file:///\\Android\android-sdk\platforms%22,%22C:\Users\Ani\Desktop\new> ","C:\\Users\\Ani\\Desktop\\new try\\ToyExample.apk");
try {
app.calculateSourcesSinksEntrypoints("E:\\Program Analysis Workspace\\Flowdroid_Test\\SourcesAndSinks.txt");
}
catch (IOException e) {
e.printStackTrace();
}
catch (XmlPullParserException e) {
e.printStackTrace();
}
soot.G.reset();
Options.v().set_src_prec(Options.src_prec_apk);
Options.v().set_process_dir(Collections.singletonList("C:\\Users\\Ani\\Desktop\\new try\\ToyExample.apk"));
Options.v().set_android_jars("C:\\Program Files (x86)\\Android\\android-sdk\\platforms <file:///\\Android\android-sdk\platforms> ");
Options.v().set_whole_program(true);
Options.v().set_allow_phantom_refs(true);
Options.v().set_output_dir("E:\\Program Analysis Workspace\\Flowdroid_Test\\sootOutput\\");
Options.v().set_output_format(Options.output_format_jimple);
Options.v().setPhaseOption("cg.spark", "on");
Options.v().set_whole_program(true);
Scene.v().loadNecessaryClasses();
Scene.v().addBasicClass("HelloWorld"); //Adding helper class into scene
SootMethod entryPoint = app.getEntryPointCreator().createDummyMain();
Options.v().set_main_class(entryPoint.getSignature());
Scene.v().setEntryPoints(Collections.singletonList(entryPoint));
PackManager.v().runPacks();
CallGraph cg = Scene.v().getCallGraph();
Map options = new HashMap();
PurityOptions opt = new PurityOptions(options);
EscapeInterProc p = new EscapeInterProc(cg, Scene.v().getEntryPoints().iterator(), opt); //Executing analysis
map = p.loop_reset;
for(SootMethod method : map.keySet()){
AndroidAnalysis a = new AndroidAnalysis(Scene.v().getMethod(method.getSignature())); //Calling instrumentation module
}
PackManager.v().writeOutput();
}
Thanks and Regards
Aniya
Thanks & Regards,
Aniya Aggarwal
MT-12034
M.Tech CSE (Data Engineering)
On Fri, Oct 17, 2014 at 5:46 PM, Aniya Aggarwal <aniya1234 at iiitd.ac.in> wrote:
Hi All,
I am trying to instrument an Android application (ie apk) using a Helper Class named "HelloWorld.java". I am using FlowDroid to generate a call graph for the app and then after performing some analysis, trying to instrument the app using "HelloWorld". Since while using FlowDroid, PackManager.v().runPacks() is executed instead of Soot.Main.main(args), therefore I have called Scene.v().addBasicClass("HelloWorld") before PackManager.v().runPacks(). However, when I try to access the methods defined in "HelloWorld" class during instrumentation phase using Scene.v().getSootClass("HelloWorld").getMethods(), it returns an empty list. Please note that HelloWorld.java has two methods defined in it.
I am sharing the code snippet for the main() of my Driver Class for your reference.
Please let me know in case I am trying to access the helper class incorrectly using FlowDroid and suggest an alternative.
//Main method of Driver Class
public static void main(String[] args) { SetupApplication app = new SetupApplication("C:\\Program Files (x86)\\Android\\android-sdk\\platforms <file:///\\Android\android-sdk\platforms%22,%22C:\Users\Ani\Desktop\new> ","C:\\Users\\Ani\\Desktop\\new try\\ToyExample.apk"); try { app.calculateSourcesSinksEntrypoints("E:\\Program Analysis Workspace\\Flowdroid_Test\\SourcesAndSinks.txt"); } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } soot.G.reset(); Options.v().set_src_prec(Options.src_prec_apk); Options.v().set_process_dir(Collections.singletonList("C:\\Users\\Ani\\Desktop\\new try\\ToyExample.apk"));
Options.v().set_android_jars("C:\\Program Files (x86)\\Android\\android-sdk\\platforms <file:///\\Android\android-sdk\platforms> "); Options.v().set_whole_program(true); Options.v().set_allow_phantom_refs(true); Options.v().set_output_dir("E:\\Program Analysis Workspace\\Flowdroid_Test\\sootOutput\\"); Options.v().set_output_format(Options.output_format_jimple); Options.v().setPhaseOption("cg.spark", "on"); Options.v().set_whole_program(true);
Scene.v().addBasicClass("HelloWorld"); //Adding helper class into scene 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(); CallGraph cg = Scene.v().getCallGraph(); Map options = new HashMap(); PurityOptions opt = new PurityOptions(options); EscapeInterProc p = new EscapeInterProc(cg, Scene.v().getEntryPoints().iterator(), opt); //Executing the analysis map = p.loop_reset; for(SootMethod method : map.keySet()){ AndroidInstrumentation a = new AndroidInstrumentation(Scene.v().getMethod(method.getSignature())); //Executing bytecode instrumentation module } PackManager.v().writeOutput(); }
Thanks & Regards,
Aniya Aggarwal
MT-12034
M.Tech CSE (Data Engineering)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20141017/2f4e1905/attachment-0003.html
More information about the Soot-list
mailing list