快手滑块—逆向分析(web)
本帖最后由 timeslover 于 2023-5-13 14:47 编辑目标URL:
>aHR0cHM6Ly9wYXNzcG9ydC5rdWFpc2hvdS5jb20vcGMvYWNjb3VudC9sb2dpbi8/c2lkPWt1YWlzaG91LndlYi5jcC5hcGkmY2FsbGJhY2s9aHR0cHMlM0ElMkYlMkZjcC5rdWFpc2hvdS5jb20lMkZyZXN0JTJGaW5mcmElMkZzdHMlM0Zmb2xsb3dVcmwlM0RodHRwcyUyNTNBJTI1MkYlMjUyRmNwLmt1YWlzaG91LmNvbSUyNTJGYXJ0aWNsZSUyNTJGcHVibGlzaCUyNTJGdmlkZW8lMjUzRm9yaWdpbiUyNTNEd3d3Lmt1YWlzaG91LmNvbSUyNnNldFJvb3REb21haW4lM0R0cnVl
!(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7f479b9f5cbd427a82cc88bfd093365b~tplv-k3u1fbpfcp-watermark.image?)
此处iframe新开一个窗口,可以减少其他的干扰
!(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b6f3e0a92e2d441baa06a8f027e6c210~tplv-k3u1fbpfcp-watermark.image?)
失效的话,将上面的重新获取一下,重新复制iframe的URL,进去就可以了
!(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b104aa6d381848eb9f0c02a5fd74444c~tplv-k3u1fbpfcp-watermark.image?)
验证不通过
!(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c9f5ce83a2a94f8a9f5251161e2aa62d~tplv-k3u1fbpfcp-watermark.image?)
验证通过
!(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5c17547dcfab4f90954e93ac535f96c9~tplv-k3u1fbpfcp-watermark.image?)
检验URL和参数
> https://captcha.zt.kuaishou.com/rest/zt/captcha/sliding/kSecretApiVerify
!(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/36a6dc7193d945a48a0a84755bb94d6e~tplv-k3u1fbpfcp-watermark.image?)
全局搜一下参数verifyParam
!(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/88f920a4d82447f6a813e63382ab2bfc~tplv-k3u1fbpfcp-watermark.image?)
c参数是一个做了加密的长字符串
![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6fbbce71d07744d4a52a3efd50b3038e~tplv-k3u1fbpfcp-zoom-1.image)
此处需要注意,当我断在6374的时候,c还是undefined
!(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/891290d9588b4be097592df68e7d0f6e~tplv-k3u1fbpfcp-watermark.image?)
F8运行到6394的时候,他的值就计算出来了
!(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/568c4fd151d1488dbf3cecbac7045950~tplv-k3u1fbpfcp-watermark.image?)
回到case为0处,有个**r**对象,其中有个trajectory参数,大概猜测是路径加密后的值,可以先从这里入手
!(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a474b47c06f143f08d9de1354907b549~tplv-k3u1fbpfcp-watermark.image?)
全局搜索一下参数“trajectory”
!(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4eda882c298d43c496f1c76b3649eece~tplv-k3u1fbpfcp-watermark.image?)
此处搜到了3个,分别下断点,拖动之后,最后是断在行号 **8863** 的这个
!(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b2c972d5554d41b4be3856217347731f~tplv-k3u1fbpfcp-watermark.image?)
结果是经过一个参数 **c.slice(1)**
!(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/884b57bc6ef04c0587d6d352e87971fa~tplv-k3u1fbpfcp-watermark.image?)
此处是他的拖动路径数据
!(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/79fa86f7070e45cd99a927b7c15d1c4a~tplv-k3u1fbpfcp-watermark.image?)
此处c的计算在这个位置
!(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c0b5a1591c74432a92e19569c99c222b~tplv-k3u1fbpfcp-watermark.image?)
此处为指纹hash
!(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3cb9820d37174682bf2996004c500239~tplv-k3u1fbpfcp-watermark.image?)
到这一步,就可以把路径算法扣下来,路径还原结果如下
```js
const t = {
trajectory: [
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
]
}
let n = {}
const f = {
uhUaq: function (n, t) {
return n - t
},
FuwxQ: function (n, t) {
return n + t
}
}
let r = t.trajectory ? t.trajectory : 0
let c = t.trajectory.slice(-100).reduce(function (n, t) {
return f.FuwxQ(
n,
','
.concat(t, '|')
.concat(t, '|')
.concat(f.uhUaq(t, r))
)
}, '')
console.log(c.slice(1))
```
本地结果和浏览器验证结果匹配,说明算法没有扣错
!(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/04fd630fac8644b3a359bf3a5a9e9cc9~tplv-k3u1fbpfcp-watermark.image?)
然后我们再回到之前的这个位置,目前已经把路径的参数给解决了,还剩下 **captchaExtraParam**,**captchaSn**,**gpuInfo**
!(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2187f9464ff84bcf9b84968ff0a9a6c3~tplv-k3u1fbpfcp-watermark.image?)
在这个位置下断点,当 **case** 为 **0** 执行完之后,**t** 参数的 **sent** 会把最后的计算结果算出来并赋值
!(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6fbe85e28cfc40b2954dc0cb26172ca3~tplv-k3u1fbpfcp-watermark.image?)
!(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e6853fdf8838430f802d8b39e0535934~tplv-k3u1fbpfcp-watermark.image?)
这里hook去跟一下
!(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/88c5fc9b6bc3468ba8871797cd7bdf6b~tplv-k3u1fbpfcp-watermark.image?)
跟到这里的时候,Shift+F11
在此处下断点,重新刷新,进到f函数里面
!(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2d05efcd828b41d4b9dacb815d1a4979~tplv-k3u1fbpfcp-watermark.image?)
进到这里之后,F8运行,观察 **n** 形参的变化
!(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/84b3050037e84c3bb73caf86b388dfb8~tplv-k3u1fbpfcp-watermark.image?)
n变量的变化是这样的
1、先是UA和指纹信息
!(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/74e017e2aed04928883ad3a464d0be2c~tplv-k3u1fbpfcp-watermark.image?)
2、然后是会传一个超长的数组
!(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f46950ec5fee4e72af6d9b1d4f53d259~tplv-k3u1fbpfcp-watermark.image?)
3、最后就是运算出结果
!(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9745ab7574604427b0df52b312ccf429~tplv-k3u1fbpfcp-watermark.image?)
当n出现数组的时候,F11进入,会进到这个位置,这里就是最后结果生成的地方
!(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d289ff96eb734fafbeef796c9921c011~tplv-k3u1fbpfcp-watermark.image?)
以下是每个值的参数和输出的结果
!(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f91b03e6de7047adafb394029c6a11b3~tplv-k3u1fbpfcp-watermark.image?)
!(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3efe9114a6c84dd0a13a2eef16a0f787~tplv-k3u1fbpfcp-watermark.image?)
!(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1dd8ba6072dd4c769acd531e3a049190~tplv-k3u1fbpfcp-watermark.image?)
!(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d6130a22b30449e4a90bc521d528cd16~tplv-k3u1fbpfcp-watermark.image?)
到了断点位置,
先执行完 **u = e**,可以看到e的输出是一个大数组
然后执行e(i("0x34"), n(u)(t));
最后e里面的参数就计算出来了
!(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/51435aa0595848fd94e884265a196795~tplv-k3u1fbpfcp-watermark.image?)
所以我们只需要在这个地方注入我们需要的代码就可以,
然后将**c.a,d,e(i("0x34"), n(u)(t))**导出到全局,然后rpc调用,或者你也可以扣代码,我这里是直接自己写一个WSS去调算法,想扣代码的大佬自己去扣,这里就不多废话了。
最后本地验证一下,成功获得凭证数据
!(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/baeb201c47f445719aa61e0c807163e6~tplv-k3u1fbpfcp-watermark.image?)
**补补补补补补补:**
**captchaSn**参数是来自**https://captcha.zt.kuaishou.com/rest/zt/captcha/sliding/config**这个接口的返回数据
!(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5bb03ddbfb3d4a958a00fe5c3fc3be1e~tplv-k3u1fbpfcp-watermark.image?)
**captchaSession**参数又是来自上一个接口**https://id.kuaishou.com/pass/kuaishou/sms/requestMobileCode**
!(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e0faa9f2ca57458082b207f6ebfb2bf2~tplv-k3u1fbpfcp-watermark.image?) 太复杂了,图片转二值化 黑色为1 白色为0 图块011111111111111111111110匹配 缺口10000000000000000000001 即可 学到了学到了 以为我们APP的抢购加这个就万无一失了呢 看来还要进一步防范一下了 膜拜大佬,学习一下。我以前是用的yolo训练的滑块,后面被快手反爬了几次,会识别拖动轨迹,你这个也应该会涉及到轨迹识别吧?生成模拟轨迹数据时。 前面都跟上了,到了这里”所以我们只需要在这个地方注入我们需要的代码就可以,
然后将c.a,d,e(i("0x34"), ni("0x35")i("0x36"))导出到全局,然后rpc调用,或者你也可以扣代码,我这里是直接自己写一个WSS去调算法,想扣代码的大佬自己去扣,这里就不多废话了。“
就跟不上了 大佬,我在网上找了一些flash学习视频,但是是培训机构录制的并且加密了,还弄了个配套的播放器要激活码,但是这个培训机构倒闭了都找不到地方买激活码,能帮忙看下么,我悬赏了
吾爱破解悬赏链接 ycgzs 发表于 2022-10-10 01:06
太复杂了,图片转二值化 黑色为1 白色为0 图块011111111111111111111110匹配 缺口1000000000000000000 ...
这个问题不在本文章讨论范围,你要识别的话,可以参考之前我发的树美文章,还有顶象文章,里面有写利用opencv的识别算法,如果你觉得识别率不高,可以考虑用yolo等工具,自己训练数据,做数据模型 大佬 有个同盾的黑盒需要你搞 有兴趣接单吗 大佬的代码看着看着就睡着了{:1_918:} 看不懂,希望出个成品da's 感谢分享
谢谢分享
shukaisa 发表于 2022-10-10 03:17
看不懂,希望出个成品da's
关键点已经知道了,在关键点,注入函数,搞个wss远程调用一下,这不就是成品了么 谢谢分享,之前滑块是用一个第三方的库 ddddocr 来处理的。 谢谢分享