tb去验证码文件nc.js功能框架与模块化结构浅析
UA_Opt的初始值在UA算法中有着至关重要的作用,其初始化动作在文件nc.js中完成。事实上,nc.js除了给UA_Opt赋初值外,还实现与登录页面(login.html)交互,读写cookie,完成滑动验证等等功能。
关于UA_Opt在UA算法中的重要角色的分析请参阅文章淘宝新版UA算法中的UA_InputId/LogVal/log;本系列文章将以nc.js为主要学习对象,同时会涉及淘宝的login.html, 6x.js等相关文件,这些文件与64.js是同一时期抓取的,与目前最新的相关文件可能会略有差异,请各位看官知悉,nc.js的下载链接。
假设nc是no capture(去验证码)的缩写,那么本博客中将nc.js文件称去验证码文件。虽然学习该文件的过程举步维艰,目前的认知也不一定正确,但是雁过留痕,本博客从本文开始,将发表一系列关于去验证文件的学习笔记,欢迎各路大神指点。本文先记录去验证码文件nc.js的功能框架和其主要模块的调用关系。
1. 去验证码文件的功能框架
下图是将no capture文件nc.js的主要模块收起之后的代码,由图可知文件由两个主要功能摸块STABLE_ACTION和NEW_ACTION组成,随机决定执行哪一个模块。随机的概率由变量GREY_RATIO和window[“aq-nc-grey-ratio”]_决定,用chrome的console抓取登录时所有涉及文件,然后使用console中的Filter功能,未见window[“aq-nc-grey-ratio“]的定义,因此我暂且认为该变量为undefined。所以GREY_RATIO=0.1,理论上而言,no capture文件有90%的几率执行STABLE_ACTION模块,10%的几率执行NEW_ACTION模块,故后续文章的主要学习对象都是STABLE_ACTION模块。
所谓知己知彼,百战不殆,我虽然不去学习NEW_ACTION模块,但我还是要了解一下STABLE_ACTION和NEW_ACTION的大致差异。如下表所示,NEW_ACTION比STABLE_ACTION多出来一个模块,名为./patch/domain_replace, 序号为17, 有兴趣的同学可以进一步研究一下。我猜测除了这个多出来的模块,其他名称相同的模块功能应该也基本相同。
2. STABLE_ACTION模块调用关系
no capture文件与UA算法文件相比,有以下特征:
*功能实现与模块调用关系更加复杂;
*没有使用混淆技术,其函数与模块名都基本与其功能相关;
*每一个模块均使用严格模式,use strict。
下表总结了no capture文件中24个函数模块的序号,名称及其调用关系。该表格的阅读方式从左至右,序号后紧跟当前模块的民称,同一行的右边模块被左边模块调用。例如,启动模块2调用模块1/13/15/17/24, 模块13调用模块4/8/9/14/16/18/22/23,模块18调用模块7/8/12/23,模块7调用模块3。
现在,我们了解了no capture文件的总体架构,下一篇文章开始分析STABLE_ACTION中模块函数的调用方式。