timeslover 发表于 2022-10-9 22:14

快手滑块—逆向分析(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?)

ycgzs 发表于 2022-10-10 01:06

太复杂了,图片转二值化 黑色为1 白色为0   图块011111111111111111111110匹配 缺口10000000000000000000001 即可

zhzhch335 发表于 2022-10-11 15:09

学到了学到了 以为我们APP的抢购加这个就万无一失了呢 看来还要进一步防范一下了

linix 发表于 2022-10-12 14:15

膜拜大佬,学习一下。我以前是用的yolo训练的滑块,后面被快手反爬了几次,会识别拖动轨迹,你这个也应该会涉及到轨迹识别吧?生成模拟轨迹数据时。

CSK123 发表于 2022-12-27 16:41

前面都跟上了,到了这里”所以我们只需要在这个地方注入我们需要的代码就可以,
然后将c.a,d,e(i("0x34"), ni("0x35")i("0x36"))导出到全局,然后rpc调用,或者你也可以扣代码,我这里是直接自己写一个WSS去调算法,想扣代码的大佬自己去扣,这里就不多废话了。“

就跟不上了

29176413 发表于 2022-11-30 08:22

大佬,我在网上找了一些flash学习视频,但是是培训机构录制的并且加密了,还弄了个配套的播放器要激活码,但是这个培训机构倒闭了都找不到地方买激活码,能帮忙看下么,我悬赏了
吾爱破解悬赏链接

timeslover 发表于 2022-10-10 09:00

ycgzs 发表于 2022-10-10 01:06
太复杂了,图片转二值化 黑色为1 白色为0   图块011111111111111111111110匹配 缺口1000000000000000000 ...

这个问题不在本文章讨论范围,你要识别的话,可以参考之前我发的树美文章,还有顶象文章,里面有写利用opencv的识别算法,如果你觉得识别率不高,可以考虑用yolo等工具,自己训练数据,做数据模型

xiezhaoxu8 发表于 2022-11-1 19:08

大佬 有个同盾的黑盒需要你搞 有兴趣接单吗

xixicoco 发表于 2022-10-9 22:44

大佬的代码看着看着就睡着了{:1_918:}

shukaisa 发表于 2022-10-10 03:17

看不懂,希望出个成品da's

wang754782072 发表于 2022-10-10 08:27

感谢分享

abu21 发表于 2022-10-10 08:52

谢谢分享

timeslover 发表于 2022-10-10 09:02

shukaisa 发表于 2022-10-10 03:17
看不懂,希望出个成品da's

关键点已经知道了,在关键点,注入函数,搞个wss远程调用一下,这不就是成品了么

linswin 发表于 2022-10-10 09:20

谢谢分享,之前滑块是用一个第三方的库 ddddocr 来处理的。

2568xingtong 发表于 2022-10-10 09:29

谢谢分享
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 快手滑块—逆向分析(web)