app逆向抓包技巧:关于混淆后app无法绕过sslpinning的解决方案

本篇博客旨在记录学习过程,不可用于商用等其它途径

SSL单向认证检测绕过可以看这篇博客的讲解
app逆向抓包技巧:noProxy、vpn与sslpinning检测绕过

尝试从逆向一个app的过程去讲解流程

梳理过程

在抓包某个app时,出现如图红框标识的异常提示,这说明有这个app有sslpinning校验
在这里插入图片描述

在尝试了Xpose+JustTrustMeXpose+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也是这篇文章提供的

大概整理一下,这篇文章最终实现的思路是:

  1. hook那些日常开发中很少用到的类,但okhttp在验证证书之前又必须用到的类,然后通过这个类的调用堆栈,去识别okhttp的相关类。
  2. 根据okhttp的类特征进行对比,比如某个类有几个构造函数,构造函数有几个参数,构造函数的参数类型分别是哪些,类成员有几个,类成员类型有哪些,每个对应的类型有多少个

看代码知道作者选择hook com.android.org.conscrypt.OpenSSLSocketFactoryImpl类,而这个类的createSocket的调用堆栈中的RealConnection类可以找到CertificatePinner类和OkHostnameVerifier类的。这两个类正是Okhttp3检测实现的地方,只要处理这它们就能实现绕过
在这里插入图片描述

作者提供的是Xpose模块,必须要提前安装Xpose
在这里插入图片描述

在这里插入图片描述

posted @ 2024-08-18 02:56  七夜魔手  阅读(45)  评论(0编辑  收藏  举报  来源