先说boringssl,这个东西就是是 Google 为 Android 等项目定制的轻量级、精简版的 OpenSSL,用于实现加密通信和安全协议。SSL_CTX_set_custom_verify 是 BoringSSL 中用于设置自定义证书验证逻辑的函数。它的函数原型大致如下:
void SSL_CTX_set_custom_verify(SSL_CTX *ctx, int mode, ssl_custom_verify_callback callback);
参数解释:
ctx:要设置的 SSL 上下文(SSL_CTX)。
mode:验证模式(比如 SSL_VERIFY_PEER)。
callback:你自己实现的回调函数,用于处理证书验证逻辑。
之前2022年、2023年、2024年的版本
callback函数是编译在libboringssl.so和libsscronet.so库中的,而且验证函数非常好找,用IDA查看SSL_CTX_set_custom_verify函数的用例或者在IDA中搜索字符串“ VerifyCert”或者"HandlerVerifyResult"就可以定位callback函数,如下所示
现在,他学聪明了!!!他编译把这几个字符串隐藏了,可能是重写过相关函数。那怎么办?
其实很简单,他SSL_CTX_set_custom_verify函数没混淆,SSL_CTX_set_custom_verify() 通常在初始化 TLS/SSL 上下文时调用,也就是说:在你创建完 SSL_CTX,还没创建 SSL 对象前调用。
明白这个原理我们就可以通过hook SSL_CTX_set_custom_verify函数获取他的验证函数,因为SSL_CTX_set_custom_verify执行是app初始化的时候执行,所以我们需要先拦截dlopen在libttboringssl.so刚加载的时候就去hook SSL_CTX_set_custom_verify 这样比较保险
执行./spawn find_boringssl_custom_verify_func.js使用spawn方式启动运行脚本 hook效果,这里我们发现有两个callback函数被hook到了
最后我们可以用frida实现replace callback函数强行验证通过
最后执行./attach hook_verify_ok.js 打开socksdroid配置charles抓包,我们可以看到很验证函数本来返回1验证失败被我们强制替换成了0让app验证成功
抓包效果
hook_verify_ok.js实现就不给大家了,因为大家的版本不同也不适用,find_boringssl_custom_verify_func.js可以给大家,这个相对通用
https://github.com/CreditTone/hooker?tab=readme-ov-file#19-find_boringssl_custom_verify_funcjs
find_boringssl_custom_verify_func.js 地址:
https://github.com/CreditTone/hooker/blob/master/js/find_boringssl_custom_verify_func.js
· 今 日 推 荐 ·
本文内容来自网络,如有侵权请联系删除
原文始发于微信公众号(逆向有你):安卓逆向 -- 某短视频33.x.0过boringssl检测抓包方案
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论