这篇文章的次要内容是解决在遇到 APP 没有应用 Android 自带的 HTTP 客户端进行申请,并且对 HTTP 客户端的代码进行了混同,导致通用工具 JustTrustMe 生效的问题。而中级篇中除了 JustTrustMe 以外的所有办法也都会对这种状况大刀阔斧,起因是中级篇中的 1、3、4 办法实质上针对的是 Android 7.0+ 零碎减少的 SSL Pinning 计划,而无奈对各个 HTTP 客户端本人实现的检测计划失效。(据说有个叫车速拍的 APP 就是这种类型呢)
那么应该怎么做能力抓到这类 APP 的包呢?很简略,仍然是应用 JustTrustMe 之类的 Hook 工具就好了,只不过咱们须要针对混同后的名字对原来 Hook 的局部进行非凡解决。
这里我专门写了一个样例 APP 来进行演示(别抓我,我什么都不晓得),这个 APP 做的事件就是在你点击了按钮之后,对百度首页发动一次申请,然而这个申请在没有破解 SSL Pinning 的失常状况下是不可能胜利的,因为我设置的是一个轻易输出的证书哈希,所以在申请的时候会因为失常的证书哈希与我轻易输出的哈希不同导致呈现申请失败的状况。
样例 APP 代码
这个 APP 我曾经编译好放到 GitHub 上了,有两个版本,一个是对代码进行过混同的,一个是没混同的,文末会有下载地址,读者能够下载下来本人玩玩。
两个编译好的 APK
开始演示之前说一下测试机的配置吧,这里用的测试机是 Android 8.1.0 的,曾经 Root+Xposed,同时曾经装置并激活了 JustTrustMe。
测试机系统信息
Xposed 模块治理界面 -JustTrustMe 已开启
咱们先来看一下没混同过代码的版本,装上之后关上它,而后点击“点击发送申请”按钮。
样例 APP 界面
不出意外的话会呈现申请胜利的字样,如果呈现申请失败的话可能是你网络问题,证书问题会提醒“证书验证失败”。
接下来咱们看看混同过代码的版本,操作同上。
证书验证失败
这次就是证书验证失败了,JustTrustMe 并没有失常失效。
咱们将这两个 APK 都放到 Jadx 中反编译一下看看。
在 Jadx 中反编译两个样例 APK
能够看到混同过的版本里,okhttp3 下的所有类名曾经变成了 abcd 这种名字。
而后咱们来看一下 JustTrustMe 的代码。
JustTrustMe 代码中 Hook okhttp3 的证书验证局部
能够看到它的代码中是对 okhttp3.CertificatePinner 类下的 check 办法进行 Hook 的,这个 CertificatePinner 类和 check 办法在没混同过的 APK 中能够很分明地看到。
反编译检测代码 1
反编译检测代码 2
那么当初 JustTrustMe 面对混同后的版本就生效的起因曾经很清晰了,因为它找不到这个 okhttp3.CertificatePinner.check,所以基本就不可能 Hook 到检测办法,天然不会有任何成果。
所以 … 应该怎么办呢?这里仍然是给出多种办法供读者抉择:
1、批改 JustTrustMe 代码中 Hook 的类名和办法名而后从新编译
很简略,找到对应的检测办法,把 JustTrustMe 代码中 Hook 的 className 和 methodName 改成混同后的名字即可,比方在这个混同后的样例 APP 里,okhttp3.CertificatePinner.check 变成了 okhttp3.f.a。
反编译检测代码 - 混同后
咱们批改 JustTrustMe 中的 Hook 局部,同样改为 f 和 a。
JustTrustMe 对 okhttp3 的证书检测 Hook
批改 JustTrustMe 对 okhttp3 的证书检测 Hook
改完之后编译一下,装置到手机上替换原来的就好了。
2、应用 Frida 进行 Hook
这个办法比办法 1 要更不便、更间接一些,因为须要的时候间接批改脚本马上就能用,不须要从新编译、重启手机或 APP,这里间接拿瘦蛟舞大佬写的解除 SSL Pinning 脚本批改一下,同样是批改 Hook okhttp3.CertificatePinner.check 的局部,改成混同后的名字即可。
批改瘦蛟舞的 ObjectionUnpinningPlus 脚本
3、魔改 JustTrustMe,减少一个能够在运行时依据状况调整每种 HTTP 客户端的 SSL Pinning 检测局部的类名和办法名的性能
这个我临时没空弄,感兴趣的同学能够本人实现一下。
4、魔改 JustTrustMe,对 Hook 局部减少动静适配性能,做到即便开发者对代码进行了混同也能主动找到实在的检测类和办法
同上,实现形式能够参考微信巫师框架局部的主动适配代码,实现当前实践上来讲是最不便的方法之一,因为是齐全主动的操作,不须要人工染指。
5、批改反编译 APP 失去的代码再打包回去
我感觉应该没人会用这么蠢的方法吧 … 用 Hook 的形式做起来要不便太多了。
抉择任意一种办法操作后,再关上混同版本的 APP 就能够失常申请了。
这时候可能会有同学要问了,怎么样晓得 APP 用的是哪个 HTTP 客户端?又怎么样疾速定位混同后的检测办法地位呢?
很简略,咱们先关掉破解工具,连上代理而后抓个包看看混同版本 APP 的申请。
抓包查看申请
User-Agent 局部
和平时遇到 SSL Pinning 的状况一样,这里只会抓到一个 CONNECT 申请,留神左边的 headers,从 User-Agent 中能够看出这个 APP 应用的是 okhttp3,那么咱们在混同后的代码中定位检测局部代码的地位时,就只须要对照着 okhttp3 的原始代码来找就好了(其余 HTTP 客户端同理)。当然了,也不排除有些 APP 会把 User-Agent 改掉,如果从 User-Agent 上看不出来的话,那就看一下反编译进去的源代码局部构造,看看有没有像 okhttp3 之类的这种特地显著的 HTTP 客户端的名字,有的话就把它干掉就好了。
——————————————————————————————————————————
TiToData:业余的短视频、直播数据接口服务平台。
更多信息请分割:TiToData
笼罩支流平台:抖音,快手,小红书,TikTok,YouTube