解码这个奇怪的Javascript

解码这个奇怪的Javascript,javascript,security,decode,Javascript,Security,Decode,我在一个.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

我在一个.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'))()

它是双重编码的,首先是%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']
已经完成。

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')"
因此,这段代码可以归结为(为清晰起见添加空格):

那么这到底是做什么的呢?Node.js用于救援:

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

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>

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

尝试一个接一个地删除每个js,然后发现他们将此代码粘贴到文件的最后一个位置,不允许您下载页面。:)

为了理解代码,我在谷歌上搜索并找到了这个线程。Gr8文章

现在快乐!我现在是个骗子了。:)

他们粘贴的代码是:

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


在jquery^version.js中,我建议下次使用它 你可以很容易地解码这个字符串

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

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

您所说的js文件是一段js代码,用于保护其web脚本和主题不被从其网站上窃取。无论您在何处获得该文件,都意味着其包含的主题或文件从该网站被盗。

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

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

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

所以删除它,享受它

@Thomas我怎样才能将普通javascript代码编码成这种编码格式?没有意义。如您所见,它不会阻止任何人阅读它:)
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')")()