Compile against, but don't include xposed + rework method hooks

This commit is contained in:
Ryan Welton
2014-07-24 19:47:28 -04:00
parent 6cbc40509a
commit b282268d45
4 changed files with 35 additions and 49 deletions

View File

@@ -1,11 +1,16 @@
package just.trust.me;
import org.apache.http.conn.ssl.SSLSocketFactory;
import javax.net.ssl.SSLSocketFactory;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.net.Socket;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
@@ -14,82 +19,63 @@ import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XC_MethodReplacement;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
import static de.robv.android.xposed.XposedHelpers.findMethodExact;
import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
public class Main implements IXposedHookLoadPackage {
abstract class XposedMethodReplacement extends XC_MethodReplacement
{
public XposedMethodReplacement(){}
Method replacedMethod;
public void setReplacedMethod(Method m){
replacedMethod = m;
}
}
public static XC_MethodHook.Unhook findAndHookMethod(String clazz, java.lang.ClassLoader classLoader, String methodName, XposedMethodReplacement xmp) {
Method m = findMethodExact(clazz, classLoader, methodName);
xmp.setReplacedMethod(m);
return XposedBridge.hookMethod(m, xmp);
}
public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {
findAndHookMethod("javax.net.ssl.TrustManagerFactory", lpparam.classLoader, "getTrustManagers", new XposedMethodReplacement() {
findAndHookMethod("javax.net.ssl.TrustManagerFactory", lpparam.classLoader, "getTrustManagers", new XC_MethodReplacement() {
@Override
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
return new TrustManager[]{new ImSureItsLegitTrustManager()};
}
});
findAndHookMethod("javax.net.ssl.HttpsURLConnection", lpparam.classLoader, "setSSLSocketFactory", new XposedMethodReplacement() {
findAndHookMethod("javax.net.ssl.SSLContext", lpparam.classLoader, "init", new XC_MethodHook() {
@Override
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, new TrustManager[]{new ImSureItsLegitTrustManager()}, null);
this.replacedMethod.invoke(param.thisObject, context.getSocketFactory());
return null;
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
param.args[0] = null;
param.args[1] = new TrustManager[]{new ImSureItsLegitTrustManager()};
param.args[2] = null;
}
});
findAndHookMethod("javax.net.ssl.SSLContext", lpparam.classLoader, "init", new XposedMethodReplacement() {
findAndHookMethod("javax.net.ssl.HttpsURLConnection", lpparam.classLoader, "setSSLSocketFactory", new XC_MethodHook() {
@Override
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, new TrustManager[]{new ImSureItsLegitTrustManager()}, null);
this.replacedMethod.invoke(param.thisObject, null, new TrustManager[]{new ImSureItsLegitTrustManager()}, null);
return null;
context.init(null, new TrustManager[]{new ImSureItsLegitTrustManager()}, null);
param.args[0] = context.getSocketFactory();
}
});
findAndHookMethod("org.apache.http.conn.ssl.SSLSocketFactory", lpparam.classLoader, "isSecure", new XposedMethodReplacement() {
findAndHookMethod("org.apache.http.conn.ssl.SSLSocketFactory", lpparam.classLoader, "isSecure", new XC_MethodReplacement() {
@Override
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
return true;
}
});
findAndHookMethod("javax.net.ssl.HttpsURLConnection", lpparam.classLoader, "setHostnameVerifier", new XposedMethodReplacement() {
findAndHookMethod("javax.net.ssl.HttpsURLConnection", lpparam.classLoader, "setHostnameVerifier", new XC_MethodHook() {
@Override
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
this.replacedMethod.invoke(param.thisObject, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
return null;
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
param.args[0] = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
}
});
findAndHookMethod("javax.net.ssl.HttpsURLConnection", lpparam.classLoader, "setDefaultHostnameVerifier", new XposedMethodReplacement() {
findAndHookMethod("javax.net.ssl.HttpsURLConnection", lpparam.classLoader, "setDefaultHostnameVerifier", new XC_MethodHook() {
@Override
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
this.replacedMethod.invoke(param.thisObject, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
return null;
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
param.args[0] = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
}
});
}