iOS逆向app在某种特殊的情况下抓不到包

分析PDD跨境APP时发现构架用了Flutter(Flutter并不是阻碍抓包的关键),在抓包的时候,发现使用SSLKillSwitchX仍然无法正常Wi-Fi代理抓取数据包,然后通过Frida trace 底层发包函数send、recv、socket。
frida-trace -U -f com.xunmeng.temuseller -i “recv*” -i “send*” -i “connect” -i “socket”
通过观察发现在点登陆的那一刻只能收到recvfrom、recv函数的执行。
那我们就修改trace脚本的recvfrom函数,添加查看堆栈的函数。

log('\tBacktrace:\n\t' + Thread.backtrace(this.context,Backtracer.ACCURATE).map(DebugSymbol.fromAddress).join('\n\t'));

成功打印调用栈


用Iridium对app进行砸壳,砸壳后IDA分析主程序TS文件。
通过对调用栈的地址在IDA 里的F5查看,发现是这么个玩意。

longlink.cc这玩意在git上搜一下。

可以找到对应的函数。


发现是腾讯开源的mars通信框架。(PS:这玩意长链接一般是通知用的)
TS这玩意在使用了mars HTTP长链接的情况下,是没办法Wi-Fi代理用花瓶或者burp抓到数据包的。
所以我们需要找到设置的地方关闭他长链接的地方,改让他使用正常短连接HTTP。
翻一翻符号,找到了这个方法

在这个方法里翻翻

发现要么设置强制短连接为true,要么修改couldAPILonkLink返回值为false。

最后写一个hook,测试可以成功抓包。

头次遇见因为长链接而导致抓不到包的情况,记录一下。

4 个赞

New bee

看不懂 太强了.new bee

New bee :+1:

拼多多国内版也是这样用的长链接传输,可以在网络库初始化的时候把走长链接的域名数组清空,强制降级为HTTPS

1 个赞