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

       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.js文件对于我而言一直是神一般的存在,近期心存敬畏的学习了这个文件。从本文开始,我将记录一系列在学习过程中的粗识浅见,本文记录ua.js混淆编程的形式和执行主流程,欢迎围观。可惜在淘宝最新版本中登录时已经找不到这个文件了,但是UA还在,类似的功能应该也还在。

       ua文件的第一道障碍就是各种混淆编程,我学习的actionlog_js_ua.js文件是2015.10.30抓取的文件,感兴趣的同学可以到这里下载。我曾经在乌云上看到某位高手说可以用正则来将该混淆文件清晰化。这着实让我崇拜不已,可是作为菜鸟,我都是纯手工操作,程序看到哪里,就反混淆到哪里。方法也是极其低端,新建一个html文件,让其执行混淆的js代码并将结果输出。

       切入正题,下面让我们来初步见识一下ua.js文件的混淆编程的类型,再来看看actionlog_js_ua.js中主动执行的函数,我习惯称之为该文件的主流程。

       1.ua.js混淆编程类型

       1.1 常数写成复杂计算式

       以ua.js中函数l5为例,用计算式(0x3fe
* 0466 & 79) + 6
来替代10,用(0x7
* 015 + 8) + ((0x3fe | 0475) % 73)
替代100。纵观文件的全局,存在大量类似的处理。

         1.2 多个变量来表示同一个对象函数

         在ua.js文件中,upc/ere/or/w/vx等等变量均等表示window对象;jj/eb/k1/m2等等变量均指向同一个函数eb,eb函数形式如下,该函数也将大量的常数写成计算式。该函数可以根据传入的参数将混乱的字符串还原为我们能看懂的函数名,该函数的调用在ua.js文件中处处可见,承担着大量的混淆代码的任务。

        1.3 混乱常用函数名

       在以上代码中,看到第一行,我无论如何也想不到它等同于l6 = navigator[“userAgent”] || navigator[“platform”]; 好奇的同学可以验证一下。这就是上面提到的eb函数混淆的效果,ua.s文件中,有80%以上的函数名均由该函数来混淆。

       除了上述三点外,ua.js文件中还有各种各样的混淆视听的方式,例如所有的函数名都是没有实际意义的,例如设置一些永远都不会执行的代码,该文件中updateUA代码是不会执行的。

        2. actionlog_js_ua.js执行主流程

        在ua.js文件中,会主动执行的代码除了定义各类变量之外,还有函数jwhshp6

        jwhs函数旨在实现不依赖jquery,在DOM加载完成后执行指定函数,反混淆后其代码如下:

        hp6在文件最后被调用,其调用部分代码如下:

       作为ua.js文件的主动执行函数,hp6函数肩负重担,负责实现如下功能:从当前网页中获取信息,为mousedown, keydown, mousemove, blur, focus, load, beforeunload, unload,reload事件分配自定义的处理函数,将load处理函数添加到jwhs中作为DOM加载完成后执行的函数等等功能。其反混淆后的代码如下,其中配有部分注释。

Comments

  1. By summer

    回复

  2. By hhh

    回复

发表评论

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

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

Fork me on GitHub