2012-01-17 15 views
5

Tôi đã tìm kiếm Google để chuyển đổi nhưng tôi không tìm thấy bất kỳ thứ gì. Có công cụ nào có sẵn hay tôi phải tạo một công cụ để giải mã mã JavaScript bị xáo trộn của tôi?Tôi cần một công cụ chuyển đổi cú pháp/deobfuscation Javascript

Tôi cho rằng có một công cụ như vậy nhưng tôi không tìm kiếm Google bằng từ khóa phù hợp. Mã dài 3 trang, đây là lý do tại sao tôi cần một công cụ.

Dưới đây là một dụ của mã:

<script>([][(![]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]()[(!![]+[])[!+[]+!+[]+!+[]]+(+(+[])+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+!+[]+[+[]]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]])(([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+ 

Cảm ơn bạn

+1

Điều gì xảy ra khi bạn đánh giá? – maerics

+0

Một phần của mã chuyển hướng người dùng đến Youtube. –

+0

Rất tiếc, tôi nghĩ bạn đang gặp rắc rối nếu đó là bản sao khả thi của bạn. – Jivings

Trả lời

1

Câu hỏi này đã là câu trả lời được chấp nhận, nhưng tôi vẫn sẽ đăng để xóa một số nội dung.

Khi ý tưởng này xuất hiện, một số người đã thực hiện generator để mã hóa JavaScript theo cách này. Nó dựa trên việc thực hiện []["sort"]["call"]()["eval"](/* big blob of code here */). Do đó, bạn có thể giải mã các kết quả của bộ mã hóa này một cách dễ dàng bằng cách xóa phần sắp xếp-gọi-eval (tức là 1628 byte đầu tiên). Trong trường hợp này nó tạo ra:

if (document.cookie=="6ffe613e2919f074e477a0a80f95d6a1"){ alert("bravo"); } 
else{ document.location="http://www.youtube.com/watch?v=oHg5SJYRHA0"; } 

(vui đủ các tác giả của mã này thậm chí còn không thể nén nó đúng cách và tiết kiệm rất kilobyte)

Ngoài ra còn có một lời giải thích về việc tại sao mã này không làm việc trong trình duyệt mới hơn nữa: Họ đã thay đổi Array.prototype.sort để nó không trả lại tham chiếu đến window. Theo tôi nhớ, đây là cách duy nhất để có được một tham chiếu đến window, do đó, mã này là loại bị hỏng ngay bây giờ.

4

Mã này là hấp dẫn bởi vì nó dường như sử dụng chỉ có chín nhân vật ("[]()!+,;" và không gian trống rỗng U+0020) nhưng có một số tinh vi chức năng. Dường như sử dụng chuyển đổi kiểu ẩn của JavaScript để ép buộc các mảng thành các kiểu nguyên thủy khác nhau và các biểu diễn chuỗi của chúng và sau đó sử dụng các ký tự từ các chuỗi đó để soạn các chuỗi khác.

Hãy xem xét đoạn mã sau đó đánh giá với array filter function:

([][ 
    (![]+[])[+[]]    // => "f" 
+ ([![]]+[][[]])[+!+[]+[+[]]] // => "i" 
+ (![]+[])[!+[]+!+[]]   // => "l" 
+ (!![]+[])[+[]]    // => "t" 
+ (!![]+[])[!+[]+!+[]+!+[]] // => "e" 
+ (!![]+[])[+!+[]]   // => "r" 
]) // => function filter() { /* native code */ } 

Tái mã như vậy là tốn nhiều thời gian và dễ bị lỗi, vì vậy một giải pháp tự động rõ ràng là mong muốn. Tuy nhiên, hành vi của mã này bị ràng buộc chặt chẽ đến thời gian chạy JavaScript mà không quan sát nó dường như yêu cầu một trình thông dịch JS để đánh giá mã.

Tôi chưa thể tìm thấy bất kỳ công cụ nào sẽ hoạt động chung với loại mã hóa này. Dường như bạn sẽ phải nghiên cứu thêm mã và xác định bất kỳ mẫu sử dụng nào (ví dụ như dựa vào các phương thức mảng) và tìm hiểu cách sử dụng chúng (ví dụ: bằng cách gói các hàm mức cao [chẳng hạn như Function.prototype.call ]) để theo dõi việc thực thi mã cho bạn.