腾讯天御滑块流程逆向
目标网站
aHR0cHM6Ly90ZnoubWFveWFuLmNvbS95YW1haGEvdmVyaWZ5P3JlcXVlc3RDb2RlPThkMDQ3MThlODRmNjE4ZTU1ZDA1N2ZjMDNiODNjY2FkdWUycGImcmVkaXJlY3RVUkw9aHR0cHMlM0ElMkYlMkZ3d3cubWFveWFuLmNvbSUyRmNpbmVtYSUyRjE2MTE5JTNGcG9pJTNEMTA4NDQ5MTYxIy8=
网站分析
这里先全流程过一下。
在做这种验证码方面的东西。从后往上看。
这里滑块走的接口是 cap_union_new_verify
这个接口负载主要有5个参数类似或者是疑似加密的地方。
分别为
- ua
- sess
- collect
- eks
- vData
这里经过分析可知
UA是由base64加密useragent生成的。
sess 是由接口返回的
collect加密 ——> 需要分析
eks——> 需要分析
vData——> 需要分析
这里我们肯定知道大体的流程是
返回接口值——> 获取背景图片和缺口图片——> 识别获得距离——> 利用算法获取轨迹——> 轨迹加密——> 完成请求。
那这里我们就来找一下图片
可以看到 这个图片也需要返回的sess。 继续网上找
这里发现 两次请求的sess 还不一样。那就继续去看
这里重新调用下代码。补一下 yamaha/verify 接口的JS
拼接得到 背景图和缺口图。进而得到距离。
然后就是考虑几个加密参数如何 生成了。
参数生成分析
如下图位置 。进JS网上找栈点。
然后如图位置打断点。看下生成值
如图 就是collect生成位置。
这里先记住这个地方。先来分析下Vdata 和 eks
eks生成处
追栈找。发现这个是l方法的info
后经过多次单步调试。发现走的都是同一个接口
而这个接口 也是JSVMP的入口函数。包括collect的生成。
collect
这里回头再来看看这个collect
单步调试进栈
可以发现和上面的eks 走的同一个入口。
这里话不多说。直接开补。
第一步:复制JS到浏览器 看看能否出值。
直接调用 window.TDC.getData(!0)
第二步: 去github 找个趁手的开源补环境框架(很重要,简单的确实补的不行。)
第三步: 复制到node 开补。
缺啥补啥。但是其中包含了
- 对原型链的检测。
- 对dom链式调用的检测
- 对canvas 以及其原型链的调用
- 还有body以及div的一些检测。
过掉这些 基本就能正确出值了。
但是正确出值 也只是不包含轨迹以及其他特定检测的出值。
这里我们补环境得到值。需要使用Dom去监听鼠标事件。
打开mouseup断点。然后单步进栈
如图位置打上日志断点。
后面根据a.type 判断轨迹走向。
然后伪造轨迹 通过事件喂给JS。最终拿到最终的collect 以及其他的值。