美文网首页
某社交App cs签名算法解析(一) SSL双向认证

某社交App cs签名算法解析(一) SSL双向认证

作者: fenfei331 | 来源:发表于2021-05-25 21:55 被阅读0次

    一、目标

    奋飞: 老板,咱们得招几个妹子呀,咱们公司男女比例太失衡了。

    李老板: 你去这个App上晃晃,据说上面妹子很多。

    main.png

    我去,包都抓不到,耍个毛线呀。

    TIP: 新鲜热乎的 v3.83.0

    二、步骤

    SSL双向认证

    问了下谷歌,有不少同道都遇到了返回值是 400 No required SSL certificate was sent 这种情况。

    他们一致认为,是遇到了SSL双向认证。

    不过谷歌传来的消息是,搞SSL双向认证很简单,把客户端证书,搞出来,然后再导入到 Charles,就大功告成了。

    client.p12

    在Apk包里面轻松找到 /assets/client.p12, 下一步就是找对应的证书密码,so easy嘛。

    Jadx上,搜索字符串 "client.p12" 或者 "client.cer", 字符串倒是都找到了,不过问题是,找不到这些字符串被调用的地方。

    看来被同道们搞了好几轮,新版本的App做了修改了。

    Hook KeyStore来Dump证书

    只要客户端有证书,那就一定会在使用中导入,我们在他导入的时候Dump出来,这样应该可以通杀了。

    Java.perform(function() {
        console.log("在https双向认证的情况下,dump客户端证书为p12. 存储位置:/sdcard/Download/client_keystore_{nowtime}.p12 证书密码: fenfei");
        
        Java.use("java.security.KeyStore$PrivateKeyEntry").getPrivateKey.implementation = function() {
            var result = this.getPrivateKey();
            let filePath = "/sdcard/Download/client_keystore_" + "_" + getNowTime() + '.p12';
            dump2sdcard(this.getPrivateKey(), this.getCertificate(), filePath);
            return result;
        }
        
        Java.use("java.security.KeyStore$PrivateKeyEntry").getCertificateChain.implementation = function() {
            var result = this.getCertificateChain();
            let filePath = "/sdcard/Download/client_keystore_" + "_" + getNowTime() + '.p12';
            dump2sdcard(this.getPrivateKey(), this.getCertificate(), filePath);
            return result;
        }
    })
    

    运行之前先允许这个App有读写存储卡的权限,因为最后我们是把证书写到sd卡里面了,否则会提示:

    Error: java.io.FileNotFoundException: /sdcard/Download/client_keystore__2021_05_24_xx_xx_xx_53.p12 (Permission denied)
    

    跑一下,程序崩溃了。

    这也难不倒我们,估计大概率是被检测到了, 那么换frida端口,然后把fridaServer换成hluda-server。

    再来,还是崩溃。奇怪,还有啥呢? Xposed。 把Xposed Status关掉。 再来。

    dump File
    dump OK !!!
    dump:/sdcard/Download/client_keystore__2021_05_24_16_48_09_24.p12
    

    完美,证书出来了,咱们赶紧拷出来。

    Charles添加证书

    Proxy -> SSL Porxy Settings

    import.png

    然后输入证书监控的host , *.sxxapp.cn ,端口是 443

    host.png

    迫不及待了,跑一把试试。

    rc.png

    完美收工。

    三、总结

    frida的spawn模式启动这个App的时候会崩掉,我认为是Xposed的原因,把Xposed关掉就好了。当然也许是我的手机环境有问题。

    大家都在进步,所以要多掌握几种方法,东边不亮西边亮。

    Dump证书的方法,参考 https://github.com/CreditTone/hooker 中的 keystore_dump.js 感谢大佬们提供的神奇工具。

    ffshow.jpg

    当别人都很老实的时候,你就耍点儿小聪明;当别人都耍小聪明的时候,你就老实做人。当别人既会耍小聪明又会做老实人的时候,你就干点别的。

    相关文章

      网友评论

          本文标题:某社交App cs签名算法解析(一) SSL双向认证

          本文链接:https://www.haomeiwen.com/subject/otthsltx.html