[Soot-list] Fwd: AW: Inserting Log.i() in jimple..

Modhi Alsobiehy m99m20 at hotmail.com
Mon Sep 8 22:07:30 EDT 2014


Hi all,

I sent this email earlier last week but it did not go through because of the size! I reduced the size and hopefully it will go through this time!

Your quick response is highly appreciated!

Thank you!

> From: Modhi Alsobiehy <m99m20 at hotmail.com>
> Date: September 3, 2014 at 2:36:57 PM CDT
> To: Steven Arzt <Steven.Arzt at cased.de>, "soot-list at CS.McGill.CA" <soot-list at CS.McGill.CA>, "soot-list at sable.mcgill.ca" <soot-list at sable.mcgill.ca>
> 
> Subject: Re: AW: [Soot-list] Inserting Log.i() in jimple..
> 
> Hi Steven,
> 
> The following is the full source code, I attached the files involved as well..
> Thank you,,
> 
> Modhi,,


> 
> Full Code:
> ------------------
> import java.io.BufferedReader;
> import java.io.BufferedWriter;
> import java.io.FileNotFoundException;
> import java.io.FileReader;
> import java.io.FileWriter;
> import java.io.IOException;
> import java.util.ArrayList;
> import java.util.Arrays;
> import java.util.Collections;
> import java.util.Iterator;
> import java.util.List;
> import java.util.Map;
> 
> import android.provider.Settings;
> import soot.Body;
> import soot.G;
> import soot.Local;
> import soot.PackManager;
> import soot.PatchingChain;
> import soot.RefType;
> import soot.Scene;
> import soot.SootClass;
> import soot.SootMethod;
> import soot.Transform;
> import soot.Unit;
> import soot.Value;
> import soot.jimple.AbstractStmtSwitch;
> import soot.jimple.InvokeStmt;
> import soot.jimple.Jimple;
> import soot.jimple.StringConstant;
> import soot.options.Options;
> import soot.util.Chain;
> 
> 
> 
> public class AndroidInstrument {
>  static String output="";
>  static ArrayList<String> logLines = new ArrayList<String>();
>  
>   public static void main(String[] args) {
>   
>    try {
>     logLines = infoflowResults();
>    } catch (IOException e1) {
>     // TODO Auto-generated catch block
>     e1.printStackTrace();
>    }
>    
>    soot.G.reset(); 
>    
>    final String androidJar = "D:/AndroidADT/adt-bundle-windows-x86_64-20131030/sdk/platforms/";
>   
>    List<String> argsList = new ArrayList<String>(Arrays.asList(args)); 
>    
>    //Scene.v().loadClassAndSupport("android.util.Log");
>   
>    Scene.v().addBasicClass("android.util.Log",SootClass.SIGNATURES);
>    
>          Scene.v().addBasicClass("java.lang.System",SootClass.SIGNATURES);
>          
>          
>          PackManager.v().getPack("jtp").add(new Transform("jtp.myInstrumenter", new MyBodyTransformer()
>          {
>    @Override
>    protected void internalTransform(final Body b, String phaseName, Map options) 
>    {
>     final PatchingChain<Unit> units = b.getUnits();
>     
>     //important to use snapshotIterator here
>      
>     for(Iterator<Unit> iter = units.snapshotIterator(); iter.hasNext();) 
>     {
>       final Unit u = iter.next();
>       
>       u.apply(new AbstractStmtSwitch() 
>       {
>        
>        public void caseInvokeStmt(InvokeStmt stmt) 
>        {
>         
>         if(logLines.contains(stmt.toString()))
>         { 
>          Local tmpRef = addTmpRef(b);
>          System.out.println("tmpRef"+tmpRef.toString());
>          Local tmpString1 = addTmpString1(b);
>          Local tmpString2 = addTmpString2(b);
>          System.out.println("tmpString1"+tmpString1.toString());
>          System.out.println("tmpString2"+tmpString2.toString());
>          
>            // insert "tmpRef = android.util.Log.i;" 
>                units.insertAfter(Jimple.v().newAssignStmt( 
>                              tmpRef, Jimple.v().newStaticFieldRef( 
>                              Scene.v().getField("<android.util.Log: int i>").makeRef())), u);
> 
>                // insert "tmpString = 'stmt.getUseBoxes().toString()';" 
>                String stmtStr = stmt.getUseBoxes().toString();
>                units.insertAfter(Jimple.v().newAssignStmt(tmpString1,
>                              StringConstant.v(stmtStr)), u);
>                stmtStr = stmt.getUseBoxes().get(1).getValue().toString();
>                units.insertAfter(Jimple.v().newAssignStmt(tmpString2,
>                             StringConstant.v(stmtStr)), u);
>                
>                // insert "tmpRef.i(tmpString);" 
>                SootMethod toCall = Scene.v().getSootClass("android.util.Log").getMethod("int i(java.lang.String,java.lang.String");                    
>                units.insertAfter(Jimple.v().newInvokeStmt(
>                              Jimple.v().newVirtualInvokeExpr(tmpRef, toCall.makeRef(), tmpString1, tmpString2 )), u);
>                
>                //check that we did not mess up the Jimple
>                b.validate();
>          
>          }
>         
>        }//caseInvokeStmt
>          
>       } // anbstractStmtSwitch
>       );// apply
>      } // for iterator
>     }// internalTransformer closed
> 
>   }));
>   
>         
>   argsList.addAll(Arrays.asList(new String[] {
>     "-cp" , androidJar    
>     }));
>     
>   String apk = "D:/simpleCal.apk";
>   
>   Options.v().set_src_prec(Options.src_prec_apk);
>   
>   Options.v().set_process_dir(Collections.singletonList(apk));
>   
>   Options.v().set_android_jars(androidJar);
>   
>   Options.v().set_whole_program(true);
>   
>   Options.v().set_allow_phantom_refs(true);
>   
>   Options.v().set_output_format(Options.output_format_none);
>   
>   Options.v().force_android_jar();
>   
>   args = argsList.toArray(new String[0]);
>   
>   soot.Main.main(args);
>   
>   // to check output of soot
>   
>  }
> 
>    // ===============================================================
>   static Local addTmpRef(Body body)
>    {
>    Local tmpRef = Jimple.v().newLocal("tmpRef", RefType.v("android.util.Log"));
>    body.getLocals().add(tmpRef);
>    return tmpRef;
>    }
>    //--------------------------------------------------   
>    static Local addTmpString1(Body body)
>    {
>     Local tmpString = Jimple.v().newLocal("tmpString1", RefType.v("java.lang.String"));
>     body.getLocals().add(tmpString);
>     return tmpString;
>    }
>   //--------------------------------------------------  
>   static Local addTmpString2(Body body)
>    {
>     Local tmpString = Jimple.v().newLocal("tmpString2", RefType.v("java.lang.String"));
>     body.getLocals().add(tmpString);
>     return tmpString;
>    }
>   //--------------------------------------------------  
>   static ArrayList<String> infoflowResults() throws IOException
>   {
>    ArrayList<String> logLine = new ArrayList<String>();
>    FileReader fr = new FileReader("D:/FlowDroid/FlowDroidResults.txt");
>    BufferedReader txtReader = new BufferedReader(fr);
>     
>    String line = txtReader.readLine();
>    while(!(line== null))
>    {
>     if(line.matches("\\s*Found a flow to sink .*, from the following sources:.*"))
>     {
>      line = line.replaceFirst(".*Found\\sa\\sflow\\sto\\ssink\\s", "");
>      line = line.replaceFirst("(on line\\s\\d+)*\\, from the following sources:", "");
>      logLine.add(line);
>      
>     }// end if
>     line=txtReader.readLine();
>    }// end while
>    fr.close();
>    return logLine;
>    
>   }
> }
> 
> 
> Sent from Windows Mail
> 
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20140908/a7ead6f9/attachment-0002.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: simpleCal.apk
Type: application/octet-stream
Size: 287781 bytes
Desc: not available
Url : http://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20140908/a7ead6f9/attachment-0001.obj 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20140908/a7ead6f9/attachment-0003.html 


More information about the Soot-list mailing list