1 ssl pining(ssl证书验证)
单向认证
APP对服务端证书做校验 校验服务器的证书和域名。
Fiddler/Charles等的证书肯定是校验不过的
Charles安装配置:https://blog.csdn.net/Lu_GXin/article/details/105841312
APP做ssl pining的几种方式:
举例Python requests库对ssl的校验
requests.get(url, timeout=1, verify=false)
Python的几种网络请求方式
requests
urllib
urlib3
aiohttp
Java的几种网络请求方式
HttpsURLConnection
okhttp
webview ssl pinning
Native SSL
如何判断是ssl pinning:
ssl pinnin解决办法:
1)使用Hook手段 Hook APP端网络请求库对 ssl证书的判断方法
-
借助xposed 模块 justtrustme apk 地址:https://github.com/Fuzion24/JustTrustMe
JustTrustMe.apk 是一个用来禁用、绕过 SSL 证书检查的基于 Xposed 模块。JustTrustMe 是将 APK 中所有用于校验 SSL 证书的 API 都进行了 Hook,从而绕过证书检查。xposed的54的可以运行,高版本没有测试,可以自行测试。
注意:设置成功后需要重启设备。 -
借助frida 程序 DroidSSLUnpinning https://github.com/WooyunDota/DroidSSLUnpinning
2)逆向APP 扣出里面的证书 放到charles里 让charles使用真实证书做代理
示例:安吉星
部分 ssl pinning 失效的原因:
Hook 失败,APP的网络请求库代码被混淆,或者大厂自己实现了一套网络请求库
解决办法:
1、逆向APP,找到证书验证的地方,将证书导入抓包软件
2、修改xposed 的 justtrustme为JustMePlush(自适应混淆) 或者 frida的DroidSSLUnpinning 代码, 重新Hook
双向认证
客服端对服务端发来的证书做校验, 真实的服务端也对客服端证书做校验。
如何判断是双向验证:soul app
当做了ssl unpinning后,报如下错误:
双向认证解决办法:
客服端校验任然使用SSL unPinning方法
服务端校验,需把APP里的证书导入到代理抓包软件中,让代理抓包工具使用真实的APP证书。charles 比较方便 配置
示例:soul
如何找到APP里的证书
反编译APP 在assert文件夹里有.p12 .pem之类文件cer ssl
反编译后,在源代码里大量搜索
Hook 监听Assert文件夹 知道读了哪些文件
可能有密码 Hook java.security.KeyStore 查看密码
参考:
https://www.yuanrenxue.com/app-crawl/android-7-capture-data.html
https://mp.weixin.qq.com/s/UyVn15EpbkO1zLyzqy7FcQ?version=3.1.1.3006&platform=win