hook抓包的风控解决方案

0x01 前言

抓包应该是我们逆向的第一步,只有先抓到包,才能决定我们是否要进行脱壳、逆向。万一他没有加密、万一数据不是我们想要的那岂不是白忙活了。但是目前很APP都设置了门槛,比如新版的抖音、淘宝、天眼查等挂上代理就直接无数据或者就显示不出你想要的数据。还没有开始就直接结束了,让人懊恼不已。没办法只能上科技与狠活了。

0x02 普通验证型

这个一般我们设置好IP和端口,导入证书不出意外是没问题。常见的抓包工具fiddler、charles、Burpsuite、httpcanary

0x03 双向验证型

针对双向证书绑定的APP,打印和保存证书,再导入到抓包工具中。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

function hook_KeyStore_load() {

    Java.perform(function () {

        var ByteString = Java.use("com.android.okhttp.okio.ByteString");

        var myArray = new Array(1024);

        var i = 0

        for (i = 0; i < myArray.length; i++) {

            myArray[i] = 0x0;

        }

        var buffer = Java.array('byte', myArray);

        var StringClass = Java.use("java.lang.String");

        var KeyStore = Java.use("java.security.KeyStore");

        KeyStore.load.overload('java.security.KeyStore$LoadStoreParameter').implementation = function (arg0) {

            //可以在此打印调用栈观察信息

            console.log("KeyStore.load1:", arg0);

            this.load(arg0);

        };

        KeyStore.load.overload('java.io.InputStream''[C').implementation = function (arg0, arg1) {

            //可以在此打印调用栈观察信息

            console.log("KeyStore.load2:", arg0, arg1 ? StringClass.$new(arg1) : null);

            if (arg0) {

                var file = Java.use("java.io.File").$new("/sdcard/Download/" + String(arg0) + ".p12");

                var out = Java.use("java.io.FileOutputStream").$new(file);

                var r;

                while ((r = arg0.read(buffer)) > 0) {

                    out.write(buffer0, r)

                }

                console.log("save success!")

                out.close()

            }

            this.load(arg0, arg1);

        };

        console.log("hook_KeyStore_load...");

    });

}

将证书导出后,charles进行证书配置。

图片描述

ssl pinning 证书在代码中的额外校验:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

function hook_ssl() {

    Java.perform(function () {

        var ClassName = "com.android.org.conscrypt.Platform";

        var Platform = Java.use(ClassName);

        var targetMethod = "checkServerTrusted";

        var len = Platform[targetMethod].overloads.length;

        console.log(len);

        for (var i = 0; i < len++i) {

            Platform[targetMethod].overloads[i].implementation = function () {

                console.log("class:", ClassName, "target:", targetMethod, " i:", i, arguments);

            }

        }

    });

}

objection SSL

objection 中的 Bypass SSL pinning hook的证书种类:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

sslContextEmptyTrustManager

    const x509TrustManager: X509TrustManager = Java.use("javax.net.ssl.X509TrustManager");

    const sSLContext: SSLContext = Java.use("javax.net.ssl.SSLContext");

okHttp3CertificatePinnerCheck

    const certificatePinner: CertificatePinner = Java.use("okhttp3.CertificatePinner");

okHttp3CertificatePinnerCheckOkHttp

    const certificatePinner: CertificatePinner = Java.use("okhttp3.CertificatePinner");

appceleratorTitaniumPinningTrustManager

   const pinningTrustManager: PinningTrustManager = Java.use("appcelerator.https.PinningTrustManager");

//Android 7+ TrustManagerImpl.verifyChain()

trustManagerImplVerifyChainCheck

    const trustManagerImpl: TrustManagerImpl = Java.use("com.android.org.conscrypt.TrustManagerImpl");

    const TrustManagerImplverifyChain = trustManagerImpl.verifyChain;

// Android 7+ TrustManagerImpl.checkTrustedRecursive()

trustManagerImplCheckTrustedRecursiveCheck

    const trustManagerImpl: TrustManagerImpl = Java.use("com.android.org.conscrypt.TrustManagerImpl");

    const TrustManagerImplcheckTrustedRecursive = trustManagerImpl.checkTrustedRecursive;

phoneGapSSLCertificateChecker

    const sslCertificateChecker: SSLCertificateChecker = Java.use("nl.xservices.plugins.SSLCertificateChecker");

DroidSSLUnpinning

DroidSSLUnpinning 这个工具是WooyunDota瘦蛟舞大佬总结的,github上有源码,以下我也贴出来了,他总结了一些常见的证书过检测的方法。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值