Skip to content

Commit 9623835

Browse files
author
Konrad Kollnig
committed
Handle various errors on Android 7 and 11
1 parent 152557d commit 9623835

File tree

1 file changed

+61
-44
lines changed

1 file changed

+61
-44
lines changed

app/src/main/java/just/trust/me/Main.java

Lines changed: 61 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import de.robv.android.xposed.IXposedHookLoadPackage;
4444
import de.robv.android.xposed.XC_MethodHook;
4545
import de.robv.android.xposed.XC_MethodReplacement;
46+
import de.robv.android.xposed.XposedHelpers;
4647
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
4748

4849
import static de.robv.android.xposed.XposedHelpers.callMethod;
@@ -68,41 +69,43 @@ public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {
6869
/* Apache Hooks */
6970
/* external/apache-http/src/org/apache/http/impl/client/DefaultHttpClient.java */
7071
/* public DefaultHttpClient() */
71-
Log.d(TAG, "Hooking DefaultHTTPClient for: " + currentPackageName);
72-
findAndHookConstructor(DefaultHttpClient.class, new XC_MethodHook() {
73-
@Override
74-
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
72+
if (hasDefaultHTTPClient()) {
73+
Log.d(TAG, "Hooking DefaultHTTPClient for: " + currentPackageName);
74+
findAndHookConstructor(DefaultHttpClient.class, new XC_MethodHook() {
75+
@Override
76+
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
7577

76-
setObjectField(param.thisObject, "defaultParams", null);
77-
setObjectField(param.thisObject, "connManager", getSCCM());
78-
}
79-
});
78+
setObjectField(param.thisObject, "defaultParams", null);
79+
setObjectField(param.thisObject, "connManager", getSCCM());
80+
}
81+
});
8082

81-
/* external/apache-http/src/org/apache/http/impl/client/DefaultHttpClient.java */
82-
/* public DefaultHttpClient(HttpParams params) */
83-
Log.d(TAG, "Hooking DefaultHTTPClient(HttpParams) for: " + currentPackageName);
84-
findAndHookConstructor(DefaultHttpClient.class, HttpParams.class, new XC_MethodHook() {
85-
@Override
86-
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
83+
/* external/apache-http/src/org/apache/http/impl/client/DefaultHttpClient.java */
84+
/* public DefaultHttpClient(HttpParams params) */
85+
Log.d(TAG, "Hooking DefaultHTTPClient(HttpParams) for: " + currentPackageName);
86+
findAndHookConstructor(DefaultHttpClient.class, HttpParams.class, new XC_MethodHook() {
87+
@Override
88+
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
8789

88-
setObjectField(param.thisObject, "defaultParams", (HttpParams) param.args[0]);
89-
setObjectField(param.thisObject, "connManager", getSCCM());
90-
}
91-
});
90+
setObjectField(param.thisObject, "defaultParams", (HttpParams) param.args[0]);
91+
setObjectField(param.thisObject, "connManager", getSCCM());
92+
}
93+
});
9294

93-
/* external/apache-http/src/org/apache/http/impl/client/DefaultHttpClient.java */
94-
/* public DefaultHttpClient(ClientConnectionManager conman, HttpParams params) */
95-
Log.d(TAG, "Hooking DefaultHTTPClient(ClientConnectionManager, HttpParams) for: " + currentPackageName);
96-
findAndHookConstructor(DefaultHttpClient.class, ClientConnectionManager.class, HttpParams.class, new XC_MethodHook() {
97-
@Override
98-
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
95+
/* external/apache-http/src/org/apache/http/impl/client/DefaultHttpClient.java */
96+
/* public DefaultHttpClient(ClientConnectionManager conman, HttpParams params) */
97+
Log.d(TAG, "Hooking DefaultHTTPClient(ClientConnectionManager, HttpParams) for: " + currentPackageName);
98+
findAndHookConstructor(DefaultHttpClient.class, ClientConnectionManager.class, HttpParams.class, new XC_MethodHook() {
99+
@Override
100+
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
99101

100-
HttpParams params = (HttpParams) param.args[1];
102+
HttpParams params = (HttpParams) param.args[1];
101103

102-
setObjectField(param.thisObject, "defaultParams", params);
103-
setObjectField(param.thisObject, "connManager", getCCM(param.args[0], params));
104-
}
105-
});
104+
setObjectField(param.thisObject, "defaultParams", params);
105+
setObjectField(param.thisObject, "connManager", getCCM(param.args[0], params));
106+
}
107+
});
108+
}
106109

107110
findAndHookMethod(X509TrustManagerExtensions.class, "checkServerTrusted", X509Certificate[].class, String.class, String.class, new XC_MethodReplacement() {
108111
@Override
@@ -320,22 +323,27 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
320323
}
321324
});
322325

323-
findAndHookMethod("com.android.org.conscrypt.TrustManagerImpl", lpparam.classLoader, "checkTrusted", X509Certificate[].class, String.class, SSLSession.class, SSLParameters.class, boolean.class, new XC_MethodReplacement() {
324-
@Override
325-
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
326-
ArrayList<X509Certificate> list = new ArrayList<X509Certificate>();
327-
return list;
328-
}
329-
});
326+
try {
327+
findAndHookMethod("com.android.org.conscrypt.TrustManagerImpl", lpparam.classLoader, "checkTrusted", X509Certificate[].class, String.class, SSLSession.class, SSLParameters.class, boolean.class, new XC_MethodReplacement() {
328+
@Override
329+
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
330+
ArrayList<X509Certificate> list = new ArrayList<X509Certificate>();
331+
return list;
332+
}
333+
});
330334

331335

332-
findAndHookMethod("com.android.org.conscrypt.TrustManagerImpl", lpparam.classLoader, "checkTrusted", X509Certificate[].class, byte[].class, byte[].class, String.class, String.class, boolean.class, new XC_MethodReplacement() {
333-
@Override
334-
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
335-
ArrayList<X509Certificate> list = new ArrayList<X509Certificate>();
336-
return list;
337-
}
338-
});
336+
findAndHookMethod("com.android.org.conscrypt.TrustManagerImpl", lpparam.classLoader, "checkTrusted", X509Certificate[].class, byte[].class, byte[].class, String.class, String.class, boolean.class, new XC_MethodReplacement() {
337+
@Override
338+
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
339+
ArrayList<X509Certificate> list = new ArrayList<X509Certificate>();
340+
return list;
341+
}
342+
});
343+
} catch (NoSuchMethodError e) {
344+
345+
}
346+
339347
}
340348

341349
} // End Hooks
@@ -352,6 +360,15 @@ public boolean hasTrustManagerImpl() {
352360
return true;
353361
}
354362

363+
public boolean hasDefaultHTTPClient() {
364+
try {
365+
Class.forName("org.apache.http.impl.client.DefaultHttpClient");
366+
} catch (ClassNotFoundException e) {
367+
return false;
368+
}
369+
return true;
370+
}
371+
355372
private javax.net.ssl.SSLSocketFactory getEmptySSLFactory() {
356373
try {
357374
SSLContext sslContext = SSLContext.getInstance("TLS");
@@ -552,7 +569,7 @@ protected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Thr
552569
return null;
553570
}
554571
});
555-
} catch (ClassNotFoundException e) {
572+
} catch (XposedHelpers.ClassNotFoundError | ClassNotFoundException e) {
556573
Log.d(TAG, "OKHTTP 4.2.0+ not found in " + currentPackageName + " -- not hooking");
557574
// pass
558575
}

0 commit comments

Comments
 (0)