当前位置: 首页
AI教程
某象刮刮卡验证码逆向分析详解

某象刮刮卡验证码逆向分析详解

热心网友 时间:2026-06-23
转载

利用AI大模型对某象刮刮卡验证码进行逆向分析,包括抓包获取参数、还原乱序图片、解析加密参数Param与ac,并通过AI辅助解混淆、复现算法及识别目标位置,实现高效精准的验证码破解。

人工智能技术的迭代速度令人目不暇接。从最初的基础模式识别,到如今具备自主学习与逻辑推理能力,AI大模型深刻影响着各行各业。逆向工程领域同样被重塑。以往依靠长期经验积累的协议逆向、接口解析等工作,耗时费力,且常因复杂加密协议而陷入困境。如今,AI大模型彻底改变了这一现状:它能够快速发现代码中的隐含规律,自动解析未知协议的交互逻辑,甚至完成以往难以想象的复杂逆向任务。在技术竞争日益激烈的时代,逆向工程的核心目标已从“能完成”转向“高效、精准、快速”。因此,拥抱并善用AI大模型不再是可选项,而是必由之路。

NhgLNO.pngNhgLNO.png

前言

让我们先明确本次案例的具体目标:攻克某象的刮刮卡验证码(网址已提供),使用的AI模型为GPT-5.5。进入网站后,在线体验页面展示了一种新颖的验证码类型——刮刮卡。初始时会显示图案位置,用户需要刮出完整图案才能通过验证。这正是逆向分析的核心所在。

NgBeCt.pngNgBeCt.png

抓包分析是第一步。接口响应返回了sid参数和验证码背景图片链接,其中type为2代表刮刮卡验证。但请注意,此时的背景图片是乱序的,需要后续还原。

NgTBRP.pngNgTBRP.png

c1接口被请求了两次,一次GET,一次POST。第二次响应的data值即为最终验证接口的请求参数c。两个请求均包含加密参数Param,一长一短,后续将详细分析。

NgEGbG.pngNgEGbG.png

校验接口为/api/v3,其中ak为验证码标识,c和sid由上一步接口返回,aid和主要加密参数ac留到后续处理。

NgTLDO.pngNgTLDO.png

AI & 古法逆向分析

乱序图片还原

接口返回的图片链接下载后是乱序的,要识别目标图案,必须先还原出完整图片。网站本身的处理逻辑也是如此:后端返回乱序图片,前端依据正确的还原顺序绘制完整图片,再渲染到页面上。因此,找到这个还原顺序就能复现还原算法。

验证码图片大概率是通过canvas绘制的。下个画布断点试试,重新获取验证码后成功断下。

NgTAgs.pngNgTAgs.png

代码经过混淆,解压后如下:

function d(n, t, r, e) {
    var o, i = n.options.lineWidth || p.default_line_width, d = p["cover_color"], v = t["getElementsByTagName"]("canvas")[0]["getContext"]("2d");
    return v["fillStyle"] = d, v.fillRect(0, 0, r, e), v.globalCompositeOperation = "destination-out", v["lineWidth"] = i, v.lineCap = "round", v
}

将这部分提交给AI分析,结果直接指出这是在绘制刮刮卡遮罩层,并非乱序还原部分。因此,继续跳到下一个断点位置看看。

NgmQEL.pngNgmQEL.png

同样解混淆后,代码如下:

function _(n, t, i, e, r) {
    var o = n.getContext("2d");
    o["drawImage"](t, 0, 0, i, e);
    var a = Math.floor(i / r['length']);
    x(r, (function (n, i) {
        var r = n * a, c = a;
        o.drawImage(t, r, 0, c, e, i * a, 0, c, e)
    }))
}

再次让AI分析,它准确识别出这就是乱序切块还原部分。不过测试发现,还原顺序并非固定,那它是如何生成的?按照传统做法,需要开始往上跟栈分析。但现在不同了,直接交给AI,去泡杯茶、看看新闻,等着就行。

Ng7aoZ.pngNg7aoZ.png

AI不仅找到了生成算法,还用Python复现了逻辑。核心代码如下:

def generate_ranges(seed: str) -> list[int]:
    order: list[int] = []
    for index, char in enumerate(seed):
        if index == 32:
            break
        value = ord(char)
        while value % 32 in order:
            value += 1
        order.append(value % 32)
    if len(order) != 32:
        raise ValueError(f"seed must generate 32 ranges, got {len(order)}")
    return order

aid

/api/a接口的加密参数,直接手动扣即可。从该接口的堆栈处跟到oneclick-Captcha-js.js文件,搜索aid =定位,下断。刮刮卡的R为3,跟到函数I中,将算法扣下来用Python实现。

NgEL0h.pngNgEL0h.png

timestamp = int(time.time() * 1000)
random_part = random.randint(0, 99999999)
aid = f"dx-{timestamp}-{random_part}-3"

_t

str(int(time.time() * 1000))[-6:-1]

Param

从第一个c1的堆栈处,跟到index.js中(动态文件,建议固定一套调试)。下断,清空缓存,刷新网页,断住后往上跟栈,Param参数的值已经生成。

NgN3yZ.pngNgN3yZ.png

再往上跟一个栈,就能找到生成位置。第二个c1的Param同理。

NgNlUU.pngNgNlUU.png

传统做法是开始漫长枯燥的扣代码,感谢新时代,这一步直接交给AI。定位到正确位置后,让AI用Python复现算法。两个Param的算法相同,只是入参不同导致长度差异。

NgNOHf.pngNgNOHf.png

第二个Param的入参包含大量环境校验,AI分析结果如下:

field_sources = {
    "can": "canvasFP,Canvas 指纹",
    "cpt": "canPlayType,音视频格式支持",
    "web": "webglFP,WebGL 指纹 hash",
    "gi": "webgl,WebGL 原始信息",
    "pr": "devicePixelRatio",
    "dm": "na vigator.deviceMemory",
    "jf": "fonts,字体探测",
    "hc": "na vigator.hardwareConcurrency",
    "ua": "na vigator.userAgent",
    "uad": "na vigator.userAgentData",
    "np": "na vigator.platform",
    "lug": "na vigator.language",
    "ce": "na vigator.cookieEnabled",
    "netType": "na vigator.connection.effectiveType",
    "ts": "touch,触摸能力",
    "tz": "Intl.DateTimeFormat().resolvedOptions().timeZone",
    "to": "new Date().getTimezoneOffset()",
    "ls": "localStorage 支持",
    "ss": "sessionStorage 支持",
    "ind": "indexedDB 支持",
    "od": "openDatabase 支持",
    "cd": "screen.colorDepth",
    "res": "screen.width/height",
    "ar": "screen.a vailWidth/a vailHeight",
    "vs": "viewportSize",
    "ws": "windowSize",
    "rp": "na vigator.plugins",
    "adb": "adblock 检测",
    "hl": "history.length",
    "cl": "cookieLength",
    "st": "startTime",
    "dt": "document.title",
    "url": "location.href",
    "bl": "bodyLength",
    "hdl": "headLength",
    "dr": "document.referrer",
    "xp": "xpath",
    "hsl": "performance.memory.jsHeapSizeLimit",
    "in": "incognito 检测",
    "qu": "storage quota",
    "hev": "UA high entropy values",
    "bt": "beginTime",
    "ct": "collectTime",
    "hlb": "hasLiedBrowser",
    "hll": "hasLiedLanguages",
    "hlo": "hasLiedOs",
    "hlr": "hasLiedResolution",
    "db": "debugger 检测",
    "sm": "simulator 检测",
}

固定入参,将AI生成的值与网页生成的值进行对比验证,结果一致。

NgNS1c.pngNgNS1c.png

ac

最后,分析最关键的加密参数ac。从堆栈处下断,往上跟,定位到了下图位置。

NgKTps.pngNgKTps.png

M.getUA()跟进去,跳转到greenseer.js文件。知道范围后,交给AI,看它发挥。有问题就调教,有些点确实需要纠正。

NgKD94.pngNgKD94.png

NgKSP9.pngNgKSP9.png

AI还能将各关键算法的位置全部罗列出来,方便自行分析。

NgKt0q.pngNgKt0q.png

顺便让AI解混淆,还原了greenseer.js文件。刮刮乐需要先检测出目标物品的位置,生成对应的轨迹,才能计算出正确的ac值。让AI写出识别算法,找到目标物体的位置。

NghYIf.pngNghYIf.png

研究轨迹可以插桩分析:

(() => {
    if (!window.__scratchStartTime || n.type === "mousedown" || n.type === "touchstart") {
        window.__scratchStartTime = Date.now();
        window.__scratchData = [];
    }
    const item = {x: Y(n), y: H(n), t: Date.now() - window.__scratchStartTime};
    window.__scratchData.push(item);
    return JSON.stringify(window.__scratchData);
})()
// copy(JSON.stringify(window.__scratchData))

结果验证

Nghz53.pngNghz53.png

来源:https://cloud.tencent.com.cn/developer/article/2695162

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
Claude Code 必知的14个高效工作流,让你的开发效率提升300%

Claude Code 必知的14个高效工作流,让你的开发效率提升300%

Claude Code 常用工作流 先分享几项核心判断:Claude Code 真正强大的地方,并非仅仅在于它能编写代码——而是它让“编码”这件事本身变得更加高效且可控。你大概率遇到过这类场景:接手一个陌生项目,花了一整天才能理清架构;线上出现报错,翻遍日志也找不到根本原因;想要重构遗留代码,又担心

时间:2026-07-09 17:49
阿里云通义AIGC平台完全指南:设计师AI生产力革命

阿里云通义AIGC平台完全指南:设计师AI生产力革命

一、写在前面:为什么设计师需要关注AIGC? 如果你还在手动一张一张制作海报、反复修改客户口中“感觉不对”的配色方案、为电商详情页准备几十张不同场景的产品图——那么你一定经历过这些痛点: 创意瓶颈:脑海中有画面,但手绘无法呈现 重复劳动:调整尺寸、更换背景、批量生成变体消耗了大量时间精力 成本焦虑:

时间:2026-07-09 16:48
零基础毕设代码二次开发:3文件定位法及Vue/Java修改对照表

零基础毕设代码二次开发:3文件定位法及Vue/Java修改对照表

每年一到毕业季,计算机专业的同学总会陷入一个共同的怪圈:从 GitHub 上扒下来一套代码,或者用 AI 生成一个项目,看起来挺完整的,可导师一句“加个筛选条件”或“换个页面颜色”,瞬间就懵了——不敢改,不会改,怕改崩。是不是很熟悉? 一、为什么AI生成的毕设代码你 "不敢改 "? 1 1 毕业生的三大

时间:2026-07-09 16:46
反向海淘订单系统:状态机与分布式事务实战设计

反向海淘订单系统:状态机与分布式事务实战设计

先分享一个反直觉的结论:反向海淘订单管理的真正挑战,往往不在于业务逻辑本身,而在于状态流转。一个订单的生命周期拉长到跨国运输,中间涉及的环节多、系统多、参与者多,状态稍有错乱就可能引发连锁事故。Taocarts团队在实践中踩了不少坑,最终沉淀下来的这套状态机与分布式事务方案,成功解决了这一复杂难题。

时间:2026-07-09 16:46
AI并未抢走程序员饭碗而是更新了编程菜单

AI并未抢走程序员饭碗而是更新了编程菜单

AI并未大规模替代程序员,而是改变了职业结构。重复性编码岗位需求下降35%至15%,而AIAgent开发等岗位需求激增187%。开发者焦虑从“被替代”转向“跟不上变化”,60%程序员已使用AI辅助编程。人的核心价值转向架构设计、技术决策和审查AI生成代码,AI技能带来16%薪资溢价。

时间:2026-07-09 16:46
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 热门数据榜