15、Objection绕过证书绑定:Objection工具介绍、Objection绕过证书绑定、Objection自动化测试
好,咱们今天聊点硬核的。证书绑定这堵墙,很多安全测试人员都撞过。你配置好了代理,装好了证书,满心欢喜打开App——结果一片空白,或者直接弹窗「网络异常」。嗯,这就是证书绑定在作祟。
我个人习惯,遇到这种场景第一反应就是掏出Objection。为什么?因为它快,而且不需要你改APK重打包。你想想看,每次改APK都要重新签名、对齐、安装,调试一次半小时就没了。Objection直接运行时Hook,省事太多了。
Objection工具介绍
Objection,说白了就是一个基于Frida的运行时探索工具。它把Frida那些复杂的JavaScript脚本封装成了命令行指令。你不需要写一行Hook代码,就能完成很多操作。
我记得第一次用Objection的时候,心里还嘀咕:「这玩意儿靠谱吗?」结果一条命令下去,证书绑定直接绕过了。那一刻的感觉,嗯,挺爽的。
Objection的核心能力包括:
- 内存搜索与修改:直接搜索内存中的字符串、类、方法
- 类与方法的动态追踪:监控某个方法被调用的时机和参数
- SSL Pinning绕过:一键禁用证书校验
- 文件系统操作:在运行时读写App的沙盒文件
- SQLite数据库操作:直接查询App的本地数据库
安装也很简单,一条pip命令搞定:
pip3 install objection
前提是你得先把Frida装好,并且手机端要运行frida-server。这个基础环境我就不展开了,之前章节应该都讲过了。
Objection绕过证书绑定
好,进入正题。绕过证书绑定,Objection提供了两种方式:
方式一:一键绕过(推荐)
这是最常用的方式。你只需要在启动App时加上一个参数:
objection -g com.example.app explore --startup-command "android sslpinning disable"
这条命令做了什么呢?它会在App启动的瞬间,Hook掉所有常见的证书校验方法。包括:
javax.net.ssl.HttpsURLConnection的校验逻辑okhttp3.CertificatePinner的校验逻辑TrustManager的自定义实现- WebView的证书校验
说白了,Objection把你能想到的证书校验点全给堵上了。我在项目中遇到过一些App,用了自定义的证书校验逻辑,结果Objection照样能绕过去——因为它Hook的是底层的JNI调用,不是上层代码。
方式二:手动Hook特定类
有时候一键绕过不管用,可能是App用了非主流的证书校验库。这时候就需要手动介入了。
先列出App中所有与SSL相关的类:
objection -g com.example.app explore
> android hooking list classes | grep -i ssl
然后针对特定类进行Hook:
android hooking watch class com.example.app.CustomSSLSocketFactory
这样你就能看到这个类中所有方法的调用情况。找到关键方法后,直接让它返回true或者空值即可。
Objection自动化测试
手动测试一次两次还行,但如果你要测几十个App,或者同一个App要反复测试不同版本,那就得自动化了。
Objection支持通过脚本批量执行命令。你可以写一个简单的Python脚本:
import subprocess
import time
apps = [
"com.example.app1",
"com.example.app2",
"com.example.app3"
]
for app in apps:
print(f"正在测试: {app}")
cmd = f"objection -g {app} explore --startup-command 'android sslpinning disable'"
subprocess.Popen(cmd, shell=True)
time.sleep(10) # 等待App启动
# 这里可以添加抓包验证逻辑
print(f"{app} 测试完成")
当然,这只是最基础的自动化。真正生产环境中,我一般会结合mitmproxy的API来做自动化验证。流程是这样的:
- 启动mitmproxy,开启API监听
- 用Objection启动App并绕过证书绑定
- 通过mitmproxy的API检查是否有HTTPS流量经过
- 如果没有流量,说明绕过失败,记录日志
- 如果有流量,抓取数据包进行分析
我曾经用这套流程,一晚上测了30多个金融类App。第二天早上看报告,有8个App的证书绑定没绕过去——嗯,这些就需要进一步分析了。
下面这张图展示了Objection绕过证书绑定的完整流程:
最后说一句,Objection虽然强大,但它不是万能的。有些App用了Native层的证书校验,或者用了Google Play Integrity这样的服务,Objection就绕不过去了。这时候就需要结合Frida写自定义脚本,或者直接修改APK了。
嗯,这些高级玩法,咱们后面的章节再细聊。
公众号:蓝海资料掘金营,微信deep3321