JS eval加密的代码如何解密?

关键字:eval解密、eval还原、eval逆向
JS的eval加密方法,很古老,也很常见。其解密方法,也非常简单。

类似于下面这样的JS加密代码,相信很多人都见到过:

很多朋友以为这段js代码是“加密”的,其实这甚至谈不上是真正的加密,只能算是一种编码(Encode)。类似于base64这样的编码,都是可以以一定方式还原的,当然也就是js解密了。

分析这一段js加密代码,可发现代码开头都是eval,特征字符串是function(p,a,c,k,e,r)或者是function(p,a,c,k,e,d)

解密原理很简单,回顾一下JavaScript脚本中eval含义及用法:检查JS代码并执行。

必选项codestring参数是包含有效JS代码的字符串值。这个字符串将由JS分析器进行分析和执行。

既然eval执行的字符串是参数,那么function(p,a,c,k,e,r)函数肯定返回的是字符串,就是我们要解密的js源代码,其实function(p,a,c,k,e,r)相当于是个自解码函数,返回的就是解密好的js源代码,然后传递给eval,那么这段解码后的字符串脚本就执行了。

那么,替换eval函数就可以了,比如替换成alert或者document.write,或console.log,明文代码就显示出来了?就完成解密了。就是如此简单

把上面的代码中eval,替换成console.log,即可完成eval解密,代码如下:

解密得到的JS代码:

因此可见,eval加密看起来像回事,实际上,只需简单的替换就解密了,实在称不上加密。

如果实际的工作中遇到需要对JS代码进行加密,还需使用如JShaman之类的专业JS代码混淆加密工具,才能真正保护代码安全。