43
43
import de .robv .android .xposed .IXposedHookLoadPackage ;
44
44
import de .robv .android .xposed .XC_MethodHook ;
45
45
import de .robv .android .xposed .XC_MethodReplacement ;
46
+ import de .robv .android .xposed .XposedHelpers ;
46
47
import de .robv .android .xposed .callbacks .XC_LoadPackage .LoadPackageParam ;
47
48
48
49
import static de .robv .android .xposed .XposedHelpers .callMethod ;
@@ -68,41 +69,43 @@ public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {
68
69
/* Apache Hooks */
69
70
/* external/apache-http/src/org/apache/http/impl/client/DefaultHttpClient.java */
70
71
/* 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 {
75
77
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
+ });
80
82
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 {
87
89
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
+ });
92
94
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 {
99
101
100
- HttpParams params = (HttpParams ) param .args [1 ];
102
+ HttpParams params = (HttpParams ) param .args [1 ];
101
103
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
+ }
106
109
107
110
findAndHookMethod (X509TrustManagerExtensions .class , "checkServerTrusted" , X509Certificate [].class , String .class , String .class , new XC_MethodReplacement () {
108
111
@ Override
@@ -320,22 +323,27 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
320
323
}
321
324
});
322
325
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
+ });
330
334
331
335
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
+
339
347
}
340
348
341
349
} // End Hooks
@@ -352,6 +360,15 @@ public boolean hasTrustManagerImpl() {
352
360
return true ;
353
361
}
354
362
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
+
355
372
private javax .net .ssl .SSLSocketFactory getEmptySSLFactory () {
356
373
try {
357
374
SSLContext sslContext = SSLContext .getInstance ("TLS" );
@@ -552,7 +569,7 @@ protected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Thr
552
569
return null ;
553
570
}
554
571
});
555
- } catch (ClassNotFoundException e ) {
572
+ } catch (XposedHelpers . ClassNotFoundError | ClassNotFoundException e ) {
556
573
Log .d (TAG , "OKHTTP 4.2.0+ not found in " + currentPackageName + " -- not hooking" );
557
574
// pass
558
575
}
0 commit comments