taobao去验证码文件cookie处理模块浅析

       在我学习的这个版本的noCaptcha(去验证码)文件中,有1~24个功能模块,其中第3个模块处理了名为_uab_collina, _umdata的cookie。其中_umdata的cookie的cookie值会成为defaultopt的token值。

       本系列文章将以taobao的去验证码文件nc.js为主要学习对象,同时会涉及淘宝的login.html, 6x.js等相关文件,这些文件与64.js是同一时期抓取的,与目前最新的相关文件可能会略有差异,请各位看官知悉,nc.js的下载链接。去验证码文件(nc.js)模块化编程的浅析请参阅去验证码文件对javascript模块化编程的完美诠释

        cookie处理模块的函数结构简析

       下图是去验证码文件处理cookie的函数的缩略图,其中n.getNCToken函数在模块7中被调用,用于获取defaultopt的token值; getSecToken在nc.js中未被调用,通过chrome的控制台的过滤方法也暂未找到其调用之处。这里,我们将n.getNCToken = l 中的函数 l() 作为主要学习对象。

module3 in nc.js

      cookie处理模块的函数功能简析

      在函数 l() 中,根据变量u来决定函数的执行流程。u 用var定义,但并未赋值,因此函数 l() 中会执行u = s() || r()。由图中的注释可知,cookie处理模块的要点如下:

     1. 用localStorage.getItem(e)获取名称为”_umdata”的cookie值,若存在则返回该值;若不存在,则用o(e)的方式获取该cookie值并返回。

     这里插播一下用FireFox查看localStorage的方法:开启FireFox—>打开taobao.com,进入登录页面—>按下F12—>在控制台中输入localStorage,回车。

     如果曾经在火狐上登录过淘宝,应该就能看到以下界面,理论上而言,这里就可以获取到名称为”_umdata”的cookie值,函数o无需执行。

localstorage in firefox

      2. 若是在当前浏览器中第一次登录淘宝,那在localStorage应该是找不到“_umdata”的,因此需要执行函数o(e)。

      函数o(e)的功能:获取名称为e的cookie值并返回,查找优先级document.getElementById(“umFlash”).getCookie(e) > localStorage[e]) > document.cookie,我暂未理解安排这种优先级的原因。

      另外,在noCaptcha(去验证码)文件,并没有对localStorage[“_umdata”]和document.cookie的“_umdata”进行写入操作,那么在localStorage和document.cookie中第一次对该cookie写值是在哪里执行的呢?在um.js中似乎有对该cookie进行操作,但是这一点我还暂不能确认。

       3. window._sec_module.token处理函数r()

       函数r()的功能:判断window._sec_module.token是否已赋值,若已赋值,则返回该值;若未赋值,则将a()+_+c(3)赋值给window._sec_module.token并返回该值。这里的变量”_”与window.pointman有关,后续会专门有文章来讲解。这里我们先来看看函数c(e)和函数a()

      3.1 获取包含e个数值的随机数字符串的函数c(e)

      该函数代码如下,其相关的基础知识点有:

      * substring(start,stop):返回一个子字符串,从start到stop-1处的所有字符;
      * substring(start):从start到字符串结尾的字符;
      * substr(start,length):若start<0,则start=length+start; 若length<=0,则返回空;
      * substr(start):若length未指定,则从start到字符串的结尾;
      * Math.random:随机选取大于等于 0.0 且小于 1.0 的值,小数点后会有15~18个数值。

      3.2 获取名称为_uab_collina的cookie值的函数a()

      该函数代码如下,此函数也会先通过函数o来查找名称为_uab_collina的cookie值;若找不到则用变量_和函数c生成的11位随机数来组成cookie值的一部分并返回。

   函数a()中调用了函数i(e, t, n),该函数会对相应cookie和值用document.cookie进行写入操作。

      4. firefox查看cookie的方法

      firefox查看cookie的方法如下:工具–>选项–>隐私–>移除单个cookie,在搜索中输入taobao,我们会看到如下界面:

cookie_umdata

       在域名login.taobao.com下包含nc.js文件中操作的两个cookie:“_umdata”和”_uab_collina“,这里令人疑惑的是:为什么会有两个“_umdata”?若有高手愿意解惑,博主将不甚感激,谢谢!

Comments

  1. By 撒旦法

    回复

    • By livezingy

      回复

  2. By ultraninja

    回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Fork me on GitHub