这篇文章的次要内容是解决在遇到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