2012-01-28 26 views
5

Tôi đã xem mã này trong tệp .js. Mã này là gì ??Giải mã Javascript lạ này

Tôi đã tải tệp đó xuống máy chủ web cục bộ của mình.Kiểm tra mã này trong tệp .js chuyển hướng tôi đến google.com và khi tôi nhận xét mã này, trang chạy hoàn hảo !!

Tôi có thể hiểu rằng việc này được thực hiện để thực thi rằng trang sẽ chỉ được thực thi từ liên kết máy chủ !!!

Làm cách nào tôi có thể giải mã js này ???

[]['\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'))() 

Trả lời

16

Python xảy ra để sử dụng cùng một cách mã hóa, vì vậy tôi chỉ cần ném nó vào một vỏ 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')" 

Vì vậy, mã này sôi xuống (thêm khoảng trắng cho rõ ràng):

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

Vậy điều này thực sự làm? Node.js để giải cứu:

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

Vì vậy [] chỉ đơn giản là một mảng trống rỗng, [].constructor cho chúng ta các nhà xây dựng mảng (mà là một đối tượng Function), và cuối cùng, [].constructor.constructor cho chúng ta constructor của đối tượng Function. Người xây dựng đó chấp nhận một chuỗi chứa một số mã, và biến nó thành một hàm có thể gọi được, sau đó được gọi (chú ý đến số () ở cuối cùng). Vì vậy, điều này cuối cùng chỉ thực hiện mã này:

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

Vâng, nếu tôi đã viết mã như thế, tôi cũng sẽ làm cho nó bị xáo trộn! ;)

+1

+1 Giải thích tốt :) – fozylet

+0

giải thích ngắn gọn và rõ ràng ... cảm ơn! chấp nhận !!! – Sandy505

+0

@Thomas làm thế nào tôi có thể mã hóa mã javascript bình thường sang định dạng mã hóa này ?? – Sandy505

3

Nó được mã hóa hai lần, đầu tiên là% nn ký tự kiểu URL, sau đó là ký tự chuỗi \ xnn. Nó giải mã thành

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

Lưu ý rằng dấu ngoặc kép không còn hoạt động đúng cách sau khi giải mã và ['unescape'] đã được thực hiện.

5

Hãy thử này ...

<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> 

Câu trả lời, như đã chỉ ra, là ...

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

tôi tìm thấy mã này trong khi tải một trong những mẫu từ Template Monster. com. Tôi đã thử từng bước nhưng tôi không làm cho trang web đó có sẵn trên máy chủ cục bộ/của riêng tôi. Sau đó tôi nghĩ rằng nó có thể là một số JS nếu không flash.

đã cố gắng xóa từng js Một lần khác và sau đó thấy rằng họ dán mã này ở cuối tệp của họ để không cho phép bạn tải xuống các trang. :)

để hiểu mã tôi đã tìm kiếm trên Google và tìm thấy chuỗi này. Bài viết Gr8.

vui vẻ ngay bây giờ! Giờ tôi là một cái bánh.:)

Các mã họ dán là:

[] [ '\ X63 \ x6f \ x6e \ x73 \ x74 \ x72 \ X75 \ X63 \ x74 \ x6f \ x72'] '\ X63 \ x6f \ x6e \ x73 \ x74 \ x72 \ X75 \ X63 \ x74 \ x6f \ x72'()

và trong jquery^version.js

0

tôi sẽ đề nghị sử dụng lần sau này URL DECODE Bạn có thể dễ dàng giải mã chuỗi đó.

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

Đó là cách để ẩn mã và kiểm tra xem tập lệnh có đang chạy trên miền cụ thể hay không. nếu không chuyển hướng nó ở đâu đó. trong trường hợp này google.com

0

Tệp js bạn đang nói đến là một đoạn mã js mà http://templates.entheosweb.com/ sử dụng để bảo mật các tập lệnh web và chủ đề của nó khỏi bị đánh cắp khỏi trang web của họ. Bất cứ nơi nào bạn có tập tin đó có nghĩa là chủ đề hoặc các tập tin mà nó đã được đưa vào đã bị đánh cắp từ trang web đó.

0

nó xảy ra khi bạn sao chép/dán hoặc lưu file như mẫu từ template-help.com

chỉ đơn giản là xóa phần để chạy một cách hoàn hảo. Nếu chúng tôi giải mã mã, nó trông giống như thế này -

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

Vì vậy, hãy xóa nó để thưởng thức.

Các vấn đề liên quan