解码这个奇怪的Javascript
Decode this strange Javascript
我在一个.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')")()
所以删除它并享受吧。
- 有没有一种方法可以在没有文档或jQuery的情况下使用javascript解码html实体
- php中javascript解码中的base64编码
- 用Ruby/Javascript解码带引号的可打印字符串
- JavaScript-解码URI以呈现为HTML
- JavaScript:解码 PHP json_encode响应
- 简单的Javascript解码
- 使用javascript解码unicode字符串,不使用JSON
- 用PHP从Javascript解码Json字符串
- 如何使用JavaScript解码JPEG2000位数组图像
- 用javascript解码url字符串
- 使用javascript解码url中的重音字母
- 使用JavaScript解码图像
- 用JavaScript解码字符串中的混合ASCII代码
- 使用JavaScript解码PKCS12文件并从中获得加密私钥的最佳方法
- Javascript解码JSON字符串,其中包含一个编码字符串
- 使用Javascript解码PHP编码的JSON对象
- 用javascript解码转义的西里尔字母
- 如何使用AngularJS或JavaScript解码URL参数
- 如何用javascript解码URI
- 用Javascript解码Google Oauth2访问令牌