Add TrustMeAlready
This commit is contained in:
parent
68e39ccbfa
commit
3aa837b62a
@ -85,6 +85,7 @@ class MainHook : IXposedHookLoadPackage, IXposedHookZygoteInit {
|
||||
override fun initZygote(startupParam: IXposedHookZygoteInit.StartupParam) {
|
||||
modulePath = startupParam.modulePath
|
||||
moduleRes = XModuleResources.createInstance(modulePath, null)
|
||||
TrustMeAlready().initZygote(startupParam)
|
||||
}
|
||||
|
||||
@SuppressLint("WrongConstant", "ClickableViewAccessibility")
|
||||
|
77
app/src/main/java/xfk233/GenshinProxy/TrustMeAlready.java
Normal file
77
app/src/main/java/xfk233/GenshinProxy/TrustMeAlready.java
Normal file
@ -0,0 +1,77 @@
|
||||
package xfk233.GenshinProxy;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.ParameterizedType;
|
||||
import java.lang.reflect.Type;
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import de.robv.android.xposed.IXposedHookZygoteInit;
|
||||
import de.robv.android.xposed.XC_MethodReplacement;
|
||||
import de.robv.android.xposed.XposedBridge;
|
||||
|
||||
import static de.robv.android.xposed.XposedHelpers.*;
|
||||
|
||||
public class TrustMeAlready implements IXposedHookZygoteInit {
|
||||
|
||||
private static final String SSL_CLASS_NAME = "com.android.org.conscrypt.TrustManagerImpl";
|
||||
private static final String SSL_METHOD_NAME = "checkTrustedRecursive";
|
||||
private static final Class<?> SSL_RETURN_TYPE = List.class;
|
||||
private static final Class<?> SSL_RETURN_PARAM_TYPE = X509Certificate.class;
|
||||
|
||||
@Override
|
||||
public void initZygote(StartupParam startupParam) throws Throwable {
|
||||
XposedBridge.log("TrustMeAlready loading...");
|
||||
int hookedMethods = 0;
|
||||
|
||||
for (Method method : findClass(SSL_CLASS_NAME, null).getDeclaredMethods()) {
|
||||
if (!checkSSLMethod(method)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
List<Object> params = new ArrayList<>();
|
||||
params.addAll(Arrays.asList(method.getParameterTypes()));
|
||||
params.add(new XC_MethodReplacement() {
|
||||
@Override
|
||||
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
|
||||
return new ArrayList<X509Certificate>();
|
||||
}
|
||||
});
|
||||
|
||||
XposedBridge.log("Hooking method:");
|
||||
XposedBridge.log(method.toString());
|
||||
findAndHookMethod(SSL_CLASS_NAME, null, SSL_METHOD_NAME, params.toArray());
|
||||
hookedMethods++;
|
||||
}
|
||||
|
||||
XposedBridge.log(String.format(Locale.ENGLISH, "TrustMeAlready loaded! Hooked %d methods", hookedMethods));
|
||||
}
|
||||
|
||||
private boolean checkSSLMethod(Method method) {
|
||||
if (!method.getName().equals(SSL_METHOD_NAME)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// check return type
|
||||
if (!SSL_RETURN_TYPE.isAssignableFrom(method.getReturnType())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// check if parameterized return type
|
||||
Type returnType = method.getGenericReturnType();
|
||||
if (!(returnType instanceof ParameterizedType)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// check parameter type
|
||||
Type[] args = ((ParameterizedType) returnType).getActualTypeArguments();
|
||||
if (args.length != 1 || !(args[0].equals(SSL_RETURN_PARAM_TYPE))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user