解码这个奇怪的Javascript

时间:2012-01-28 13:46:44

标签: javascript security decode

我在.js文件中遇到过这段代码。这段代码是什么?

我已将该文件下载到我的localhost网络服务器上。将此代码保存到.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'))()

7 个答案:

答案 0 :(得分:16)

Python碰巧使用相同的编码方式,所以我只是把它扔在Python shell上。

>>> '\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')

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

答案 1 :(得分:5)

试试这个......

<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')))()

答案 2 :(得分:2)

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

答案 3 :(得分:0)

我从templatemonster.com下载其中一个模板时发现了这段代码。 我尝试了每一步,但我没有在我的本地/自己的服务器上制作该网站availbale。然后我认为它可能是一些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

答案 4 :(得分:0)

我建议下次使用URL DECODE 您可以轻松解码该字符串。

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

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

答案 5 :(得分:0)

你正在谈论的那个js文件是http://templates.entheosweb.com/用来确保它的网页脚本和主题不被从网站上窃取的js代码。无论你拿到那个文件,都意味着它所包含的主题或文件是从该网站上偷来的。

答案 6 :(得分:0)

一旦您从template-help.com

复制/粘贴或保存为模板文件,就会发生这种情况

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

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

所以删除它享受。