从x-tt-trace-id来看逆向苦力

宇宙大厂在web和安卓的反扒上是当之无愧的宇宙级,更新速度更是宇宙第一

再接触在它pc版时候我从来没想过签名还能这么玩!安卓这块先是引入cronet解决可以抓包的问题,随后签名放入了so,又调整了混淆!一个字:NB!

以下内容来自对安卓19.2.0的抓包,只谈x-tt-trace-id生成的思路流水账,它只是整个伪造请求的一小部分

背景

最近需要用到大厂的搜索,要求获取用户完整信息(包括地区、生日、学校等

在重新搞定了web签名和滑动条后发现self接口的bug修复了,本来是可以直接请求到这几个数据的😂

随后去了app,但发现上述的几个数据不是特别稳定,设备注册后刚开始大概率有,但一段时候后大概率还是没有🐶

开始以为注册后没有做激活和applog,但在进行了尝试后发现并不是,那么就只能干苦力活了:比对伪造的请求和抓包请求

比对

比对之后添加和修改了一批参数,但发现情况并没有得到明显的好转,最后聚焦到x-tt-trace-id上,其格式如下

00-32位hex-32位hex的前16位-01

分成了4段,最重要的32位hex咋一看很像是一个md5,刚开始我们就是随机生成了一个32位hex

在抓包过程中逐渐发现它竟然是有规律的递增值,而且中间有几位不变

将x-tt-trace-id里的32位hex进行拆分,会得到一个很有意思的结果

(0-7自增)+(8-22固定值)+(23-27看着像随机值)+(28-31固定值)

那么(0-7自增)大概率和时间戳有关系了

时间戳

这个很简单,把这8位hex转为十进制,和可能存在时间戳的地方做差值

随后你就会发现使用activity_now_client时会得到一个稳定的值

所以这前8位就是用activity_now_client减去一个你得到的固定值了

固定值

接下来是15位固定值,hex搜了一圈没有,转成10进制去搜了一圈还是没有

那么它是怎么来的呢,再经过一段时间漫无目的的静态分析和插桩后,我决定从设备注册开始

随后发现设备注册时后14位居然不一样,多注册几次更是发现每次都不一样,这14位在注册时是随机数

在设备注册完成之后这14位又固定了,并且和注册前的一摸一样!多试几次依然这样

那么可怀疑的地方就小了很多,比如openudid,又是一通乱找加回忆:

openudid之类的在请求前就已经固定了。只能是注册返回的参数了,而iid每次都会变,只有did是每次注册都不变的

将did转为16进制果然完美符合后13位,那么8和9位是干什么的呢?

大胆猜测:8位是宇宙大厂对时间戳的占位符,9位是did的占位符,或者这两个都是某一项的占位符,不过这些还太过久远,把这两位当成不会变的固定值即可

最后四位

如果熟悉套路,可以把它转成16进制,瞬间你就会发现这是啥

总结

就说到这啦,关键还是思路,有些值确实找不到从哪来的,也不是set-cookie,不妨观察下规律,如果不影响结果直接上随机数就好

宇宙大厂NB!(破音!更新速度唯我独尊!(是年终有kpi吗,明年打算怎么优化呢😊直接干掉某些导出吗


从x-tt-trace-id来看逆向苦力
https://back.pub/post/spirder-douyin-x-tt-trace-id/
作者
Dash
发布于
2022年1月10日
许可协议