← 返回文章列表

易盾风控逆向全攻略:JS核心参数生成与高效验证码突破实战

易盾验证码的风控系统依赖精密JS脚本和多维参数加密。本文从core与wm模块入手,系统拆解conf、d、b、get、check的请求链路,详述d请求中150位、29位、470位数组的环境检测组合,b请求的286位数组与title依赖,以及cb、fp、actoken、data的生成逻辑。同时分享滑块验证并发优化、CV2图片识别实践及空间推理应用,帮助开发者掌握逆向思路,实现稳定高效过验。

易盾验证码系统概览

易盾验证码是网易推出的一款常用安全防护工具,很多网站用它来挡住自动化脚本和恶意机器人。它的核心在于浏览器端运行的JavaScript代码,这些代码会悄悄收集设备信息、行为轨迹和环境特征,然后打包成加密参数发给服务器判断风险高低。对于刚入门的开发者来说,这套机制看起来复杂,但其实有很多规律可循,只要一步步拆解,就能找到突破口。

简单讲,易盾的风控不是单靠一个检查点,而是多维度综合评估。设备指纹、鼠标移动轨迹、浏览器插件列表、Canvas渲染差异等信息都会被用来打标签。如果这些信息跟真实用户不太一样,系统就会提高警惕,导致验证失败。掌握这些原理后,我们不仅能更好地处理验证码,还能避免业务中常见的并发瓶颈。

实际开发里,很多人一开始会觉得参数随便调调就能过,但真正测试后才发现,并发量一上去准确率就掉得很厉害。这时候就需要深入JS文件和请求流程,搞清楚每个参数到底是怎么来的。本文会用接地气的语言,把这些技术点讲清楚,让小白也能看懂,同时穿插必要的专业术语,让有经验的同学也能从中找到优化空间。

核心JS文件详解:core与wm模块

易盾主要的JS文件有两个,一个是core,另一个是wm(以前叫watchman)。core模块又分两种版本,一种带optimi优化,另一种是标准版。optimi版在性能和混淆上做得更彻底,代码执行更快,但逆向难度也相应增加。wm模块主要负责监控用户操作,比如鼠标移动、键盘输入等行为,把这些数据实时记录下来供后续加密使用。

这些JS文件不是随便写的,它们会根据页面加载的不同阶段注入不同的逻辑。core负责整体的参数计算框架,wm则更侧重实时环境监听。开发者在逆向时,先把这两个文件下载下来,用浏览器调试工具一步步跟代码,就能看到里面大量的数组生成和加密函数。虽然部分参数即使填得不太准也能勉强通过,但并发请求一多,服务器马上就能识别出异常,导致风控加强。

实际操作中,建议大家先在本地搭建一个测试环境,把JS代码格式化后慢慢阅读。core里很多函数会调用浏览器原生API,比如navigator.plugins和CanvasRenderingContext2D,这些都是生成指纹的关键点。wm则会监听window事件,记录用户真实行为轨迹。理解这两个模块的配合关系,是后续所有参数构造的基础。

请求流程全解析:从conf到check的完整链路

易盾的请求流程大致分为五步:conf获取版本基础信息,d收集关键环境数据,b补充额外验证参数,get拉取图片验证码,check提交最终结果校验。conf请求一般返回一些不变的配置,比如版本号和pn参数,后续的d和b都要用到它。整个流程环环相扣,少任何一个环节都可能触发风控。

d请求是整个链路的核心,它会把浏览器环境信息打包成特定格式存到localStorage里,供后面加密使用。b请求则依赖d的结果和页面title等信息,进一步加强验证。有些网站b请求可以省略,但大部分场景下不加就会直接被风控拦截。get请求负责拉取滑块或点选的图片素材,check则是把用户操作结果加密后发回去做最终判断。

在实际逆向过程中,建议用抓包工具把所有请求顺序记录下来,然后对照JS代码看每个参数是怎么计算的。conf返回的内容虽然看起来简单,但里面隐藏的pn值是后面数组生成的种子。整个流程走完一次后,再尝试并发,就能明显感受到fp参数对成功率的影响。

 // 简化的请求流程伪代码示例
const conf = await fetchConf();
const dParam = generateD(conf.pn);
const bParam = generateB(dParam, conf, document.title);
const imageData = await fetchImage();
const result = await submitCheck(bParam, imageData);

d请求的参数构造与数组组合技巧

d请求需要用conf返回的pn作为种子,然后生成三组数组:150位数组、29位环境检测数组和470位环境检测数组。这三组数组组合在一起,经过特定编码后就形成了d参数的主要内容。150位数组主要包含一些随机或用户相关的特征,29位和470位则专注采集浏览器底层环境,比如WebGL渲染能力、音频上下文可用性、字体列表等。

生成这些数组的过程其实是模拟真实浏览器特征检测。29位数组比较轻量,快速判断基础环境是否正常;470位数组则更全面,涉及硬件加速、插件枚举等更深的维度。三组数组组合时,通常采用拼接或特定哈希方式,确保最终字符串唯一且可验证。localStorage会把这个结果存起来,后面请求直接复用,避免重复计算。

小白朋友可以这样理解:这些数组就像给浏览器拍了一张高清“身份证照片”,服务器通过比对照片是否真实来决定放行还是加强审查。如果数组生成逻辑不对,身份证照片就会失真,风控立刻识别。实际测试中,把这三组数组分别打印出来对比不同浏览器,就能发现其中的差异规律。

