ua.js中UA生成函数vq4的“庐山真面目”

       actionlog_js_ua.js混淆编程形式与执行主流程

       ua.js中UA_Opt设定信息的重要性与来源分析

       ua.js文件load事件自定义处理函数功能解析

       ua.js中mousedown和mousemove事件自定义函数功能解析

       ua.js文件focus&blur&keydown事件分析

       ua.js中UA生成函数vq4的“庐山真面目”

       ua.js中网络超时检测函数 wql 功能分析

       ua.js中用 image 对象实现页面访问统计

       ua.js中JSocket.getlso和JSocket.setlso代码分析

       ua.js中arguments.callee.caller的应用

       ua.js 获取访客浏览器与操作系统信息的方式

      前面几篇文章主要介绍了参与生成UA的信息与事件类型,有关注此系列文章的同学们会发现每一种信息或事件处理处理完成后,都会将相关信息作为参数传递给函数vq4并调用vq4。没错,vq4就是ua.js中生成UA的函数,本文分析该函数生成UA的原理。

       vq4函数主体部分的执行条件是zv=true,load函数必须已执行,其主要作用是根据当前事件信息生成并更新UA值,并将更新后的UA赋给网页中IDUA_InputId的元素和UA_opt [“LogVal”]。我们先给出vq4经过反混淆与简化之后的代码,然后根据该函数的执行流程来逐步解析该UA生成函数。

       1. 调用函数m2x

        在获取到当前调用vq4的函数名之后,先用ovh对函数名进行加密,然后调用函数m2x。在函数m2x中出现一个变量名为uv5,该变量与函数su息息相关,后续会进一步说明,这里我们先认为uv5中存储的是函数名,这些函数均与UA相关,从DOM加载完成开始,按执行顺序依次存储。

       了解这一点之后,我们就能明白m2x函数的作用:判断vq4当前的调用者是否已经存储在uv5中,若已存储,则do nothing并返回true;若不存在,则调用函数f1,并返回false。但是,从ua.js文件全局来看,vq4su函数全部是成对出现,且su均在vq4之前执行,因此vq4的调用函数必定存在于uv5中。所以如果我没有理解错误的话,f1函数是不会执行的,也就是说执行的函数名不会参与生成UA。

       后面我们在讲述su函数时,会提到调用f1时是一个异常现象,函数f1会用当前vq4的调用函数名去参与更新UA,然后会调用异常处理函数gby()。

       2.将vq4传入的参数依次存入数组nwh

       3.调用函数u69

       针对不同的事件,函数vq4参数数组的第一个元素均是一个唯一的编号。函数u69用该唯一编号与参数的长度计算出一个特征值存储在全局变量ab5中。

       4.将存储参数的数组nwh存入全局变量xu

       5.有条件调用函数wsa

       wsa将当前事件按一定规则加密后赋值给IDUA_InputId的元素,事件信息加密分为两部分:假定N为当前UA_InputId值中“|”的数量,ad9为当前参与更新的信息,加密一:str1 = lbet(ad9, N + 1);加密二:str2 = lbet(ab5, N + 2)由代码可知,IDUA_InputId元素的值每一次更新都会将上一次更新信息的str2剔除后再添加本次更新信息的值。这样我就又有个疑问了:ua.js什么时候开始执行呢?应该是淘宝登录页面加载完成的时候吧。那么密码输错几次登录时UA字串应该会比密码一次输入成功的要长很多吧?

        6. 有条件调用函数kx

       这里会调用函数c5k记录页面访问统计信息,后续会深入说明函数c5k。

        7. 有条件调用函数sj82

        函数sj82其实什么都没做。

        8. 有条件调用函数xy

        函数xy与函数wsa的功能类似,将事件信息加密后用于生成和更新UA,更新的原则与wsa相同。只是xy函数将生成的UA赋值给UA_opt [“LogVal”]。

发表回复

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

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

Fork me on GitHub