抓包之服务器校验客户端证书

1,058 阅读1分钟

挂上vpn,打开charles抓包可以看到没网络,但是可以抓到包,怀疑是服务器校验客户端证书了

image.png

image.png

这里推荐一下肉老师的文章 www.anquanke.com/post/id/197…

引用里面一张图

image.png

原本服务器校验的是app的证书,但是挂上charles,服务器校验的是charles的证书,一匹配发现不是app的证书,就返回网络失败,所以我们要将app中内置的证书导入到Charles中去。 这个操作通常需要完成两项内容: 1找到证书文件
2找到证书密码
首先找证书文件,直接对apk进行解包,直接过滤搜索后缀名为p12的文件即可,一般常用的命令为tree -NCfhl |grep -i p12,直接打印出p12文件的路径

image.png


找证书密码一般解密会调用现成的API,java.security.KeyStore ,直接使用frida打印出来,
也可以hook系统文件库,这里直接使用现成的代码,

function hook_KeyStore_load() {
    Java.perform(function () {
        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(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));
            console.log("KeyStore.load1:", arg0);
            this.load(arg0);
        };
        KeyStore.load.overload('java.io.InputStream', '[C').implementation = function (arg0, arg1) {
            console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));
            console.log("KeyStore.load2:", arg0, arg1 ? StringClass.$new(arg1) : null);
            this.load(arg0, arg1);
        };

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

setImmediate(hook_KeyStore_load)

使用spawn的模式启动,密码一下子就吐出来了

把证书导入到charles,并输入刚才的密码

再次抓包试试,这次页面跳转了,请求也是正常了