package com.example.testhook;
import android.os.Build;
import android.util.Log;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
import static de.robv.android.xposed.XposedHelpers.findClass;
import static de.robv.android.xposed.XposedBridge.hookAllConstructors;
import static de.robv.android.xposed.XposedHelpers.getObjectField;
public class httpHook {
public static void initHooking(XC_LoadPackage.LoadPackageParam lpparam) throws NoSuchMethodException {
final Class <?> httpUrlConnection = findClass("java.net.HttpURLConnection",lpparam.classLoader);
hookAllConstructors(httpUrlConnection, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) {
if (param.args.length != 1 || param.args[0].getClass() != URL.class)
return;
XposedBridge.log("HttpURLConnection: " + param.args[0] + "");
Log.d("httpHook : ","HttpURLConnection: " + param.args[0] + "");
}
});
XC_MethodHook RequestHook = new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable{
HttpURLConnection urlConn = (HttpURLConnection)param.thisObject;
if(urlConn!=null)
{
StringBuilder sb = new StringBuilder();
boolean isconnected = (boolean) getObjectField(param.thisObject,"connected");
if(!isconnected)
{
Map<String,List<String>> properties = urlConn.getRequestProperties();
if(properties!=null && properties.size()>0)
{
for(Map.Entry<String,List<String>> entry : properties.entrySet())
{
sb.append(entry.getKey()+":"+entry.getValue()+"\n");
}
}
Log.d("httpHook","HTTPrequest "+ "REQUEST: \nmethod="+urlConn.getRequestMethod()+" \nURL="+urlConn.getURL().toString()
+"\nHeader : "+ sb.toString()
);
}
}
}
};
XC_MethodHook ResponseHook = new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
HttpURLConnection urlconn = (HttpURLConnection) param.thisObject;
int code=urlconn.getResponseCode();
if(code == 200){
Map<String, List<String>> properties = urlconn.getHeaderFields();
StringBuilder sb = new StringBuilder();
if(properties!=null && properties.size()>0){
for(Map.Entry<String,List<String>> entry:properties.entrySet())
{
sb.append(entry.getKey()+":"+entry.getValue()+"\n");
}
Log.d("httpHook","RESPONSE: method :"+urlconn.getRequestMethod()+"\nURL:"+urlconn.getURL().toString()+"\nheader: "+ sb.toString() );
}
}
}
};
findAndHookMethod("java.io.OutputStream", lpparam.classLoader, "write", byte[].class,int.class,int.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
OutputStream os = (OutputStream)param.thisObject;
if(!os.toString().contains("internal.http"))
return;
String print = new String((byte[]) param.args[0]);
Log.d("httpHookDATA",print);
Pattern pt = Pattern.compile("(\\w+=.*)");
Matcher match = pt.matcher(print);
if(match.matches())
{
Log.d("httpHook : ","POST DATA: "+print);
}
}
});
findAndHookMethod("java.io.OutputStream", lpparam.classLoader, "write", byte[].class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
OutputStream os = (OutputStream)param.thisObject;
if(!os.toString().contains("internal.http"))
return;
String print = new String((byte[]) param.args[0]);
Log.d("httpHook : ","DATA: "+print);
Pattern pt = Pattern.compile("(\\w+=.*)");
Matcher match = pt.matcher(print);
if(match.matches())
{
Log.d("httpHook : ","POST DATA: "+print);
}
}
});
try {
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
findAndHookMethod("libcore.net.http.HttpURLConnectionImpl", lpparam.classLoader, "getOutputStream", RequestHook);
} else {
findAndHookMethod("com.android.okhttp.internal.http.HttpURLConnectionImpl", lpparam.classLoader, "getOutputStream", RequestHook);
findAndHookMethod("com.android.okhttp.internal.http.HttpURLConnectionImpl", lpparam.classLoader, "getInputStream", ResponseHook);
}
} catch (Error e){
}
}
}
android http hook
Guess you like
Origin blog.51cto.com/haidragon/2405169
Recommended
Ranking