2019-06-02

记录一次JS代码解密的过程

作者:administrator 所属分类 - 乱七八糟的玩意

之前有朋友将一段较难读懂的JS源码扔给我,让我试着解密这段JS源码。大致是一个网页只有一个JS,显示的全部内容均来自此JS。而这个JS被混淆了,非常难读懂,经过处理以后即可将这个JS解密。这里记录这个JS的解密过程。

坑爹的JS文件,简直是天书

咋一看很乱,不过我们的目标是解密这个JS文件,不能轻易放弃。于是开始着手分析。首先使用工具:NotePad++来打开这个文件,这个时候我们就能清晰的看见各括号以及函数之间的关系了。NotePad++当中可以跳转到匹配的括号,方便我们找到函数结尾。

对JS开发有一定经验的同学,肯定能一眼就看出来第一行是数据行,里面定义了一个数组,数组当中的就是数据。而第三行当中,_0x2138就是关键解密函数。我们可以类似这样来列出这些函数:console.log(_0x2138(0x1,'\x23\x56\x78\x70'));,可以看见一下子输出了一些该输出的内容。下面给出代码,别的类同。

console.log(_0x2138(0x1,'\x23\x56\x78\x70'));
console.log(_0x2138(0x2,'\x21\x4d\x6c\x59'));
_0x2138(0x3,'\x51\x50\x4b\x35');
_0x2138(0x4,'\x4a\x21\x72\x56');

剩余的函数也是逐层解密,可以自己写python脚本来解密出来这些函数。 这里实际上已经很清晰了,首先定义一个符号表,把所有符号保存起来,然后打乱符号表的顺序,在逻辑中使用函数获取实际符号。 这里给一个方法:

在NotePad++当中使用替换功能,搜索

([a-zA-Z0-9_()]+)['([a-zA-Z0-9_]+)']( 

替换为 $1.$2(

这时候源码架构会清晰很多,我们可以看见实际上是使用了js动态加载出来header以及body等等。并且附带了一些CSS样式的调整,这时候就可以还原出来原本的HTML页面了。

麦科技原创,转载请说明出处。

隐藏