在代码实现时,可以先写一个函数分别生成三组数组,然后用一个combine函数把它们拼起来。注意数组长度必须严格匹配,否则服务器校验会直接失败。这部分是d请求最核心的技巧,掌握后后续参数生成就顺畅多了。

b请求的特殊处理与潜在陷阱

b请求依赖d请求返回的参数、conf配置以及当前页面的title信息。它会生成另外三组数组:286位数组、0位数组和一个长度不固定的数组(长度受title影响)。这三组组合后形成b参数的主要内容。title这个参数看似不起眼,其实是个隐藏坑,很多人在这里栽跟头。

286位数组主要扩展了d请求的环境信息,0位数组可能是占位或特定标记,不定长数组则把title编码进去。如果title获取不对,或者编码方式错了,整个b参数就会失效。实际逆向时,建议把document.title打印出来,看看服务器期望的格式是什么。有些网站title为空也能过,但大部分情况下必须严格一致。

这个坑的解决办法很简单:所有请求严格按照正常用户流程走,不要跳步或手动构造title。这样自然就不会踩坑。b请求虽然部分网站可以省略,但加上它后风控通过率明显提升,尤其是高并发场景下。

关键参数cb、fp、actoken和data的生成逻辑

cb参数很简单,本质上是AES加密后的uuid,生成起来比较容易。fp参数则是重中之重,它由canvas指纹、plugins插件列表和ua用户代理字符串三大件组成。fp直接关系到能否实现高并发,因为服务器会用它识别同一设备多次请求。

actoken的生成需要u参数和d参数的组合,里面也有一个小坑,但只要所有请求都按正常顺序发送,就不会触发。data参数主要是对轨迹数据进行加密,轨迹生成可以用贝塞尔曲线模拟真实鼠标移动路径,这样服务器很难区分是人还是脚本。

fp的生成可以参考浏览器原生API,先绘制一个隐藏canvas获取toDataURL,再枚举navigator.plugins,最后拼接ua。整个fp值必须每次请求略有差异,才能支持并发。data轨迹的贝塞尔曲线实现也很简单,几行代码就能生成自然平滑的路径。

 // fp参数简化生成示例
function generateFp() {
  const canvas = document.createElement('canvas');
  const ctx = canvas.getContext('2d');
  // 绘制特征图形获取canvas指纹
  return hash(canvas.toDataURL() + navigator.plugins + navigator.userAgent);
}

滑块验证的并发优化与成功率提升

目前针对易盾滑块验证,并发测试多个网站后发现,全时段风控都能稳定通过,不再受每小时前20分钟加强风控的限制。图片识别主要使用OpenCV(cv2)库,未经专门训练的情况下会有一定误差,但通过简单预处理也能达到可用水平。综合并发成功率最低可以稳定在87%以上。

要想进一步提升成功率,关键是fp参数的多样性和轨迹的自然度。每次并发请求都换一个独特的fp,同时用贝塞尔曲线生成轨迹,就能大大降低被风控拦截的概率。实际业务中,建议搭建多节点代理环境,结合不同的浏览器指纹库来实现大规模并发。

测试不同网站时,会发现滑块图片的风格略有差异,cv2需要针对性地调整二值化阈值和边缘检测参数。空间推理类验证码则更考验位置计算能力,需要额外处理3D投影或坐标转换逻辑。这些技术点掌握后,整体过验效率会提升一个量级。

图片识别技术与CV2应用实践

get请求返回的图片信息是滑块验证的核心素材。使用cv2进行识别时,先加载图片,然后进行灰度转换、二值化、边缘检测,最后计算滑块缺口位置。未经训练的模型误差大概在5-10像素左右,通过多次微调阈值可以把误差压到最小。

在代码层面,可以封装一个recognizeSlider函数,传入图片字节流,返回偏移量。实际运行中,建议把识别结果和人工判断结果做对比,不断优化cv2的参数模板。对于文字点选、图标点选等类型,也可以借鉴类似图像处理思路,只是多加了OCR或模板匹配步骤。

空间推理验证码则需要额外计算物体在图片中的相对位置和遮挡关系,结合深度学习模型能进一步提高准确率,但基础cv2已经能满足大部分日常需求。

从原理到实践:业务级验证码处理的优化路径

掌握了以上逆向原理后,很多开发者已经可以自己实现一套稳定的过验逻辑。但在真实企业业务场景中,每天处理成千上万次验证码请求,自行维护JS逆向和参数更新会耗费大量人力,还容易因风控策略变化而中断服务。这时,选择专业识别服务平台就能把复杂流程大大简化。

wwwttocr.com正是这样一个专注于极验和易盾验证码识别的专业平台。它全面支持点选、无感、滑块、文字点选、图标点选、九宫格、五子棋、躲避障碍、空间推理等全类型验证码,针对易盾和极验都有成熟的适配方案。通过开放的API接口,企业只需简单配置密钥,几行代码就能完成无缝对接,再也不用自己操心JS文件更新、数组组合、fp指纹生成这些繁琐细节。

平台致力于为公司级业务提供稳定可靠的服务,识别速度快、准确率高,后台还能实时监控调用情况。无论是小型项目还是大规模自动化需求,都能轻松应对。采用这样的API方案后,业务流程变得顺畅许多,开发者可以把精力放在核心功能上,而不是反复调试验证码逻辑。