解码这个奇怪的Javascript

Decode this strange Javascript

本文关键字:Javascript 解码      更新时间:2023-09-26

我在一个.js文件中发现了这段代码。这个代码是什么??

我已将该文件下载到本地主机Web服务器上。将这些代码保存在.js文件中会将我重定向到google.com,当我评论这些代码时,页面会完美运行!!

我可以理解,这样做是为了强制页面只能从服务器链接执行!!!

我如何解码这个js???

[][''x63'x6f'x6e'x73'x74'x72'x75'x63'x74'x6f'x72'][''x63'x6f'x6e'x73'x74'x72'x75'x63'x74'x6f'x72'](self[''x75'x6e'x65'x73'x63'x61'x70'x65']('%69%66%28%7e%6c%6f%63%61%74%69%6f%6e%2e%70%72%6f%74%6f%63%6f%6c%2e%69%6e%64%65%78%4f%66%28%27%68%74%74%70%3a%27%29%26%26%7e%6c%6f%63%61%74%69%6f%6e%2e%68%6f%73%74%2e%69%6e%64%65%78%4f%66%28%27%74%65%6d%70%6c%61%74%65%2d%68%65%6c%70%2e%63%6f%6d%27%29%29%7b%7d%65%6c%73%65%28%6c%6f%63%61%74%69%6f%6e%2e%68%72%65%66%3d%27%68%74%74%70%3a%2f%2f%77%77%77%2e%67%6f%6f%67%6c%65%2e%63%6f%6d%27%29'))()

Python恰好使用了相同的编码方式,所以我只是把它扔到了Python外壳上。

>>> ''x63'x6f'x6e'x73'x74'x72'x75'x63'x74'x6f'x72'
'constructor'
>>> ''x75'x6e'x65'x73'x63'x61'x70'x65'
'unescape'
>>> import urllib
>>> urllib.unquote('%69%66%28%7e%6c%6f%63%61%74%69%6f%6e%2e%70%72%6f%74%6f%63%6f%6c%2e%69%6e%64%65%78%4f%66%28%27%68%74%74%70%3a%27%29%26%26%7e%6c%6f%63%61%74%69%6f%6e%2e%68%6f%73%74%2e%69%6e%64%65%78%4f%66%28%27%74%65%6d%70%6c%61%74%65%2d%68%65%6c%70%2e%63%6f%6d%27%29%29%7b%7d%65%6c%73%65%28%6c%6f%63%61%74%69%6f%6e%2e%68%72%65%66%3d%27%68%74%74%70%3a%2f%2f%77%77%77%2e%67%6f%6f%67%6c%65%2e%63%6f%6d%27%29')
"if(~location.protocol.indexOf('http:')&&~location.host.indexOf('template-help.com')){}else(location.href='http://www.google.com')"

因此,这段代码可以归结为(为了清晰起见,添加了空格):

[]['constructor']['constructor'](
  "if (~location.protocol.indexOf('http:') &&
       ~location.host.indexOf('template-help.com'))
     {}
   else
     (location.href='http://www.google.com')")()

那么这个到底做了什么?Node.js拯救:

> [].constructor
[Function: Array]
> [].constructor.constructor
[Function: Function]
> 

因此,[]只是一个空数组,[].constructor给了我们数组构造函数(它是一个Function对象),最后,[].constructor.constructor给了我们Function对象的构造函数。该构造函数接受一个包含一些代码的字符串,并将其转换为一个可调用的函数,然后调用该函数(注意最后的())。因此,它最终只执行以下代码:

if (~location.protocol.indexOf('http:') &&
    ~location.host.indexOf('template-help.com'))
  {}
else
  (location.href='http://www.google.com')

是的,如果我写这样的代码,我也会混淆它!)

试试这个。。。

<html>
<head>
<script type="text/javascript">
var a="[][''x63'x6f'x6e'x73'x74'x72'x75'x63'x74'x6f'x72'][''x63'x6f'x6e'x73'x74'x72'x75'x63'x74'x6f'x72'](self[''x75'x6e'x65'x73'x63'x61'x70'x65'](" + unescape('%69%66%28%7e%6c%6f%63%61%74%69%6f%6e%2e%70%72%6f%74%6f%63%6f%6c%2e%69%6e%64%65%78%4f%66%28%27%68%74%74%70%3a%27%29%26%26%7e%6c%6f%63%61%74%69%6f%6e%2e%68%6f%73%74%2e%69%6e%64%65%78%4f%66%28%27%74%65%6d%70%6c%61%74%65%2d%68%65%6c%70%2e%63%6f%6d%27%29%29%7b%7d%65%6c%73%65%28%6c%6f%63%61%74%69%6f%6e%2e%68%72%65%66%3d%27%68%74%74%70%3a%2f%2f%77%77%77%2e%67%6f%6f%67%6c%65%2e%63%6f%6d%27%29') + "))()";
</script>
</head>
<body>
<input type=button value=click onclick="javascript:alert(a);">
</body>
</html>

正如已经指出的那样,答案是…

[]['constructor']['constructor'](self['unescape'](if(~location.protocol.indexOf('http:')&&~location.host.indexOf('template-help.com')){}else(location.href='http://www.google.com')))()

它是双重编码的,首先是%nn URL样式的字符,然后是''xnn字符串字符。它解码为

[]['constructor']['constructor'](
  self['unescape']('
    if(~location.protocol.indexOf('http:')&&~location.host.indexOf('template-help.com')){}
    else(location.href='http://www.google.com')
  '))()

请注意,引号在解码后不再正确嵌套,并且['unescape']已经完成。

您所说的js文件是一段js代码http://templates.entheosweb.com/用于保护其网站脚本和主题不被窃取。无论你在哪里得到该文件,都意味着它所包含的主题或文件是从该网站被盗的。

我在从templatemaster.com下载其中一个模板时发现了这段代码。我尝试了每一步,但我没有在本地/自己的服务器上使用该网站。然后我想,如果不是flash的话,它可能是一些JS。

尝试一个接一个地删除每个js,然后发现他们把这些代码粘贴在文件的最后一个,不让你下载页面。:)

为了理解代码,我在谷歌上搜索了一下,找到了这个帖子。Gr8文章。

现在快乐!我现在是个疯子

他们粘贴的代码是:

[]['''x63''x6f''x6e''x73''x74''x72''x75''x63'' x74''x6f'' x72']'''x63 ''x6f''x6e''x73'' x72''x75 ''x63''x74''x6f''fx72'()

并且在jquery ^ version.js 中

我建议下次使用这个URL DECODE你可以很容易地解码那个字符串。

if(~location.protocol.indexOf('http:')&&~location.host.indexOf('template-help.com')){}else(location.href='http://www.google.com')

这是一种隐藏代码并检查脚本是否在特定域上运行的方法。如果不重定向到某个地方。在这种情况下,google.com

一旦您从template-help.com 复制/粘贴或保存为模板文件,就会发生这种情况

只需删除该部分即可完美运行。如果我们解码代码,它看起来像这样-

    []['constructor']['constructor'](
  "if (~location.protocol.indexOf('http:') &&
       ~location.host.indexOf('template-help.com'))
     {}
   else
     (location.href='http://www.google.com')")()

所以删除它并享受吧。