2015-10-20 1 views
1

J'essaie d'obtenir un graphique d'appel pour les fichiers apk. Je cours le code ci-dessous. mais ensuite quand je vérifie le fichier sootOutput, il est vide !! des idées? P.S: il imprime la taille du graphique et n'a pas d'erreur!graphique d'appel pour les fichiers apk. mais il ne génère pas de sortie

vous remercie à l'avance

import 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 call { 

    public call() { 
     // TODO Auto-generated constructor stub 
    } 

    public static void main(String[] args) { 

     // TODO Auto-generated method stub 

     SetupApplication app = new SetupApplication("D:\\Users\\ML\\AppData\\Local\\Android\\sdk\\platforms","D:/b.apk"); 
     try { 
      app.calculateSourcesSinksEntrypoints("C:\\Users\\ML\\workspace\\Graph\\1.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:/b.apk")); 
     Options.v().set_android_jars("D:\\Users\\ML\\AppData\\Local\\Android\\sdk\\platforms"); 
     Options.v().set_whole_program(true); 
     Options.v().set_allow_phantom_refs(true); 
     Options.v().set_output_format(Options.output_format_boutput_format_class); 
     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()); 
    } 

} 

Répondre

0

vous utilisez Suie d'une manière très non standard. En particulier, vous n'appelez jamais ces méthodes de Soot qui sont nécessaires pour écrire la sortie. Je recommande fortement d'appeler la méthode principale de Soot, soot.Main.main, et de simplement brancher un tas de Transformers.