2016新版淘宝UA算法文件功能框架的粗浅分析
目前新版淘宝UA算法所在的js文件从2016年4月上中旬开始,从61.js一直更新到当前的66.js,貌似一周一次的频率。每一次更新,其混淆代码的形式都在变化。由于个人反混淆的能力跟不上js文件的更新速度,本系列文章将以64.js为例来记录学习新版淘宝UA算法的一些粗浅认知。
声明:博主是一个js初学自学者,对于64.js这等高深的文件,只能以个人能获取的资料再加上“蒙猜”技能来理解。因此,本系列文章的说法会很不专业甚至会有错误,还请各位看官谨慎参考,若您对本系列文章的内容有不同的看法,欢迎留言讨论,非常感谢!
64.js原文件的下载链接http://af.alicdn.com/js/cj/64.js(该链接已失效),该文件反混淆之后的文件的下载链接 http://pan.baidu.com/s/1o8ep0r4 。本文记录64.js的函数结构及主要函数的功能概述。
64.js其他功能分析的参考链接如下:
模块化编程方案请参阅淘宝UA算法中exports应用技巧与算法执行流程。
window隐藏措施与事件驱动机制请参阅淘宝UA算法window隐藏技巧与事件驱动机制
UA来源信息加密方案请参阅淘宝UA算法UA来源信息加密方案浅析(201605)。
新版淘宝UA算法函数结构
64.js反混淆之前的函数结构图如下图所示,图中标注了3种主要的混淆方式,反混淆的思路可以参考《淘宝UA反混淆之常量替换(201605_64.js)》。反混淆之后的文件删除了混淆方式1的字符串,混淆方式2的大部分常量定义,混淆方式3暂时保留。
如下图所示,64.js的主要功能函数是!function(n){}()和该函数的15个函数组成的参数,后续简称该函数为主函数,下面概述主函数中这15个参数的功能。
新版淘宝UA算法主函数功能概述
主函数的15个参数按照其在文件中的顺序从0到14进行排序,除了0,11,13无输出量供外界调用外,其他函数均有输出变量或者函数供其他函数调用。各函数的输出量与大致功能如下图所示,后续会有文章针对重点函数单独讲解。
64.js与2015年10月的ua.js(参考《淘宝UA生成文件actionlog_js_ua.js学习笔记总结》)就UA的来源和去向相比较,我这个非专业人士的角度的观点如下:
1.参与生成UA的固定信息与前面文章中提到的信息差别不大,包含64.js文件加载时间;用户浏览器类型,版本,是否开启调试;用户操作系统,浏览器所在设备的分辨率,IP地址,访问页面等等信息。
2.更新UA的事件比ua.js多了触屏和陀螺仪的处理:touch,touchmove, deviceorientation。
3.UA值有三个去处:当前访问页面中ID为UA_InputId的元素值;UA_opt [“LogVal”]的值;定时或定量用Image回传访问日志log。