<div style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial"><div>Hi, steven</div><div>     Today, I have tried again. Now I want to explain my purpose for you.</div><div>      My main purpose is to extract the URL runtime values for a certain network connection.</div><div>      For example, here is network connection:    <span style="color: rgb(0, 0, 255);"> InputStreamReader in = new InputStreamReader(HttpURLConnection.getInputStream());   If I want to need to extract the runtime URL, I need to insert the statement:   <font color="#000000">URLConnection connection=HttpURLConnection;  String </font></span><font color="#000000"><span style="color: rgb(0, 0, 255);">url </span></font><span style="color: rgb(0, 0, 255);"><font color="#000000">= connection.getURL().toString(); Then use Log to dump the </font></span><font color="#000000"><span style="color: rgb(0, 0, 255);">url..</span></font></div><div><font color="#000000"><span style="color: rgb(0, 0, 255);"> </span></font>     </div><div>       Next, I will show you my code:</div><div>       Soot settings is as follows:</div><div>       <font color="#ff0000"> Options.v().set_no_bodies_for_excluded(true);<br>  Options.v().set_allow_phantom_refs(true);<br>  Options.v().set_whole_program(true);<br>  Options.v().set_prepend_classpath(true);<br>  Options.v().set_validate(true);<br>  Options.v().set_output_format(Options.output_format_dex);<br>  Options.v().set_output_dir(outputfolder);<br>  Options.v().set_process_dir(Collections.singletonList(inputapk+File.separator+filename));<br>  Options.v().set_android_jars(androidjar);<br>  Options.v().set_src_prec(Options.src_prec_apk);<br>    String class_path=Scene.v().getAndroidJarPath(androidjar, inputapk+File.separator+filename);<br>  Options.v().set_soot_classpath(class_path);<br>    Main.v().autoSetOptions();<br>    Scene.v().loadClassAndSupport("java.net.URI");<br>  Scene.v().loadClassAndSupport("java.net.HttpURLConnection");<br>  Scene.v().loadNecessaryClasses();<br>  Scene.v().loadBasicClasses();</font></div><div><font color="rgb(255,0,0)"><br></font></div><div><font color="rgb(255,0,0)">  </font><span style="color: rgb(0, 0, 255);"><font color="#000000">  My instrument code is as follows:</font></span></div><div><span style="color: rgb(0, 0, 255);"><font color="rgb(0,0,0)">    List<Unit> beforegenerated = new ArrayList<Unit>();</font></span></div><div><font color="rgb(255,0,0)">    <font color="#000000">SootMethod sm1 = Scene.v().getMethod("<java.net.HttpURLConnection: java.net.URL getURL()>");<br>    SootMethod sm2 = Scene.v().getMethod("<java.net.URL: java.lang.String toString()>");</font></font></div><div>     Local connection = generateNewLocal(body,RefType.v("java.net.HttpURLConnection"));<br>    Local URL=generateNewLocal(body,RefType.v("java.net.URL"));<br>    Local str=generateNewLocal(body,RefType.v("java.lang.String"));</div><div>    // u is the insert point : <span style="color: rgb(0, 0, 255);"> InputStreamReader in = new InputStreamReader(HttpURLConnection.getInputStream());   </span></div><div>    for(ValueBox v:u.getUseBoxes())<br>    {<br>     if(v.getValue().getType().toString().equals("java.net.HttpURLConnection"))<br>     {<br>      AssignStmt assign=Jimple.v().newAssignStmt(connection, v.getValue());<br>      beforegenerated.add(assign);<br>      VirtualInvokeExpr invokeExpr = Jimple.v().newVirtualInvokeExpr(connection,sm1.makeRef()); <br>      AssignStmt assign1 = Jimple.v().newAssignStmt(URL, invokeExpr);<br>      beforegenerated.add(assign1);<br>      VirtualInvokeExpr invokeExpr1 = Jimple.v().newVirtualInvokeExpr(URL,sm2.makeRef());<br>      AssignStmt assign2 = Jimple.v().newAssignStmt(str, invokeExpr1);<br>      beforegenerated.add(assign2);<br>      StaticInvokeExpr invokeExpr2 = Jimple.v().newStaticInvokeExpr(sm.makeRef(), logType, str);<br>      Unit invoke1 = Jimple.v().newInvokeStmt(invokeExpr2);<br>      beforegenerated.add(invoke1);<br>     }<br>    }</div><div>      body.getUnits().insertBefore(beforegenerated, u);</div><div><br></div><div>      Now I can instrument an app successfully, however the instrumented app cannot run on the real device (always stopped). My current question is :</div><div>      Do you think this code is right? Why the instrumented cannot run normally? How to solve this?</div><div>      Thanks a lot.</div></div><br><br><span title="neteasefooter"><p> </p></span>