首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
逆向工程
发新帖
17
4
[原创]某手滑块流程逆向分析
发表于: 2024-4-16 16:16
20923
[原创]某手滑块流程逆向分析
始識
2024-4-16 16:16
20923
# 声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! # 目标网站 > aHR0cHM6Ly93d3cua3VhaXNob3UuY29tL3Byb2ZpbGUvM3h4Ymt3ZDhta250ZWFj # 参数流程分析 这里简单说一下流程吧, 刷新页面。如果没出滑块。删除cookie或者打开无痕重新打开。 **config** 请求 => 出滑块 **kSecretApiVerify** => 验证滑块  **config**请求 需要一个**captchaSession** 这个好像也是请求返回的。我们搜索一下就能找到了。  **kSecretApiVerify** 请求 只有一个负载参数 => **verifyParam** 然后请求响应呢 得到 **captchaToken** 最后把这个值带进数据请求里就ok了   ps: 这个接口 也不知道为啥有时候刷不出数据。不过不影响 本来就是研究滑块。 # 逆向流程分析 在伪造过程中发现。我们在获取数据的时候每次只有第一次能获取到数据。 在你第二次获取数据的时候。反而就获取不到数据了。 其实这里ks应该是校验了 一个cookie值 `_did` 这个cookie值需要带着去滑块。 然后检验了 你滑块过了 应该就能请求了。 这里_did 的具体算法如下: ```javascript // javascript 版本 X = "web_" + function () { for (var t = 1e9 * Math.random() >>> 0, e = [], n = 0; n < 7; n++) e.push("0123456789ABCDEF".charAt(16 * Math.random())); return t + e.join("") }(); ``` ```python # python 版本 import random def B(): # 模拟 JavaScript 中的 1e9 * Math.random() >>> 0 def X(): t = int(1e9 * random.random()) # 生成一个由7个随机十六进制字符组成的字符串 e = ''.join(random.choice('0123456789ABCDEF') for _ in range(7)) return str(t) + e return f"web_{X()}" ``` 然后我们去请求得到**captchSession** PS: **captchSession** 需要附带另一个请求。才能请求出来。 这里返回了很多值,我们来看看。 ```javascript { "result": 1, "desc": "ok", "captchaSn": "Cgp6dC5jYXB0Y2hhEsQCdWDZeMHqrbJPMyOc_oQgwOCbX50LOMegZUbnZRLVVrssF2...", "bgPicUrl": "https://.../rest/zt/captcha/sliding/bgPic", "cutPicUrl": "https://..../rest/zt/captcha/sliding/cutPic", "bgPicWidth": 686, "bgPicHeight": 400, "cutPicWidth": 122, "cutPicHeight": 122, "disX": 24, "disY": 135, "verifyUrl": "https://..../rest/zt/captcha/sliding/verify", "refSes": "https://.../rest/zt/captcha/refSes", "collectLimit": 1000, "verifyUrl2": "https://.../rest/zt/captcha/sliding/kSecretApiVerify", "a": 3, "d": 15, "sx": 4, "ix": 74, "sy": 2, "iy": 68 } ``` 如上文所示。 captchaSn 是拼接 bgPicUrl 和 cutPicUrl的参数。以用于请求得到url bgPicWidth 以及 bgPicHeight 和 cutPicWidth cutPicHeight 是验证码背景图和缺口图的长和宽 disX 和 disY 是 最终获取 captchaToken的重要参数。这里要注意传值后面生成captchaToken的disY 要乘以0.46 这里贴个ocr 识别代码 ```python def slide_match(path_target, path_background): det = ddddocr.DdddOcr(det=False, ocr=False) with open(f'{path_target}', 'rb') as f: target_bytes = f.read() with open(f'{path_background}', 'rb') as f: background_bytes = f.read() res = det.slide_match(target_bytes, background_bytes) return res["target"][0] ``` 后面就是去看 verifyParam 这个值的生成逻辑。  这里直接跟栈 直接进如下图所示的栈  如下图所示 位置 即使传参处。  ast一下方便我们调试。  这里看到 这。可以看到 这个a的生成在一个大的控制流里。 在swtich中 打上断点。重新刷新页面 走一下流程。 这里可以发现 case 0 里包含了一个异步请求。  ```javascript i["hDAgm"](Tt["a"], c) >>> Tt["a"](c) ``` 那后面就很简单了 只需要扣下这个Tt["a"] 这个函数就行了。 然后单步调试追栈就行。 如下图可知 调用了 v 然后传进去了一些参数。最终生成了 这个captchaToken  上文已经讲过了一些参数。现在重新梳理一下 - **captchaSn : 接口返回的值** - **bgDisWidth:定值** - bgDisHeight | cutDisWidth| cutDisHeight: 同上 - **relativeX: 识别的距离** - **relativeY: 接口返回的值** - **trajectory: 生成的轨迹** - gpuInfo: 显卡指纹 暂时写死(可收集) - extra_params:浏览器指纹 暂时写死(可收集) 如下图所示 是上文某些接口的信息。以及某些方法的生成点。  将上述代码复制 并且修改一下 ```javascript i = a.a["stringify"](c), o = n["gOBgK"](h, i), t["next"] = 4, n["OZXaj"](x, o) >>>> i = _a(c), _o = _h(i), _x(_o) ``` 这里可能有坑的地方就是 `a` 函数中的 b(e) 了 跟进去找值就行。其他好像没什么难度。 这里全补完了 会报一个 `Jose is not defined` 的错误  这里追栈 发现 这是个webpack添加个自执行的模块。我们把某些函数扣下来适当改写就行。如下图所示  搞定之后重新生成了 一组值 但是到这还没结束。继续跟着先前switch 的那个顺序搞就行。 也就是下图所在位置。  这个扣就不讲了。流程都一样 肯定是有小坑的。 再扣下面函数的时候。不要无脑扣。慢慢分析值。看看控制流走的是哪个分支就会很简单。  后面就不讲了。到最后就做个拼接 就生成了captchaToken 这里 还有个问题。因为pyexecjs是不支持异步的。 所以需要用node 去执行 然后拿到返回结果。 这都很基础 就不详细说了。 # 结果 最后成功返回结果。这个接口成功率感人啊。检测的东西好像有点多。 
登录后可查看完整内容
冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。
#其他内容
#调试逆向
收藏
・
17
点赞
・
4
打赏
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
mb_vzsnpfhs
感谢你的贡献,论坛因你而更加精彩!
2025-11-27 16:56
PLEBFE
为你点赞~
2024-5-31 01:29
养只猫不好么
为你点赞~
2024-4-22 14:42
mb_gpsdbsrt
为你点赞~
2024-4-17 15:33
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
5
)
秋狝
雪 币:
10080
活跃值:
(34156)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
1571
粉丝
39
关注
私信
秋狝
2
楼
感谢分享
2024-4-17 09:22
1
caolinkai
雪 币:
3851
活跃值:
(4319)
能力值:
( LV2,RANK:10 )
在线值:
发帖
7
回帖
826
粉丝
1
关注
私信
caolinkai
3
楼
感谢分享
2024-4-23 12:41
0
rookie江
雪 币:
760
活跃值:
(880)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
43
粉丝
0
关注
私信
rookie江
4
楼
captchaToken 获取成功了但是 请求还是失败 无法获取did 并且加上header注册的 但是还是请求不了
2024-9-3 10:31
0
AppTen
雪 币:
1391
活跃值:
(1729)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
9
粉丝
1
关注
私信
AppTen
5
楼
66
2024-9-3 11:03
0
带壳的蜗牛
雪 币:
189
活跃值:
(1531)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
39
粉丝
0
关注
私信
带壳的蜗牛
6
楼
666
2025-11-17 11:16
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
始識
4
发帖
10
回帖
30
RANK
关注
私信
他的文章
[原创]某品会 sign值逆向流程分析
8720
WEB逆向—数美滑块逆向流程分析
10638
[原创]某手滑块流程逆向分析
20923
[原创] WEB逆向—X-Bogus逆向分析(纯算+补环境)
14953
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部