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

文章讲述了在遇到Android应用进行SSL双向认证时,如何通过FridaHookKeyStore来Dump客户端证书,从而解决400NorequiredSSLcertificatewassent错误。在过程中遇到了App安全措施的对抗,如更换Frida端口、关闭Xposed等,最终成功获取证书并使用Charles进行监控。
摘要由CSDN通过智能技术生成

一、目标

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

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

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

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

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

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

完美收工。

三、总结

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

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

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

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

在这里插入图片描述

SSL双向认证是一种安全机制,可以在客户端和服务器之间建立安全通信。在应用程序开发和爬虫抓包中,也可以使用SSL双向认证来加强安全性。以下是两种常见的方法: 1. 使用证书文件 在应用程序和爬虫中,可以使用证书文件来进行SSL双向认证。客户端和服务器之间交互时,需要客户端向服务器发送证书(通常是PEM格式的文件),证明自己的身份。服务器会验证证书的合法性,如果通过验证,就可以建立安全连接。在Python中,可以使用requests库来实现SSL双向认证。示例代码如下: ```python import requests # 客户端证书文件路径 client_cert = '/path/to/client/cert.pem' # 客户端私钥文件路径 client_key = '/path/to/client/key.pem' # 服务器证书文件路径 server_cert = '/path/to/server/cert.pem' # SSL双向认证 response = requests.get(url, cert=(client_cert, client_key), verify=server_cert) ``` 2. 使用OpenSSL工具 另一种常见的方法是使用OpenSSL工具进行SSL双向认证。在Linux和Mac系统中,可以使用openssl命令来生成证书和私钥文件。在Windows系统中,可以下载OpenSSL工具并安装。生成证书和私钥文件后,可以在应用程序和爬虫中使用。示例代码如下: ```python import subprocess # 生成客户端证书和私钥文件 subprocess.run(['openssl', 'req', '-newkey', 'rsa:2048', '-nodes', '-keyout', 'client.key', '-x509', '-days', '365', '-out', 'client.crt', '-subj', '/CN=client']) # 生成服务器证书和私钥文件 subprocess.run(['openssl', 'req', '-newkey', 'rsa:2048', '-nodes', '-keyout', 'server.key', '-x509', '-days', '365', '-out', 'server.crt', '-subj', '/CN=server']) ``` 在应用程序中,可以使用SSLContext对象来进行SSL双向认证。示例代码如下: ```python import ssl import socket # 客户端证书和私钥文件路径 client_cert = '/path/to/client/cert.pem' client_key = '/path/to/client/key.pem' # 服务器证书文件路径 server_cert = '/path/to/server/cert.pem' # SSLContext对象 context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) context.load_cert_chain(certfile=client_cert, keyfile=client_key) context.load_verify_locations(cafile=server_cert) # 建立SSL连接 with socket.create_connection((host, port)) as sock: with context.wrap_socket(sock, server_hostname=host) as ssock: ssock.sendall(b'Hello, world!') ``` 以上是两种常见的SSL双向认证方法,可以根据实际需求选择适合自己的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值