飞天茅台现在基本可以直接购买了,所以本文讨论的技术在抢茅台上用处不大,但是可以用于学习 IOS 逆向并进行实践。请勿将技术方法用于非法用途。
i 茅台上进入飞天茅台的抢购页面,发现购买按钮是灰色的:

只要售罄或者不在购买时间,这个按钮无法点击。
到这里首先想到的是,看这个界面是什么,以及这个按钮的初始化在哪里,然后就可以强制设置按钮为可点击状态。
第一步捕获界面信息,发现是一个 webview 界面:

整个界面是一个 WKCompositingView,也就是使用的 webview。
好的,既然是 webview,那我就直接抓包,看看购买协议是什么。
在 IOS 设置界面设置代理后,发现 app 打开后无法显示界面。不用想肯定是有检测代理,那么先将二进制拖到 IDA 中分析。
找到对 CFNetworkCopySystemProxySettings 函数的引用

很快就找到了,不仅有检测代理,还有检测 VPN,用了代理或者 vpn 就不让使用

检测完后,会把检测结果拼接到 header 中,并且加密:

看到这里,我立刻就想到了一个简单粗暴的方法,直接 hook yx_headerEncryptString 替换参数:
在这里调试的时候,我很好奇,为什么 inject 会是 1?我直接使用 trollfools 注入的动态库,难道它还有签名检测?
往前跟踪数据的来源:

发现是通过 【MTLibEncry getDictory’】返回的前缀和后缀信息在做匹配判断。
HOOK 后输出返回结果:
原来是通过前缀过滤了系统库,通过后缀配置 APP 模块的白名单,这样我通过 Trollfools 注入的动态库不在白名单内就被检测了。
接下来就绕过代理检测,使用 fishhook 绕过代理检测。Fishhook 需要在重定向完成前实现,因此需要将 hook 的调用前置在 constructor 函数内
绕过:
代理检测绕过之后,竟然就可以抓包了
传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 1天前
被CCTV果冻爽编辑
,原因: