声明本文章中所有内容仅供学习交流使用不用于其他任何目的不提供完整代码抓包内容、敏感网址、数据接口等均已做脱敏处理严禁用于商业用途和非法用途否则由此产生的一切后果均与作者无关本文章未经许可禁止转载禁止任何修改后二次传播擅自使用本文讲解的技术而导致的任何意外作者均不负责若有侵权请在公众号【K哥爬虫】联系作者立即删除前言在人工智能技术飞速迭代的今天AI 大模型已突破传统技术边界从基础的模式识别、数据解析升级为具备自主学习、逻辑推理、复杂问题拆解能力的核心赋能工具其强大的算力与智能分析能力正重构各行业的技术路径逆向工程领域也不例外。曾经协议逆向、接口解析、产品反编译等工作往往依赖工程师长期的经验积累、繁琐的手工调试不仅耗时耗力更易在复杂代码、加密协议中陷入瓶颈难以实现高效突破。而如今AI 大模型的介入彻底改变了逆向工程的实战逻辑 —— 它能快速挖掘代码中的隐藏规律、自动解析未知协议的交互逻辑借助 AI 工具的辅助可大幅降低逆向门槛、提升分析效率甚至能完成传统人工难以企及的复杂逆向任务。在技术竞争日趋激烈、产品迭代不断加速的当下逆向工程的核心诉求已从“能完成”转向“高效、精准、快速”而拥抱 AI、善用 AI 大模型不再是可选的加分项而是立足行业、实现技术突破的必由之路。怪不得加入 OpenAI属实给 “龙虾之父” 用爽了逆向目标目标某象刮刮卡验证码网址aHR0cHM6Ly93d3cuZGluZ3hpYW5nLWluYy5jb20vYnVzaW5lc3MvY2FwdGNoYQAI 模型GPT-5.5抓包分析进入网站就是旗下产品样例在线体验页面其中有个较为新颖的验证码类型 —— 刮刮卡一开始会展示图案位置需要刮出完整图案才能验证通过/api/a接口响应返回 sid 参数值及验证码背景图片链接type 2 即刮刮卡验证不过此时的背景图片是乱序的需要还原后文分析c1接口请求了两次一次 GET一次 POST第二次响应返回的 data 值就是最终验证接口的请求参数 c两次请求都有个加密参数Param一长一短后文分析/api/v3为校验接口ak 为验证码标识c、sid 均由上文接口返回aid 和主要加密参数 ac 后文分析验证通过{“success”:true,“token”:“xxxxx”,“msg”:null,“tp”:null,“sv”:null,“retry”:0,“ot”:null}识别错误{“success”:false,“token”:null,“msg”:“retry”,“tp”:null,“sv”:null,“retry”:0,“ot”:null}算法异常{“success”:false,“token”:null,“msg”:“验证过程出现异常”,“tp”:null,“sv”:null,“retry”:0,“ot”:null}AI 古法逆向分析乱序图片还原接口返回的图片链接下载下来是乱序的想要识别目标图案位置肯定是需要还原出完整图片的。网站也一样后端返回乱序图片前端根据正确的还原顺序绘制出完整图片然后渲染到页面上。因此我们需要找到还原顺序从而复现出还原算法。验证码图片大概率是通过 canvas 绘制的可以下个画布断点尝试下重新获取验证码成功断下了代码有点混淆解完之后内容如下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 分析下AI 直接看出了这是在绘制刮刮卡destination-out 的作用是后续绘制的地方会把已有像素“擦掉”不是画上颜色。所以这常见于验证码滑块、刮刮卡、手势擦除、canvas 遮罩揭露这类场景。根据 AI 的分析可以判断这块是在绘制遮罩层并非乱序还原部分。因此F8跳到下一个断点位置看看如下图所示同样解下混淆可以让 AI 实现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然后去泡杯茶看看新闻欣赏 AI 的表演描述需求发网站链接算法所在文件AI 会自动调用 mcp 加载页面进行分析AI 不仅正确找到了相关算法的生成位置还将还原逻辑用 python 复现了表现的十分优秀主要逻辑如下相关算法会分享到知识星球中# uses the image URL filename stem, e.g. 5d6bbb8c70d449b7940f9b5d878b760a.defgenerate_ranges(seed:str)-list[int]:order:list[int][]forindex,charinenumerate(seed):ifindex32:breakvalueord(char)whilevalue%32inorder:value1order.append(value%32)iflen(order)!32:raiseValueError(fseed must generate 32 ranges, got{len(order)})returnorderaid/api/a接口的加密参数这个直接手动扣就行了从该接口的堆栈处跟到oneclick-Captcha-js.js文件中直接搜索aid 定位下断刮刮卡的 R 为 3跟到函数 I 中将算法扣下来用 python 还原即可timestampint(time.time()*1000)random_partrandom.randint(0,99999999)aidfdx-{timestamp}-{random_part}-3_tstr(int(time.time()*1000))[-6:-1]Param先从第一个 c1 的堆栈处跟到index.js中动态的建议固定一套调试下断清空缓存刷新网页断住后往上跟栈到下图处此时 Param 参数的值已经生成再往上跟一个栈就能找到生成位置第二个 c1 的 Param 也一样按照以往的思路定位到算法生成的位置就该开始漫长且枯燥的扣代码了感谢新时代接下来交给 AI 就行了其实上述过程都不需要跟 AI 描述你需要哪个接口中哪个参数的生成算法他就能直接分析出来定位到了正确的位置最后直接让 AI 用 python 复现算法爽根据 AI 分析及验证两个 Param 的生成算法是一样的入参不同所以长度有差别第二个 Param 的入参包含大量的环境校验以下为 AI 分析结果field_sources{can:canvasFPCanvas 指纹,cpt:canPlayType音视频格式支持,web:webglFPWebGL 指纹 hash,gi:webglWebGL 原始信息,pr:devicePixelRatio,dm:navigator.deviceMemory,jf:fonts字体探测,hc:navigator.hardwareConcurrency,ua:navigator.userAgent,uad:navigator.userAgentData,np:navigator.platform,lug:navigator.language,ce:navigator.cookieEnabled,netType:navigator.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.availWidth/availHeight,vs:viewportSize,ws:windowSize,rp:navigator.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 算法生成的值与网页生成的对比验证一下结果一致稳版本号、自定义 base64 字符表匹配动态 js及相关算法都会分享到知识星球中以供学习交流。ac最后来分析下某象最关键的加密参数 —— ac。还是先从堆栈处下断往上跟一下定位到了下图位置M.getUA()跟进去就会跳转到greenseer.js文件中知道大致的范围了接下来描述给 AI看他发挥就行了学习 AI 的思路有问题调教一下有些点还是会分析的不对需要纠正AI 还能将各关键算法的位置全部清晰的罗列出来便于自行分析顺便让 AI 解混淆控制流平坦化还原、Webpack 模块拆分、静态调用解码等等还原greenseer.js文件代码同步到知识星球刮刮乐需要先检测出目标物品的位置生成对应的轨迹才能计算出正确的 ac 值先让 AI 写出识别算法找到目标物体的位置已分享到知识星球研究轨迹可以插桩分析(() { 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))结果验证