<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.E-MailFormatvorlage17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=DE link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Hi Ben,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Why do you have the “rt.jar” file from the JDK on the Soot classpath? If you are analyzing Android, you need Android’s implementation of the basic Java classes, not the one from the JDK. If you explicitly set the Soot classpath, Soot will not apply its defaults. In your case, this means that the Android platform JAR file that contains the Log class will not be loaded. You can either manually put your Android platform JAR file on the Soot classpath or do not set the Soot classpath at all and rely on Soot’s defaults.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Best regards,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'> Steven<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>Von:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> soot-list-bounces@CS.McGill.CA [mailto:soot-list-bounces@CS.McGill.CA] <b>Im Auftrag von </b>Ben Westfield<br><b>Gesendet:</b> Freitag, 26. Juni 2015 19:22<br><b>An:</b> soot-list@CS.McGill.CA<br><b>Betreff:</b> [Soot-list] All android classes appearing as phantom<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><div><div><div><div><div><div><div><p class=MsoNormal style='margin-bottom:12.0pt'>Hi all<o:p></o:p></p></div><p class=MsoNormal style='margin-bottom:12.0pt'>I've recently started working with soot to instrument Android apps. I am trying to add Log.i statements after every method invokeStmt in the app but am having some issues. It looks like Soot cannot find any of the android classes, as I am getting warning messages saying that these are all phantom. As such, my code then breaks when trying to add the Log methods as soot cannot see inside the phantom class. I've tried both specifying the folder conatining all the android platforms (android-*) to android-jars and by forcing a specific jar. However neither of these have worked. Do you know what I am doing wrong?<o:p></o:p></p></div><p class=MsoNormal style='margin-bottom:12.0pt'>Thanks<o:p></o:p></p></div><p class=MsoNormal style='margin-bottom:12.0pt'>Ben<o:p></o:p></p></div><p class=MsoNormal style='margin-bottom:12.0pt'>Error:<br>java.lang.RuntimeException: No method d in class android.util.Log<br> at soot.SootClass.getMethod(SootClass.java:339)<br><br><o:p></o:p></p></div><p class=MsoNormal style='margin-bottom:12.0pt'>command prompt:<br>java -cp /home/Tools/soot-trunk.jar:.:/home/Tools/Soot/baksmali-2.0.6.jar:/home/Downloads/smali-2.0.6.jar andRetLog app-debug.apk<br><br><o:p></o:p></p></div><p class=MsoNormal>source code:<br><br><br>import java.util.Collections;<br>import java.util.Iterator;<br>import java.util.List;<br>import java.util.Map;<br><br> import soot.Body;<br>import soot.BodyTransformer;<br>import soot.G;<br>import soot.Local;<br>import soot.PackManager;<br>import soot.PatchingChain;<br>import soot.RefType;<br>import soot.Scene;<br>import soot.SootClass;<br>import soot.SootMethod;<br>import soot.Transform;<br>import soot.Unit;<br>import soot.Value;<br>import soot.jimple.InvokeExpr;<br>import soot.jimple.InvokeStmt;<br>import soot.jimple.Jimple;<br>import soot.jimple.ReturnStmt;<br>import soot.jimple.Stmt;<br>import soot.jimple.StringConstant;<br>import soot.options.Options;<br>import soot.util.Chain;<br><br> public class andRetLog {<br> <br> public static void main(String[] args) {<br> G.reset();<br> <br> //initialise the options set<br> //Options.v().set_android_jars("/home/android-sdk-linux/platforms/");<br> Options.v().set_force_android_jar("/home/android-sdk-linux/platforms/android-17/android.jar");<br> Options.v().set_soot_classpath(".:/usr/lib/jvm/java-7-oracle/jre/lib/rt.jar");<br> Options.v().set_process_dir(Collections.singletonList("/home/ben/AndroidStudioProjects/Bbutton/app/app-debug.apk"));<br> Options.v().set_allow_phantom_refs(true);<br> Options.v().set_output_dir("/home/AndroidStudioProjects/Bbutton/app/sootOutput/");<br> //prefer Android APK files// -src-prec apk<br> Options.v().set_src_prec(Options.src_prec_apk);<br> //Options.v().set_src_prec(Options.src_prec_jimple);<br> //output as APK, too//-f J<br> Options.v().set_output_format(Options.output_format_jimple);<br> //Options.v().set_output_format(Options.output_format_dex);<br> <br> // resolve the PrintStream and System soot-classes<br> //Scene.v().addBasicClass("java.io.PrintStream",SootClass.SIGNATURES);<br> //Scene.v().addBasicClass("java.lang.System",SootClass.SIGNATURES)<br> //imports logs and strings so that these are included <br> Scene.v().addBasicClass("android.util.Log",SootClass.SIGNATURES);<br> //Scene.v().addBasicClass("android.util.String",SootClass.SIGNATURES); <br> PackManager.v().getPack("jtp").add(new Transform("jtp.myInstrumenter", new BodyTransformer() {<br> @Override<br> protected void internalTransform(final Body b, String phaseName, @SuppressWarnings("rawtypes") Map options) {<br> final PatchingChain<Unit> units = b.getUnits();<br> SootMethod log = Scene.v().getSootClass("android.util.Log").getMethod("i");<br> <br> //important to use snapshotIterator here<br> <br> for(Iterator<Unit> iter = units.snapshotIterator(); iter.hasNext();) {<br> <br> Stmt s = (Stmt) iter.next();<br> <br> if(s instanceof InvokeStmt || s instanceof ReturnStmt){<br> //make new static invokement<br> InvokeExpr invokeExpr = Jimple.v().newStaticInvokeExpr(log.makeRef(), (StringConstant.v("qwerty12345")),StringConstant.v("-If you are reading this, it has worked"));<br> // turn it into an invoke statement<br> Stmt incStmt = Jimple.v().newInvokeStmt(invokeExpr);<br> //insert into chain<br> units.insertBefore(incStmt, s); <br> //.newAssignStmt(tmpRef, Jimple.v().newStaticFieldRef( <br> //Scene.v().getField("<java.lang.System: java.io.PrintStream out>").makeRef())), s);<br><br> //<br> }<br> <br> }<br> };<br><br> //end of internalTransform declaration<br> }));<br> <br> soot.Main.main(args);<br> }<br> }<br> <o:p></o:p></p></div></div></body></html>