游乐游手机版
首页/AI教程/文章详情

AI逆向专栏:图标文字点选验证码逆向识别与传统方案冲击

时间:2026-08-17 10:52
AI已融入程序员工作各环节,提升效率。针对图标文字点选类验证码,利用AI模型(如deepseek-v4-pro、GPT-5 5)进行逆向分析,通过ClaudeCode配合js-reverse-mcp工具,成功还原了pc_edata及Authorization等加密参数的生成流程,展示了AI在零标注场景下的识别能力。

当下早已是全民 AI 的时代,人工智能不再是遥不可及的科技概念,而是深度扎根在程序员日常工作里的必备搭档。

从需求梳理、代码编写、BUG 排查,到逆向分析、脚本开发以及文档撰写,AI 早已渗透到程序员工作的每一个环节。习惯了 AI 辅助提效的我们,早已离不开这种事半功倍的工作模式:繁琐的重复代码一键生成,难解的报错快速定位,复杂的逻辑思路瞬间梳理,极大节省了时间精力,提升了开发效率。

一旦遇上模型宕机的时刻,很多程序员都会瞬间陷入手足无措的境地——写代码没思路、排错没头绪、进度直接停滞,忍不住叫苦不迭:

![NbctBf.png](https://developer.qcloudimg.com/http-sa ve/yehe-1094457/12a8ebf253e627fc914191fc6a5af1a2.png)

这恰恰印证了 AI 如今的价值分量。它不再是可选的加分项,而是程序员提升产能、简化工作、突破效率瓶颈的刚需利器,已然成为编程路上不可或缺的得力伙伴。

做逆向也是一样,得跟上时代的浪潮,感受新纪元的红利。古法固然可贵,但效率才是王道。无论是 web 还是 app,现在都有相对成熟的 AI 方案,各大模型的能力也越来越强。不必一味守着老手艺,看看 AI 的分析思路,也能学到不少新东西。

本文将运用 AI 技术开展加密分析工作,重点探索零标注场景下,AI 算法识别图标文字点选类验证码的能力与性能表现,拓展新的 AI 应用领域。

![NbD6hQ.png](https://developer.qcloudimg.com/http-sa ve/yehe-1094457/62541b7579245845f7abe75bba0273cd.png)

逆向目标

  • 目标:某某会登录图标文字点选验证码
  • 网址:aHR0cHM6Ly9wYXNzcG9ydC52aXAuY29tL2xvZ2lu
  • AI 模型:deepseek-v4-pro、GPT-5.5

抓包分析

进入网站,打开开发者工具抓包,选择账户登录,随便输入账密,点击登录,即会触发点选验证码:

![NbcFYU.png](https://developer.qcloudimg.com/http-sa ve/yehe-1094457/c27583246a476811e4ad2b172cc1b844.png)

/postLogin 接口响应返回 captchaId,即验证码标识,会作为参数用于后续发起一些请求。该接口的请求参数中,api_key、pc_eversion、skey 为定值,pc_edata 参数、请求头中的 authorization 以及 cookies 中的 mars_cid、mars_sid 参数都是经过加密处理的。如果错误,则会响应返回 {"msg":"not authorized","code":11001}。后文会具体分析这些参数:

![NbvPSs.png](https://developer.qcloudimg.com/http-sa ve/yehe-1094457/1645aad481db377e0dfb7f87a1f94a06.png)

/getURL 接口返回了获取背景、标题图片所需的 imageId 参数。请求参数中的 captchaId 是上文接口返回的,captchaType 7 为点选类验证码,data 中包含了一些指纹信息,cid 即 mars_cid:

![NbvrE7.png](https://developer.qcloudimg.com/http-sa ve/yehe-1094457/c89a2801b4387a1b651768cb5c2b2b63.png)

携带对应的 imageId 参数请求 /getImage 接口,即可获取到相关的验证码图片:

![NbvtWI.png](https://developer.qcloudimg.com/http-sa ve/yehe-1094457/4e17cfa1dc127a144837cbf6e79e9b74.png)

/check 为验证接口,需要关注的就是请求参数 data 中的 points,即点选坐标:

data = {
  "type": [
    "browser",
    "screen",
    "mars",
    "bootstrap"
  ],
  "browser": {
    "ua": ""
  },
  "screen": {
    "width": 1536,
    "height": 864
  },
  "mars": {
    "cid": ""
  },
  "bootstrap": {
    "version": "vsc-3025eccc.js"
  },
  "points": [],
  "antiCacheTime": anti_cache_time
}
data = json.dumps(data, separators=(',', ':'))
![NbvCpL.png](https://developer.qcloudimg.com/http-sa ve/yehe-1094457/994e93d5f76cdfb630882fec7d5774b0.png)
  • 识别正确:{"code":0,"message":"SUCCESS","data":{"ticket":"xxx","remain":0}}
  • 识别错误:{"code":2004,"message":"CAPTCHA_MISMATCH","data":{"remain":0}}

逆向分析

古法逆向

先来看看请求头中的 authorization 参数是如何生成的。怎么定位呢?直接掏出老手艺——hook!相关脚本如下:

(function () {
  var org = window.XMLHttpRequest.prototype.setRequestHeader;
  window.XMLHttpRequest.prototype.setRequestHeader = function (key, value) {
    if (key == 'Authorization') {
      debugger;
    }
    return org.apply(this, arguments);
  };
})();

控制台输入脚本,回车,然后点击登录,即会断住:

![NbD95V.png](https://developer.qcloudimg.com/http-sa ve/yehe-1094457/0a3768bc2ca6c48d2e9e125099dcc587.png)

接着就是向上跟栈环节,跟到 encryptAjaxFun 处发现 Authorization 的值已经生成了,于此处赋值:

![NbDkCL.png](https://developer.qcloudimg.com/http-sa ve/yehe-1094457/9bd84d38310df724cf2decb832053e38.png)

鼠标选中 Authorization.getSign 跟进去,跳转到以下代码处:

singString = window.sign ? window.sign.getSign(url, params) : ""

很明显,快找到真正的算法位置了。继续跟到 window.sign.getSign 中瞅瞅,果然,找到了完整的算法生成逻辑:

getSign: function(url, param, cookie) {
  var rs = "";
  var _this = this;
  var api = _this.replaceHost(url);
  var hashParam = _this.hashParam(param, url);
  var cid = _this.getCookie("mars_cid") ? _this.getCookie("mars_cid") : "";
  var sid = _this.getCookie("mars_sid") ? _this.getCookie("mars_sid") : "";
  var secret = _this.getSecret(param);
  rs = this.sha1(api + hashParam + sid + cid + secret);
  rs = "OAuth api_sign=" + rs;
  return rs
},

下断分析下就知道具体逻辑了,未混淆,并且是标准算法,没啥难度,几个环境参数相关联。需要注意的是 hashParam 参数的入参 param,可以下个日志断点观察下,传的不对,是无法通过验证的。

mars_cid、mars_sid 也参与了 Authorization 的生成,正好 cookies 中这俩参数也是必须的,顺手分析下。直接全局搜索,定位到 mars.js 文件中,生成位置分别如下,Python 复现即可:

o = h.mars_sid || Mar.Random.rand()
m = Mar.Util.encryptCid(Mar.Util.pad((new Date).getTime(), 13) + "_" + Mar.Random.rand())

最后来找下 pc_edata 的生成位置。由于相关 js 文件都未经过混淆处理,直接全局搜索关键字,多半就能定位到大概的位置。如下图所示,此时,pc_edata 的值已经生成了:

![NbDWBY.png](https://developer.qcloudimg.com/http-sa ve/yehe-1094457/d454537121d431cf9bb76e3312a20ef1.png)

同样的,向上跟栈即可定位到算法生成的位置,相关逻辑如下:

set.data = window.vipParamsEncrypt.encrypt(_this.skey, set.data);

跟进去,跳转到的,就是真正的加密算法,标准的 AES 加密:

![NbDcgH.png](https://developer.qcloudimg.com/http-sa ve/yehe-1094457/17268046687ca97fed1c504835a0dc3d.png)

可以去工具站验证下。至此,加密参数就都分析完成了,适合入门练手。

AI 逆向

加密算法部分,本文将用 claude code + js-reverse-mcp + deepseek-v4-pro 进行 AI 逆向尝试。至于都用到了 Claude Code,为啥不用 Claude Opus 4.7 呢?显而易见,支持国产——兜里没子儿。

![NbRKZY.png](https://developer.qcloudimg.com/http-sa ve/yehe-1094457/67fe7962115d41347d9405f1bb0f7497.png)

直接用 Claude Code 对接上 deepseek,让他访问网站分析,是不行的。Claude Code 内置了安全策略,存在网络安全限制,导致它无法直接访问相关接口。虽然其会尝试通过 Web Search 绕开限制,但那也是执行网络搜索,尝试从公开资料里获取相关信息,显然不靠谱:

![NbPfkI.png](https://developer.qcloudimg.com/http-sa ve/yehe-1094457/fa3d59425326ba4c073479e8a2bade57.png)

上篇 AI 逆向案例没借助 mcp,是因为先将算法逻辑所在的 js 文件保存到了本地,然后 AI 读取相关文件进行分析。因此,本文是一个新的思路。实际应用时,大伙自行选择更适合的方案。js-reverse-mcp 项目如下,按需安装环境即可:

以 Claude Code 为例,如下所示,即安装成功:

D:\xxx>claude mcp add js-reverse npx js-reverse-mcp
Added stdio MCP server js-reverse with command: npx js-reverse-mcp to local config
File modified: C:\Users\xxx\.claude.json [project: D:\xxx]

D:\xxx>claude mcp list
js-reverse: npx js-reverse-mcp - ✓ Connected

deepseek 接入 Claude Code 需要配置相关环境变量,输入 claude,显示如下,即配置成功:

![NbRmb6.png](https://developer.qcloudimg.com/http-sa ve/yehe-1094457/463efbc85fa5d6b2997a4aa07084691e.png)

接下来输入提示词询问即可。模型会自动调用 js-reverse,涉及权限相关的,选择 yes 或者 2 即可:

![NbRpRO.png](https://developer.qcloudimg.com/http-sa ve/yehe-1094457/cf4508c4c9aed5e67a098d789dac9e4b.png) ![NbRLZQ.png](https://developer.qcloudimg.com/http-sa ve/yehe-1094457/e6ad35ea9b10efb804aed4e58d095093.png)

如果遇到问题,模型会自行尝试解决。如若不行,还会更换方案,直到解决问题:

![NbR3qf.png](https://developer.qcloudimg.com/http-sa ve/yehe-1094457/e1f19d8645558ff10a1b494a797d8575.png)

观察思考过程,有问题及时干预、调教、纠正,免得走岔劈了,白耗 tokens。本案例不算复杂,模型分析的一些关键点并无问题,整体还算顺利。

经过 20 分钟的思考,AI 成功用 Python 还原出了 pc_edata 的加密流程,一些常量判断无误,顺手还解决了 Authorization:

![NbRlDc.png](https://developer.qcloudimg.com/http-sa ve/yehe-1094457/5b33228554325d9c7ba1fbce3c2d7f1f.png)

测试验证下算法是否正确。入参相同的情况下,pc_edata 还存在一个动态值 iv,先固定 iv:

iv = CryptoJS.enc.Utf8.parse("1234567890123456") // Ja vaScript

// iv = b"1234567890123456" // Python

经过对比测试,验证了 AI 的算法,生成的值与网页端一致:

![NbRhDZ.png](https://developer.qcloudimg.com/http-sa ve/yehe-1094457/da29f910eb476b081d85be3ab40c24b9.png)

相关算法会分享到知识星球中,以供学习交流。

AI 识别

如果算法都弄好了,但还未解决识别之前,想要验证整体流程是否能跑通,怎么办呢?可以考虑将 Base64 编码的图片数据,用图形界面显示出来,然后监听用户鼠标点击,返回所有点击位置的坐标。这样,能保证传参坐标准确无误,如果验证失败,肯定就是算法存在问题,减少干扰项:

![NbRWT7.png](https://developer.qcloudimg.com/http-sa ve/yehe-1094457/7d539a81984822e1c385139222a86612.png)

有关点选类验证码识别模型的训练,往期写过标准化流程的文章。这一套操作下来,多少还是有些成本与门槛的。本文将尝试通过 AI 大模型,不训练模型,纯靠 OCR + 算法匹配出相应的坐标位置。想自己实现,还是很需要些经验和算法功底的,感兴趣的小伙伴可以自行尝试下。

本案例除了文字外,还叠加了一些图标,这在一定程度上增加了视觉识别与解析的复杂度,对于 AI 来说也是个考验。先存一组图片到本地,给定的初始提示词如下:

经过漫长的思考(几十分钟),自我、人工纠正之后,能正确识别本地图片中的文字内容:

![NbYLma.png](https://developer.qcloudimg.com/http-sa ve/yehe-1094457/7d0061322e2cfa2acf6878a5c4ed07e3.png)

当然,想要成功率更高,肯定是需要优化提示词,根据实际情况持续调教的。保持耐心,想要一步到位,很难。

调教过程中 deepseek 说了句:要突破这个瓶颈需要换更强的 OCR 引擎,逻辑层面已无大优化空间。这不得对比测试一下。在均采用 ddddocr + RapidOCR 技术的前提下,deepseek-v4-pro 头脑风暴了几个小时的算法,效果远不如 GPT-5.5 几十分钟(构建 + 错图优化)的产出,任重道远。

![NbJR2I.png](https://developer.qcloudimg.com/http-sa ve/yehe-1094457/815130cdc45f1f5feb0e64ac93720b6e.png)

识别算法部分(DeepSeek、GPT),同样都会分享到知识星球中。

来源:https://cloud.tencent.com.cn/developer/article/2680247
上一篇QDS05 Prometheus 功能介绍与使用指南 下一篇AI内容生成去重方法:相似不等于抄袭,重复内容未必可用
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
CAD零基础入门教程:坐标输入、图层管理与基础绘图命令
AI教程 · 2026-09-01

CAD零基础入门教程:坐标输入、图层管理与基础绘图命令

本文面向CAD零基础学习者,系统讲解坐标输入、图层管理与基础绘图命令的核心用法。通过分步实操与常见问题排查,帮助新手建立精确绘图习惯,掌握规范出图的基础能力。

CAD从入门到项目交付:绘图、标注、图块与实战工作流
AI教程 · 2026-09-01

CAD从入门到项目交付:绘图、标注、图块与实战工作流

掌握CAD的核心在于建立“画得准、标得清、复用快、交付稳”的工作流。本文提供从环境设置、高频命令组合、标注规范、图块标准化到项目分阶段交付的完整路径,帮助初学者避免常见返工陷阱,独立完成可检查、可复用、可打印的工程图纸。

Claude Code 登录指南:个人、Teams 与企业账号区分与授权步骤
AI教程 · 2026-09-01

Claude Code 登录指南:个人、Teams 与企业账号区分与授权步骤

本文详细解析 Claude Code 登录前的账号类型区分方法,涵盖个人订阅、Teams 席位与企业 Enterprise 席位的授权路径差异。提供终端登录命令、环境变量排查及常见异常处理步骤,帮助用户快速完成正确授权并避免登录路径混淆。

Claude Code 文件修改前的权限模式配置与命令审批指南
AI教程 · 2026-09-01

Claude Code 文件修改前的权限模式配置与命令审批指南

本文详细介绍Claude Code在修改文件前的权限模式配置方法,包括defaultMode可选值、permissions allow与deny规则设置、多层级配置文件管理以及 status验证技巧,帮助开发者安全高效地使用AI编程助手。

Claude Code接入VS Code后先测扩展和终端命令
AI教程 · 2026-09-01

Claude Code接入VS Code后先测扩展和终端命令

在VS Code中接入Claude Code后,建议优先验证扩展面板与集成终端两条入口。本文提供标准检查顺序、关键命令与常见故障排查路径,帮助你快速确认环境就绪,避免后续开发受阻。