本篇博客旨在记录学习过程,不可用于商用等其它途径
SSL单向认证检测绕过可以看这篇博客的讲解
app逆向抓包技巧:noProxy、vpn与sslpinning检测绕过
尝试从逆向一个app的过程去讲解流程
梳理过程
在抓包某个app时,出现如图红框标识的异常提示,这说明有这个app有sslpinning校验
在尝试了Xpose+JustTrustMe
和Xpose+SSLUNPINNing
以及Frida
系列检测绕过脚本都没法成功绕过检测,这里咱先不去hook 底层抓包。
我所用的hook脚本基本都是各位大佬们的杰作,已经把sslpinning检测类处理了一个遍,但是都没法解决就很奇怪了。
这时想起在使用Hooker项目提供的just_trust_me.js
进行hook时有如下报错,这才初步了解了混淆类
使用kadx打开app看看发现它是有使用Okhttp3发包的
使用frida的objection框架打印一下app全部的类中是否包含Okhttp3,发现确实没有
由此得出结论:这个app使用了混淆,且连类名也混淆了,而我是用的无论是Xpose模块还是Frida脚本,它们都是通过原始类名进行匹配,所以无法实现绕过
。
第一尝试
Hooker项目提供的just_trust_me_okhttp_hook_finder.js
针对混淆情况进行了处理,能支持自识别类名。
通过研究代码能大致确定类型包含d
,但是处理后并没有成功绕过检测,而全局匹配会导致超时或者app崩溃,这条路暂时没有好的解决头绪。
第二次尝试
使用OkHttpLogger-Frida提供的方案试试看
按它要求配置好环境后执行frida -U -l okhttp_poker.js -f com.example.demo --no-pause
注意:进去后先点击app触发一下请求
,然后使用find()
检测看看
说明确实有Okhttp3混淆,这时使用hold()
前需要把Find Result~
下打印出来的这些参数替换掉okhttp_poker.js
脚本下的相关内容,保存后会自动刷新,再使用hold()
不过不错了,看着是寻找的okhttp3关键类及函数不太对,这条路暂时也没有好的解决头绪。
第三次尝试
参考博客关于JustTrustMe对混淆后的App无效的解决方案提供的解决方案够成功绕过。(注:博客讲解使用的apk也是这篇文章提供的
)
大概整理一下,这篇文章最终实现的思路是:
- hook那些日常开发中很少用到的类,但okhttp在验证证书之前又必须用到的类,然后通过这个类的调用堆栈,去识别okhttp的相关类。
- 根据okhttp的类特征进行对比,比如某个类有几个构造函数,构造函数有几个参数,构造函数的参数类型分别是哪些,类成员有几个,类成员类型有哪些,每个对应的类型有多少个
看代码知道作者选择hook com.android.org.conscrypt.OpenSSLSocketFactoryImpl
类,而这个类的createSocket
的调用堆栈中的RealConnection
类可以找到CertificatePinner
类和OkHostnameVerifier
类的。这两个类正是Okhttp3
检测实现的地方,只要处理这它们就能实现绕过
作者提供的是Xpose模块,必须要提前安装Xpose