1
1
package just .trust .me ;
2
2
3
+ import android .annotation .TargetApi ;
3
4
import android .content .Context ;
4
5
import android .net .http .SslError ;
5
6
import android .net .http .X509TrustManagerExtensions ;
7
+ import android .os .Build ;
6
8
import android .util .Log ;
9
+ import android .util .Pair ;
7
10
import android .webkit .SslErrorHandler ;
8
11
import android .webkit .WebView ;
9
12
35
38
import javax .net .ssl .HostnameVerifier ;
36
39
import javax .net .ssl .KeyManager ;
37
40
import javax .net .ssl .SSLContext ;
41
+ import javax .net .ssl .SSLEngine ;
38
42
import javax .net .ssl .SSLParameters ;
39
43
import javax .net .ssl .SSLSession ;
40
44
import javax .net .ssl .TrustManager ;
45
+ import javax .net .ssl .X509ExtendedTrustManager ;
41
46
import javax .net .ssl .X509TrustManager ;
42
47
43
48
import de .robv .android .xposed .IXposedHookLoadPackage ;
@@ -138,7 +143,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
138
143
keymanagers = (KeyManager []) callStaticMethod (SSLSocketFactory .class , "createKeyManagers" , keystore , keystorePassword );
139
144
}
140
145
141
- trustmanagers = new TrustManager []{new ImSureItsLegitTrustManager ()};
146
+ trustmanagers = new TrustManager []{getTrustManager ()};
142
147
143
148
setObjectField (param .thisObject , "sslcontext" , SSLContext .getInstance (algorithm ));
144
149
callMethod (getObjectField (param .thisObject , "sslcontext" ), "init" , keymanagers , trustmanagers , random );
@@ -183,7 +188,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
183
188
return ;
184
189
}
185
190
186
- param .setResult (new TrustManager []{new ImSureItsLegitTrustManager ()});
191
+ param .setResult (new TrustManager []{getTrustManager ()});
187
192
}
188
193
});
189
194
@@ -232,7 +237,7 @@ protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
232
237
protected void beforeHookedMethod (MethodHookParam param ) throws Throwable {
233
238
234
239
param .args [0 ] = null ;
235
- param .args [1 ] = new TrustManager []{new ImSureItsLegitTrustManager ()};
240
+ param .args [1 ] = new TrustManager []{getTrustManager ()};
236
241
param .args [2 ] = null ;
237
242
238
243
}
@@ -345,7 +350,7 @@ public boolean hasDefaultHTTPClient() {
345
350
private javax .net .ssl .SSLSocketFactory getEmptySSLFactory () {
346
351
try {
347
352
SSLContext sslContext = SSLContext .getInstance ("TLS" );
348
- sslContext .init (null , new TrustManager []{new ImSureItsLegitTrustManager ()}, null );
353
+ sslContext .init (null , new TrustManager []{getTrustManager ()}, null );
349
354
return sslContext .getSocketFactory ();
350
355
} catch (NoSuchAlgorithmException | KeyManagementException e ) {
351
356
return null ;
@@ -566,6 +571,44 @@ void processHttpClientAndroidLib(ClassLoader classLoader) {
566
571
}
567
572
}
568
573
574
+ @ TargetApi (Build .VERSION_CODES .N )
575
+ private class ImSureItsLegitExtendedTrustManager extends X509ExtendedTrustManager {
576
+ @ Override
577
+ public void checkClientTrusted (X509Certificate [] chain , String authType , Socket socket ) throws CertificateException {
578
+
579
+ }
580
+
581
+ @ Override
582
+ public void checkServerTrusted (X509Certificate [] chain , String authType , Socket socket ) throws CertificateException {
583
+
584
+ }
585
+
586
+ @ Override
587
+ public void checkClientTrusted (X509Certificate [] chain , String authType , SSLEngine engine ) throws CertificateException {
588
+
589
+ }
590
+
591
+ @ Override
592
+ public void checkServerTrusted (X509Certificate [] chain , String authType , SSLEngine engine ) throws CertificateException {
593
+
594
+ }
595
+
596
+ @ Override
597
+ public void checkClientTrusted (X509Certificate [] chain , String authType ) throws CertificateException {
598
+
599
+ }
600
+
601
+ @ Override
602
+ public void checkServerTrusted (X509Certificate [] chain , String authType ) throws CertificateException {
603
+
604
+ }
605
+
606
+ @ Override
607
+ public X509Certificate [] getAcceptedIssuers () {
608
+ return new X509Certificate [0 ];
609
+ }
610
+ }
611
+
569
612
private class ImSureItsLegitTrustManager implements X509TrustManager {
570
613
@ Override
571
614
public void checkClientTrusted (X509Certificate [] chain , String authType ) throws CertificateException {
@@ -586,6 +629,14 @@ public X509Certificate[] getAcceptedIssuers() {
586
629
}
587
630
}
588
631
632
+ private X509TrustManager getTrustManager () {
633
+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .N ) {
634
+ return new ImSureItsLegitExtendedTrustManager ();
635
+ } else {
636
+ return new ImSureItsLegitTrustManager ();
637
+ }
638
+ }
639
+
589
640
private class ImSureItsLegitHostnameVerifier implements HostnameVerifier {
590
641
591
642
@ Override
0 commit comments