[Soot-list] How to automaticly instrument the results of FlowDroid with the same Soot scene?
Jin Li
lijin1988 at gmail.com
Wed Oct 22 09:57:56 EDT 2014
Hi Steven,
>From your previous email, you mentioned that I can pass an object
implementing the IInfoflowConfig to the setSootConfig method in
SetupApplication class for the purpose of setting instrumentation
configuration.
My question is what is the time that I setSootConfig for instrumentation?
Is it before the runInfoflow()? or after the results are presented in
the onResultsAvailable()
?
Best regards,
Jin
2014-10-22 15:39 GMT+08:00 Jin Li <lijin1988 at gmail.com>:
> Hi Steven,
>
> Follow your instructions, I tried as follows:
>
> First. I implemented IInfoflowConfig interface and put the instrumentation
> options in the setSootOptions() method.
>
> public class SetConfigForInstrument implements IInfoflowConfig {
> @Override
> public void setSootOptions(Options arg0) {
>
> Options.v().set_src_prec(Options.src_prec_apk);
>
> //output as APK, too//-f J
> Options.v().set_output_format(Options.output_format_dex);
> Options.v().set_output_dir("D:\\Android\\sootOutput");
>
> Options.v().set_process_dir(Collections.singletonList("D:\\Android\\TestApk\\Benign\\Callbacks_LocationLeak3.apk"));
> Options.v().set_allow_phantom_refs(true);
> Options.v().set_whole_program(true);
>
> Options.v().set_soot_classpath(".;D:\\Android\\adt-bundle-windows-x86_64-20131030\\sdk\\platforms\\android-19\\android.jar");
>
> Options.v().set_android_jars("D:\\Android\\adt-bundle-windows-x86_64-20131030\\sdk\\platforms");
>
>
>
> Scene.v().addBasicClass("java.io.PrintStream",SootClass.SIGNATURES);
> Scene.v().addBasicClass("java.lang.System",SootClass.SIGNATURES);
> Scene.v().addBasicClass("InstrumentHelper",SootClass.SIGNATURES);
> Scene.v().addBasicClass("InstrumentHelper$1",SootClass.SIGNATURES);
> Scene.v().loadNecessaryClasses();
>
> }
>
> }
>
> Second, I implemented ResultsAvailableHandler interface and override the
> onResultsAvailable method
>
> public void onResultsAvailable(IInfoflowCFG cfg, InfoflowResults results)
> {
> // Dump the results
> if (results == null) {
> print("No results found.");
> System.exit(0);
> }
> else {
> SetupApplication setapp = new
> SetupApplication(G_androidJar, G_filename);
> setapp.setSootConfig(new SetConfigForInstrument());
> System.out.println("After setupapplication!");
> PackManager.v().getPack("jtp").add(new
> Transform("jtp.myInstrumenter", new TaintFlowInstrument()));
> PackManager.v().runPacks();
> PackManager.v().writeOutput();
> }
> }
>
> And in this method I use setSootConfig to set the instrumentation
> configurations and then do the transformations.
>
> However, exceptions still appears.
> Exception in thread "main" java.lang.RuntimeException: No method void
> setContext(android.content.Context) in class InstrumentHelper
>
> It seems that soot still can't find my instrumentation classes and methods.
>
> What am I doing wrong?
>
> Best regards,
> Jin
>
>
>
>
>
>
> 2014-10-21 17:14 GMT+08:00 Steven Arzt <Steven.Arzt at cased.de>:
>
>> Hi Jin,
>>
>>
>>
>> In such a case, you need to directly start FlowDroid with the correct
>> options for instrumentation. The Infoflow and SetupApplication classes
>> support a method called setSootConfig which accepts an object of type
>> IInfoflowConfig. In the callback method contained this interface, you can
>> overwrite the Soot options you need. This way, you can have FlowDroid use
>> Soot with the correct output format, output directory, etc.
>>
>>
>>
>> Pass an object implementing the ResultsAvailableHandler interface to
>> runInfoflow(). The callback method in this interface will be called once
>> FlowDroid is done, but Soot is still running. This is the optimal position
>> to do your instrumentation work.
>>
>>
>>
>> Best regards,
>>
>> Steven
>>
>>
>>
>> *Von:* Jin Li [mailto:lijin1988 at gmail.com]
>> *Gesendet:* Dienstag, 21. Oktober 2014 10:20
>> *An:* soot-list at CS.McGill.CA; Steven Arzt
>> *Betreff:* How to automaticly instrument the results of FlowDroid with
>> the same Soot scene?
>>
>>
>>
>> Hi All,
>>
>> I want to instrument the resutls of FlowDroid as soon as the results
>> being available.
>>
>> I use runAnalysis(fileName, androidJar) to get the InfoFlowResults.
>>
>> After that, I reset the soot and set options for instrumenting. But I
>> can't find the stmt resutls that I reserved from FlowDroid.
>>
>> some code snippets:
>>
>> public class TaintFlowInstrumentDriver {
>>
>> public static InfoflowResults infoflowResults;
>>
>> /**
>> * @param args[0] = path to apk-file
>> * @param args[1] = path to android-dir (path/android-platforms)
>> * @throws InterruptedException
>> * @throws IOException
>> */
>> public static void main(String[] args) throws IOException,
>> InterruptedException {
>>
>> //insert some code for getting flowdroid results which represents
>> the taintgraph
>> if(args.length < 2){
>> printUsage();
>> return;
>> }
>> String filePath = args[0];
>> String androidJarPath = args[1];
>> infoflowResults = runAnalysis(filePath, androidJarPath);
>>
>> soot.G.reset();
>> //prefer Android APK files// -src-prec apk
>> Options.v().set_src_prec(
>>
>> Options.src_prec_apk);
>>
>> //output as APK, too//-f J
>> Options.v().set_output_format(Options.output_format_dex);
>> Options.v().set_output_dir("D:\\Android\\sootOutput");
>>
>> Options.v().set_process_dir(Collections.singletonList("D:\\Android\\TestApk\\Benign\\Callbacks_LocationLeak3.apk"));
>> Options.v().set_allow_phantom_refs(true);
>> Options.v().set_whole_program(true);
>>
>> Options.v().set_soot_classpath(".;D:\\Android\\adt-bundle-windows-x86_64-20131030\\sdk\\platforms\\android-19\\android.jar");
>>
>> Options.v().set_android_jars("D:\\Android\\adt-bundle-windows-x86_64-20131030\\sdk\\platforms");
>>
>>
>>
>> Scene.v().addBasicClass("java.io.PrintStream",SootClass.SIGNATURES);
>> Scene.v().addBasicClass("java.lang.System",SootClass.SIGNATURES);
>> Scene.v().addBasicClass("InstrumentHelper",SootClass.SIGNATURES);
>>
>> Scene.v().loadNecessaryClasses();
>> PackManager.v().getPack("jtp").add(new
>> Transform("jtp.myInstrumenter", new TaintFlowInstrument()));
>> PackManager.v().runPacks();
>> PackManager.v().writeOutput();
>> }
>>
>>
>>
>> If I use soot.G.reset(), I can't find the Soot stmt objects produced by
>> FlowDroid in my bodytransformer.
>>
>> If I don't use soot.G.reset(), I can't set the instrumenting options.
>>
>> How can I correctly instrument the retults of the FlowDroid?
>>
>> Best regards,
>>
>> Jin
>>
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20141022/e5b3b2bc/attachment.html
More information about the Soot-list
mailing list