问题描述
准备工作
首先将浏览器设置为禁止 js 加载的模式:
我们再次去请求相关的网站的时候就看不到 js 动态加载之后内容了。
正向推理
对于 script 里面的代码,第一段是一个 eval 函数的调用。 第二行是一大段的代码,先将第一段的代码复制出来,在控制台将 eval 替换为 console.log 即可。
我们将运行的结果复制下来:
var dynamicurl="/WZWSREL2dvdXRvbmdqaWFvbGl1LzExMzQ1Ni8xMTM0NjkvMTEwNDAvaW5kZXgxLmh0bWw=";
var wzwsquestion="{H0Od9evT@es_";
var wzwsfactor="5967";
var wzwsmethod="WZWS_METHOD";
var wzwsparams="WZWS_PARAMS";
看起来是在 js 中定义的几个变量。
我们对第二段代码做一个 js 的美化,
查找一下 js 美化的网站:
随便选择一个,将第二段代码复制进去:将格式化后的代码保存在一个全新的 js 文件中:
先看其中的 var _0x56ae … ,定义了一个函数,不难发现,这个函数在整个代码中有极多次被调用的经历。
这其实是一个还原字符串的函数。 具体的实现先不管,我们只要知道可以调用它实现一定的功能即可。
怎样验证呢?就是将这个函数复制到 控制台上,我们就在 js 的环境中定义了这样的一个还原函数。
试着调用一下:
报错说 某个变量没有定义。 全局搜索这个变量,发现是一个定义的全部变量数组:
我们将这个数组也放在 js 环境中:
再次执行就拿到了转换之后的字符串:
在整个 js 代码中搜索并且函数转换为相应的结果字符串。
过程比较繁琐,我是一一搜索替换的。替换完成后,整个的结构就清晰很多了。 然后我们从底部开始看最终被调用的一个函数:
该函数首先定义了一个映射,我们将其复制到控制台。 变量非常地不能见名知意,但是基本意思都很明确。 例如, 第一个键值对是将 传入的某个函数执行; 第二个是将第二个参数传入第一个函数参数中运行…
那么将 var _0xb14971 = _0x532424’hwQpj’;
翻译过来就是执行: _0x344cd4()全局搜索找个这个函数定义:
没有输入参数,将其复制到控制台进行运行:
报了一个 wzwsquestion is not defined. 全局搜索 wzwsquestion是我们运行第一段 js 代码得到的一个结果变量:
将其加入控制台 js 运行环境中再次执行:
还是少一个变量,继续加入:
执行成功:
那么我们就可以对相应的位置进行替换了:
接下来我们继续, var _0x10ace8 = _0x532424’lYfvS’ 翻译过来就是:
_0x412a72(“WZWS_CONFIRM_PREFIX_LABEL7014930”)… (剩下的流程省略掉 )
最后,我们得到了:
然后我们回到最初,拿到初始请求之后的第二个重定向请求:
对比一下基本上是一致的,我们也可以就此推测 window[‘location’] 就是在做一个重定向。
接下来我们就可以反向去推导 js 了 。
更新时间: 2020-01-18