JavaScript Obfuscation là gì và tại sao nó là một mối đe dọa?


Câu trả lời:


38

Obfuscation là một phương tiện "che khuất" ý nghĩa thực sự và ý định của mã javascript của bạn. Một số trang web sử dụng nó như một trở ngại cho những người muốn sao chép / mượn mã của họ. Các trang web khác sử dụng nó như một phương tiện để che giấu ý định thực sự của mã.

Một số hình thức che khuất:

  1. Tự động đổi tên các biến thành các tên vô nghĩa ngắn để làm cho mã ít dễ đọc hơn và khó hiểu hơn.
  2. Xóa tất cả các khoảng trắng và ngắt dòng bổ sung để mã là một dòng dài khổng lồ.
  3. Làm cho các phần của mã tự tạo sao cho một đoạn mã đầu tiên chạy để tạo mã thực tế sau đó chạy để thực hiện thao tác dự định.
  4. Sử dụng mã ký tự và thao tác chuỗi kết hợp với mã eval thay vì mã javascript thông thường để xây dựng mã thực tế sẽ chạy.

Bản thân che khuất không phải là xấu xa, nhưng nó có thể được sử dụng để cố gắng che giấu ý định xấu xa và đó có lẽ là điều mà AVG đang phản đối. Nó phát hiện quá nhiều sự che khuất đến mức không thể biết được liệu javascript có đang cố làm điều gì đó mà nó đang cố gắng ngăn chặn hay không. Do đó, nó đã tuyên bố mã là không an toàn theo mặc định vì nó không thể xác minh rằng mã có vẻ ổn.


Đó là những gì tôi nghĩ nhưng muốn xác minh. Cảm ơn bạn đã làm rõ.
L84

NẾU AVG đang chặn quyền truy cập vào một trang web nổi tiếng, có uy tín, bạn có thể có thể ghi đè lên nó. Tôi sẽ không đề xuất rằng nếu bạn không biết đại diện trang web.
uSlackr

4
Một số trang web sử dụng nén js để tải nhanh hơn (tất cả mọi người), mã sẽ trông bị xáo trộn.
jcubic

9
12cũng được thực hiện bởi các trình nén javascript. Máy nén làm xáo trộn mã như một tác dụng phụ, nhưng đó không phải là mục đích chính của chúng; Mục đích chính của chúng là làm cho javascript nhỏ hơn, để giảm băng thông.
BlueRaja - Daniel Pflughoeft

5. Nó cũng được sử dụng để nén các tệp JS để tải xuống nhanh hơn. Yahoo đã làm điều đó kể từ khi họ có mặt trên web và các công cụ của Google để tạo các ứng dụng web cũng làm điều đó (như Gmail và Lịch).
Chloe

13

Obfuscation đề cập đến việc che giấu ý nghĩa dự định của một cái gì đó.

Trong trường hợp này, một đoạn mã JavaScript dễ đọc, chẳng hạn như

window.onload = function() { alert("Hello " + username) };

có thể được thay thế bởi

var _0xc5b2=["\x6F\x6E\x6C\x6F\x61\x64",
        "\x48\x65\x6C\x6C\x6F\x20"];window[_0xc5b2[0]]=
    function (){alert(_0xc5b2[1]+username);} ;

hoặc thậm chí

eval(unescape("var%20_0xc5b2%3D%5B%22onload%22%2C%22Hello%20%22%5D%3Bwindow"+
  "%5B_0xc5b2%5B0%5D%5D%3Dfunction%20%28%29%7Balert%28_0xc5b2%5B1%5D+username"+
  "%29%3B%7D%20%3B"));

Tất cả ba đoạn mã làm cùng một điều chính xác, nhưng chỉ đọc phần đầu tiên sẽ cho phép bạn hiểu ý định của nó một cách dễ dàng.

Rõ ràng, AVG cố gắng tìm hiểu mục đích của mã JavaScript trước khi cho phép thực thi. Khi mã bị xáo trộn, AVG có thể sẽ thất bại. Do đó cảnh báo.

Điều đó đang được nói, một số trang web làm xáo trộn JavaScript của họ không phải vì mục đích xấu, mà để gây khó khăn cho việc đánh cắp công việc của họ. Obfuscation thường vô dụng nếu được sử dụng cho mục đích này, nhưng vấn đề là obfuscation không nhất thiết có nghĩa là mục đích xấu.


3
Mặc dù như tôi thường thấy, mã khử màu thường cho tôi thấy nó ẩn javascript được mã hóa không đáng bị đánh cắp. Đó là một dấu hiệu mà lập trình viên dành nhiều thời gian để lo lắng về hành vi trộm cắp hơn là kỹ thuật lập trình phù hợp và thậm chí không thể có được sự phản cảm ngay lập tức để nó dễ dàng bị bẻ khóa. Những người duy nhất dành thời gian để tạo mã thực sự khó khử lỗi là các lập trình viên phần mềm độc hại, đó là lý do tại sao AVG đánh dấu nó là một lý do thực sự tốt để tránh trang web.
Phòng thí nghiệm Fiasco

2
AVG là một cỗ máy, không phải con người. Rõ ràng, một máy có thể hiểu mã, đó là cách mã đó làm điều tương tự. Hơn nữa, mọi người thường không nhìn vào Javascript khi họ lướt web. Đây chỉ đơn giản là một trường hợp "mặc cảm tội lỗi". Một số Javascript nguy hiểm sử dụng các mẫu obfuscation nhất định. Do đó, các Javascript khác có mẫu tương tự là đáng ngờ.
Kaz

@Kaz: Đó chỉ là một ví dụ, nhưng có nhiều phương pháp che giấu phức tạp hơn đòi hỏi phải hiểu một công cụ JavaScript. Máy quét phần mềm độc hại thường tìm kiếm các mẫu nhất định thay vì thực thi các tập lệnh, vì lý do hiệu suất.
Dennis

về mặt lý thuyết là vô giá trị và thực tế là vô giá trị là khác nhau - về mặt lý thuyết, mã che giấu là vô ích, đồng ý. Nhưng, nếu chi phí khử nhiễu tương tự như chi phí tạo mã mới (hoặc thậm chí, chi phí trở nên đủ cao để ngăn chặn những tên trộm lười biếng), thì việc giấu giếm để ngăn chặn hành vi trộm cắp bừa bãi có thể có lợi.
Ronald

Chính xác, vì vậy những gì đang có vấn đề không phải là obfuscation per se , nhưng sự giống nhau của mã để mã độc hại được biết đến.
Kaz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.