首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
编程技术
发新帖
0
0
[原创]完美滑块还原笔记
发表于: 2026-9-10 13:13
372
[原创]完美滑块还原笔记
你送的花开了
2026-9-10 13:13
372
来源与拼接逻辑 搜索 background-position 可以定位到 mCaptcha.pc.1.0.0.min.js (mCaptcha.beauty.js) 中 MoveCaptcha 的两处关键代码: getCaptcha 成功后: o = e.capKey; // 图片文件名,如 2a8d351db51d4d59b11a08da18c3e21a c = e.imgUrl; // <mark class="encrypted">50cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0j5i4m8@1j5$3S2S2M7#2)9J5k6q4)9J5k6g2)9J5k6g2)9J5k6g2)9J5c8X3y4S2M7s2c8U0K9r3q4K6i4K6u0r3</mark><capKey>.png R = JSON.parse(e.data); // 还原数组(40 个 0~39 的整数排列) s = e.validateUrl; 渲染/拼接时对每个切片 div: $.each(i /* = R */, function (e, t) { // t < 20:background-position: -13*t px 0 // t >= 20:background-position: -13*(t%20) px -60px }); 几何参数在文件里写死:g=260(宽)、x=120(高)、_=20(每行切片数),所以每片是 13×60,共 40 片:第 0~19 片在上行,第 20~39片在下行。data[j] 的含义是:正常图的第 j 个位置应该放打乱原图里的第 data[j] 片。  以这张为例,从页面上实际拼出的 DOM 提取到: [39,13,21,12,23,17,24,29,34,14,6,31,22,2,25,27,37,16,5,20,10,18,38,36,32,30,8,3,7,11,19,1,9,0,4,33,28,35,15,26] 这个数组就是该次 data 的等价内容 还原方式: 下载的原始 PNG 实际是 321×120,不是 260×120: - 左 0~259 像素是被打乱的背景,40 片 13×60; - 右 260~320 像素是 61×120 的拖动块,页面里 .m_sliderCubic 用 background-position: -260px 0 取的就是这块。 所以还原时只切左 260 像素,还原图第 j 片 = 原图第 order[j] 片: for j, src in enumerate(order): row, col = divmod(j, 20) out.paste(cells[src], (col * 13, row * 60)) 还原后的图片为:  实际还原代码如下: from PIL import Image COLS = 20 # 每行切片数 SW, SH = 13, 60 # 单切片宽高 def restore(image_path, order, output_path): img = Image.open(image_path).convert("RGB") cells = [] for f in range(40): row, col = divmod(f, COLS) cells.append( img.crop((col * SW, row * SH, col * SW + SW, row * SH + SH)) ) restored = Image.new("RGB", (COLS * SW, 2 * SH)) for j, src in enumerate(order): row, col = divmod(j, COLS) restored.paste(cells[src], (col * SW, row * SH)) restored.save(output_path) return restored.size def main(): image_path = r"\captcha_raw_2a8d351db51d4d59b11a08da18c3e21a.png" order = [ 39, 13, 21, 12, 23, 17, 24, 29, 34, 14, 6, 31, 22, 2, 25, 27, 37, 16, 5, 20, 10, 18, 38, 36, 32, 30, 8, 3, 7, 11, 19, 1, 9, 0, 4, 33, 28, 35, 15, 26, ] output_path = r"\1.png" size = restore(image_path, order, output_path) print("还原完成:", output_path, size) if __name__ == "__main__": main() 公众号:JavaScript逆向笔记 来源:<mark class="encrypted">10fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0M7q4)9J5k6i4N6W2K9i4S2A6L8W2)9J5k6i4q4I4i4K6u0W2j5$3!0E0i4K6u0r3M7#2)9J5c8Y4u0A6K9U0R3J5b7@1k6f1z5h3f1#2y4p5c8u0L8X3E0&6M7X3g2$3N6Y4M7`.</mark>
冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。
收藏
・
0
点赞
・
0
打赏
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
0
)
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
你送的花开了
3
发帖
1
回帖
0
RANK
关注
私信
他的文章
[原创]完美滑块还原笔记
371
[原创]腾讯验证码识别之“旋转最快的物体”
314
[原创]腾讯验证码识别之“点击运动最慢的元素”分析
323
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部