2009-09-07 15 views
17

Câu hỏi này là hoàn toàn ngược lại của Which Javascript minifier (cruncher) does the same things that the one Google uses for its JS APIs?Có điều gì như một trình khử độc tố javascript (deobfuscator) không?

Tôi muốn học cách google nào nó tải vì vậy tôi có thể xây dựng riêng của tôi với bộ công cụ JS không phổ biến.

+0

Tôi chỉ thấy rằng tôi không tìm kiếm "unminify" http://stackoverflow.com/questions/822119/online-tool-to-unminify-decompress-javascript, mặc dù tôi vẫn cho rằng đây là hợp lệ vì không phải của câu trả lời hoạt động để "hoàn tác đổi tên biến" –

+1

Bạn đang sử dụng cụm từ sai trong câu hỏi của mình. Những gì bạn đang thực sự quan tâm đến đảo ngược "obfuscation" (định danh đổi tên). Bạn đã nhận được một loạt các câu trả lời đúng cho câu hỏi của bạn nhưng không phải cho mục đích tìm kiếm của bạn. –

+1

"maxifier", shurely – skaffman

Trả lời

30

Hãy thử điều này: JS Beautifier

+2

Đây là chỉ là một trình định dạng mã, rất giỏi nhưng không phải thứ tôi tìm kiếm ở đây. –

+0

Nó không chỉ định dạng mã youy, nó phải làm điều "deminifier" .. bạn đã thử thực sự? – yoda

+2

@Yoda: Làm thế nào nó có thể hoạt động? Dường như không biết gì về số nhận dạng. –

0

Xem chúng tôi SD ECMAScript Formatter cho một công cụ độc đáo sẽ định dạng mã.

EDIT: Nếu bạn muốn đảo ngược quá trình đổi tên, bạn cần một cái gì đó có thể đổi tên các tên bị xáo trộn trở lại bản gốc.

Công cụ này về mặt kỹ thuật có thể thực hiện điều đó: SD Thicket ECMAScript Obfuscator.

Làm như vậy bằng cách áp dụng bản đồ đổi tên mà bạn có quyền kiểm soát chính xác. Thông thường bạn ngầm xây dựng một bản đồ như vậy trong quá trình làm xáo trộn bằng cách chọn tên để làm xáo trộn và cái gì để bảo tồn, và obfuscator áp dụng bản đồ đó để tạo ra mã obfuscated.

Bộ đệm biểu đồ tạo ra bản đồ này là tác dụng phụ khi bạn làm xáo trộn dưới dạng bản chất của một bộ cặp (tên gốc, tên obfuscated) để tham khảo và gỡ lỗi.

Yếu tố trao đổi cung cấp bản đồ (tên obfuscated, tên gốc). Bản đồ đảo ngược đó có thể được áp dụng bởi Thicket để khôi phục mã với tên gốc, từ mã bị xáo trộn. Và obfuscator Thicket bao gồm Formatter để cho bạn làm cho nó trông đẹp hơn nữa.

Bắt để "đảo chiều giảm thiểu" (khi bạn đặt nó kém, bạn đang cố gắng đảo ngược sự xáo trộn), là bạn cần bản đồ. Vì mọi người làm obfuscation không cho đi bản đồ, bạn, như là một người nhận mã obfuscated, không có gì để áp dụng. Một tên cướp biển có thể sẽ phải xây dựng lại bản đồ có lẽ do kỹ thuật đảo ngược đau đớn.

Quy trình "đảo ngược" cũng không thể khôi phục nhận xét. Chúng biến mất vĩnh viễn.

Đây là tất cả theo thiết kế, do đó, câu hỏi thực sự là lý do tại sao bạn đang tìm cách đảo ngược sự xáo trộn?

+0

giống như các trình định dạng mã khác thực sự. –

+0

@Jorge: đó là vì câu hỏi ban đầu của bạn đã sử dụng sai cụm từ "minification" khi bạn có nghĩa là "obfuscation".Tôi đã mở rộng câu trả lời để cho bạn biết chính xác làm thế nào để đảo ngược quá trình obfuscation đến mức có thể. Các công cụ sẽ làm điều đó nếu bạn có dữ liệu phù hợp. Bạn không có dữ liệu đó. –

+0

Đây không phải là một deobfuscator quá. Nó chỉ ánh xạ các tên của identifer và các bản in đẹp. – artificialidiot

16

Uhhh, sẽ không thể khôi phục tên biến trừ khi có một ánh xạ được rút gọn -> tên biến ban đầu có sẵn. Nếu không, tôi nghĩ rằng các tác giả của công cụ đó có thể giành được giải thưởng Randi cho những kỳ tích tâm linh.

+1

Tất nhiên bạn sẽ không thể lấy lại tên gốc. Nhưng nếu ít nhất bạn có thể tìm được tên tốt hơn, bạn có thể tìm và thay thế, nói cách khác, công cụ sẽ biết cú pháp JS và thay thế biến a bằng method_named_a nhưng sẽ không thay thế nó bằng ba() vì sẽ tạo ra lỗi cú pháp –

+4

rằng các bộ làm đẹp không "hoàn tác việc đổi tên biến", ngụ ý bạn muốn các ký hiệu ban đầu trở lại. – patros

2

Bạn sẽ không thể tạo lại tên phương thức hoặc tên biến. Điều tốt nhất bạn có thể hy vọng là một trình tạo mã JS đơn giản (như những gì đã đề cập trước đó), và sau đó đi qua phương thức tệp theo phương thức, từng dòng một, làm việc ra từng phần.

Có lẽ sử dụng một công cụ tốt refactoring JS sẽ làm cho dễ dàng hơn này là tốt (có thể đổi tên các phương pháp/tài liệu)

+1

Ok điều này có vẻ như một dẫn tốt hơn, do đó, đó là một công cụ khúc xạ JS tốt? –

+1

Intellij IDEA có thể thực hiện đổi tên phương thức/biến trên các tệp Javascript. Apparantly CodeRush/Refactor Pro sẽ làm tương tự trong Visual Studio – Matthew

1

Bạn có thể sử dụng tính năng \b (từ ranh giới) trong biểu thức thông thường để tìm đơn chữ tên biến trong một tập tin.

for i in "abcdefghij..z"; do 
    sed -i "s/\b$i\b/$(random /usr/share/dict/words)/g" somefile.js 
done 

Bạn cũng có thể sử dụng giá trị này theo cách tương tự như :%s/\<a\>/truesaiyanpower/g.

11

Hãy thử http://www.jsnice.org/

Tôi chỉ cần stumbled trên nó và nó là rất tốt. Nó mở rộng mã. Nó có đổi tên biến đổi thống kê. Ví dụ, nếu bạn có mã này:

var g = f.originalEvent.targetTouches[0]; 

Sau đó, nó nó quay mã của bạn vào:

var touches = event.originalEvent.targetTouches[0]; 

đoán Khá tốt, hình như.

Hóa này:

d.slide.hasClass("selected") ? (e.onSlideOpen.call(d.prev.children("div")[0]), q ? (e.rtl && d.slide.position().left > i.w/2 || d.slide.position().left < i.w/2) && h.animateSlide.call(d) : t && d.index ? (h.animateGroup(d, !0), h.fitToContent(d.prev)) : d.slide.position().top < i.h/2 && h.animateSlide.call(d)) : (setTimeout(function() { e.onSlideOpen.call(d.slide.children("div")[0]) }, e.slideSpeed), h.animateGroup(d), t && h.fitToContent(d.slide)), e.autoPlay && (f.stop(), f.play(l.index(j.filter(".selected")))) 

Into này:

if (e.slide.hasClass("selected")) { 
    settings.onSlideOpen.call(e.prev.children("div")[0]); 
    if (val) { 
     if (settings.rtl && e.slide.position().left > box.w/2 || e.slide.position().left < box.w/2) { 
     self.animateSlide.call(e); 
     } 
    } else { 
     if (isMac && e.index) { 
     self.animateGroup(e, true); 
     self.fitToContent(e.prev); 
     } else { 
     if (e.slide.position().top < box.h/2) { 
      self.animateSlide.call(e); 
     } 
     } 
    } 
    } else { 
    setTimeout(function() { 
     settings.onSlideOpen.call(e.slide.children("div")[0]); 
    }, settings.slideSpeed); 
    self.animateGroup(e); 
    if (isMac) { 
     self.fitToContent(e.slide); 
    } 
    } 
    if (settings.autoPlay) { 
    node.stop(); 
    node.play(tabs.index(options.filter(".selected"))); 
    } 

Một thư viện tôi đang làm việc trên có một vài lỗi, và sau khi trải qua giờ cố gắng để giải mã các mã, việc tìm kiếm này sẽ giúp tôi tiết kiệm thời gian.

Nghiêm túc, công cụ này sẽ lau sàn bằng JS Beautifier.

+2

Rất đẹp. Tự động phát hiện loại quá. Ba năm sau khi nhận xét này, điều này vẫn trông giống như de-minimizer tốt nhất. –

-1

Trình chỉnh sửa Javascript và Trình che khuất Javascript là hai điều khác nhau.

Bộ chỉnh sửa - xóa nhận xét, khoảng trống và dòng mới không cần thiết khỏi chương trình.

Obfuscator - thực hiện sửa đổi chương trình, thay đổi tên biến, chức năng và thành viên, làm cho chương trình khó hiểu hơn nhiều. Một số obfuscators là khá tích cực trong sửa đổi của họ để mã.

Điều này Javascript Obfuscator sẽ làm xáo trộn mã của bạn.

Nếu bạn muốn giải mã mã của mình, hãy thử Javascript Beautifier. Nó sẽ deobfuscate nếu obfuscation được tìm thấy và sau đó làm đẹp mã.

+0

bộ lọc cũng có thể làm xáo trộn với mục đích làm cho mã nhỏ hơn, khó đọc chỉ là một tác dụng phụ. –