某网站登陆滑块逆向-3
本文最后更新于:2025年7月10日 下午
目标:aHR0cHM6Ly9pLmVhc3Rtb25leS5jb20vd2Vic2l0ZWNhcHRjaGEvc2xpZGVydmFsaWQ=
参考文章,直接给了一个滑块的地址,不错的,可以直接分析
初步调试
初步调试发现首先会获取contextid这个参数,
然后get请求就是获取图片地址的请求,
查看get请求的启动器,打上断点,逐步调试
发现这里有获取浏览器cookie的操作,名为qgqp_b_id
可以发现getcontextid请求里带上的browserid就是上面获取的qgqp_b_id
核心部分
继续调试发现找到了get请求发出的地方:
发出的加密request参数的明文是如下这样组成的,这里变动的其实只有ctxid和r,其他似乎和版本以及测试账号有关
1 | |
再往下走,就是分析加密方法了
将加密代码发给GPT,推断为XXTEA算法,故验证如下
直接调用JS接口加密结果:
某网站加密结果:
现在可以确认采用了XXTEA算法进行加密
cookie生成
在编写代码时发现cookie不能通过request请求得到,发现是由客户端生成,全局搜索qgqp_b_id,发现其生成逻辑:
e是一个长度为 20 的字符串。第一个字符是一个 1 到 9 的随机数字(由Math.floor(9 * Math.random() + 1)生成),接下来的 19 个字符是 0 到 8 的随机数字(由Math.floor(9 * Math.random())生成)。- 最终生成的字符串类似
2 + "345678910111213...",也就是说一个以 1-9 开头,后面跟随 19 个 0-8 的数字的字符串。
设置 cookies:
- 使用
o.set("qgqp_b_id", e, 1e4, ".eastmoney.com")将生成的e存入名为qgqp_b_id的 cookie 中,并设置过期时间为1e4(即 10,000 秒,约为 2.8 小时),作用域为.eastmoney.com。 - 如果当前的
hostname包含dingqibao.com.cn或dingqibao.cn,还会在相应的域名下设置相同的 cookie。
背景图还原
发现返回的背景图是经过切割后的图片并且没有后续请求进行还原,那么说明是客户端进行还原并显示的。再接收到图片地址请求成功后,我们逐步调试到如下位置,发现DecodeImg方法,
进入k方法,
下面就是背景图还原的方法,经过多次调试发现数组a是一组定值,那么切片位置的还原就依赖于下面的代码:
1 | |
根据实际值用py给出复原代码,注意网站前端将图片缩放为260*160
1 | |
下面是复原的图片,略有瑕疵
滑动轨迹
打上断点,手动滑动滑块。得到发送的轨迹数据,格式为x1,y1,t1:x2,y2,t2,
1 | |
需要自己补充的字段包括ctxid、u滑动距离、d滑动轨迹数据、t滑动时间、r随机数,
用三阶贝塞尔曲线生成轨迹:
1 | |
最后通过验证: