Bạn có nên làm xáo trộn JavaScript không?

Trong blog này, chúng ta sẽ được giới thiệu về Obfuscation trong Javascript ở cấp độ mới bắt đầu, các trường hợp sử dụng của nó và chính xác cách thức hoạt động của nó. Nhưng trước khi chúng tôi bắt đầu, hãy để tôi giới thiệu cho bạn hai thuật ngữ Javascript và Obfuscation cho những người không quen thuộc với chúng

Javascript là gì?

Đây là ngôn ngữ lập trình nhẹ và được giải thích mà bạn sẽ tìm thấy trong hầu hết các trang web Động ngày nay. Đây là một trong những ngôn ngữ được công nhận nhiều nhất trong lĩnh vực phát triển web và có nhiều trường hợp sử dụng khác nhau, có thể thay đổi từ hoạt ảnh một số phần tử đến xử lý đầu vào của người dùng trên nền tảng. Nếu bạn muốn tìm hiểu thêm về nó, hãy xem phần tài nguyên tuyệt vời này do Pluralsight đưa ra

Obfuscation là gì?

Trong phát triển phần mềm, thuật ngữ Obfuscation về cơ bản đề cập đến kỹ thuật làm cho mã nguồn của một số ứng dụng/chương trình khó đọc đối với một số người khác, để cho chức năng giống như trước đó

Hãy hiểu khái niệm này từ ví dụ dưới đây,

Trong hình trên, chúng ta có thể thấy chúng ta có một dòng chữ console. log[“hello world”] sẽ in hello world trong tab console của trình duyệt. Trong phần tiếp theo, chúng tôi đã xáo trộn một dòng mã đó và chuyển đổi nó thành 5 dòng cũng như làm cho người khác khó đọc. Chức năng vẫn giữ nguyên ở đây và nó sẽ in hello world trong tab bảng điều khiển của trình duyệt như mong đợi

Tại sao làm xáo trộn?

Có thể có nhiều lý do giải thích tại sao một nhà phát triển muốn xáo trộn mã của họ trước khi sử dụng nó trong một số nền tảng công khai. Một số trong những lý do này là

  1. Giúp tối ưu hóa mã và cung cấp trải nghiệm nhanh hơn

Mặc dù lý do này thay đổi theo từng trường hợp, nhưng việc làm xáo trộn mã của bạn có thể giúp thu nhỏ kích thước tệp của mã cũng như cung cấp trải nghiệm nhanh hơn cho người dùng cuối

2. Làm cho kỹ thuật đảo ngược trở thành một quá trình dài hơn

Javascript hiện đang được sử dụng trong phần lớn các trang web cung cấp trải nghiệm động cho người dùng cuối. Ngay cả một lỗi nhỏ hoặc lỗi của nhà phát triển cũng có thể gây rủi ro lớn cho nền tảng nếu kẻ tấn công có thể phân tích mã và khai thác lỗ hổng. Vì vậy, để làm cho kỹ thuật đảo ngược mã khó hơn, các nhà phát triển sẽ dựa vào việc làm xáo trộn mã của họ trước khi đẩy mã đó lên nền tảng công cộng của họ

3. Ngăn chặn mọi người sao chép mã của bạn

Làm xáo trộn mã của bạn có thể giúp ngăn mọi người sao chép mã ứng dụng của bạn mà không được phép trước. Bằng cách này, người dùng cuối sẽ gặp khó khăn khi đọc và phân tích mã của nền tảng, do đó làm giảm khả năng bất kỳ mã nào bị sao chép bởi ai đó

Làm thế nào Obfuscation?

Bây giờ bạn đã có một ý tưởng cơ bản về Obfuscation chính xác là gì và tại sao bạn muốn sử dụng nó, chúng ta hãy xem xét ba kỹ thuật cơ bản của Obfuscating mã của bạn

Trường hợp 1. Chèn mã rác

Chèn mã rác về cơ bản là thêm mã chết vào mã thực của bạn, mã này sẽ không bao giờ được thực thi trong thời gian chạy. Mặc dù kỹ thuật này không hiệu quả lắm, nhưng nó sẽ giúp phân tích mã khó hơn đối với ai đó vì họ cũng sẽ phải xem qua mã rác, mã này sẽ được đặt ở bất kỳ đâu trong mã thực tế

Trong hình trên các bạn có thể thấy chúng ta có một hàm chuyển đổi các ký tự ASCII sang định dạng thập lục phân. Chúng tôi đã thêm một số phần mã rác được bao quanh bởi các nhận xét đề cập đến vị trí của nó, mã này sẽ không bao giờ được thực thi nhưng phần còn lại sẽ chạy như bình thường. Mặc dù những gì chúng tôi sử dụng ở đây là một loại mã rác rất cơ bản, nhưng các nhà phát triển sẽ thích các chức năng phức tạp hơn như một phần của mã rác và các nhận xét sẽ không được thêm vào đây để tách mã rác khỏi mã thực tế

trường hợp 2. Mã hóa [Phương pháp tùy chỉnh/được xác định trước]

Trong trường hợp có chức năng tùy chỉnh, về cơ bản, các nhà phát triển thực hiện các chức năng mã hóa/giải mã của riêng họ, về cơ bản sẽ lấy văn bản được mã hóa làm đầu vào và xử lý nó trong khi thực thi. Bằng cách này, các hàm này sẽ không chỉ phục vụ mục đích xử lý các chuỗi đơn giản mà thậm chí cả các hàm chuyên dụng ở dạng mã hóa. Trong hình ảnh ở phía bên trái của bạn, chúng ta có thể thấy rằng chúng ta có một hàm về cơ bản chuyển đổi các byte Hex thành ASCII, chúng ta đã sử dụng nó để chuyển đầu ra đã giải mã giống như những gì chúng ta có thể thấy trong phần nhận xét của mã sang eval . Đổi lại, đầu ra được giải mã bây giờ sẽ giải mã nhiều byte hex hơn sẽ được lưu dưới dạng giá trị cho một số cookie bằng tài liệu. thuộc tính cookie

Trong trường hợp sử dụng các hàm được xác định trước do Javascript cung cấp, về cơ bản chúng ta có thể sử dụng các hàm như atob[] “để giải mã chuỗi được mã hóa base64” và btoa[] “để mã hóa chuỗi thành base64”. Hãy lấy một ví dụ, trong hình ảnh bên trái của bạn, bạn có thể thấy rằng chúng ta có hàm atob[] giải mã một chuỗi được mã hóa base64 bên trong hàm eval[]. Hàm eval[] về cơ bản thực thi đối số được cung cấp cho nó như thể nó là một phần của mã và trong trường hợp này, chúng tôi đã cung cấp đầu ra được giải mã của hàm atob[] trông giống như những gì chúng tôi đã đề cập trong phần nhận xét của . Chức năng ghi lại các lần nhấn phím của người dùng cuối và in nó trong tab Bảng điều khiển

trường hợp 3. Đổi tên hàm và biến

Trong trường hợp này, các nhà phát triển đổi tên các hàm và biến bằng văn bản vô nghĩa, các mẫu thập lục phân, v.v. để làm cho quá trình đọc và gỡ lỗi trở nên khó khăn hơn đối với những người không quen thuộc với quy trình kiểm soát mã. Trong hình ảnh bên tay trái của bạn, chúng ta có thể nhận thấy tên của các hàm và biến được sử dụng ở đây, tên được thể hiện ở định dạng Hệ thập lục phân. Việc thay đổi tên sẽ không ảnh hưởng đến luồng kiểm soát mã nhưng sẽ khiến người khác khó phân tích mã hơn vì sự giống nhau trong tên. Một nhược điểm ở đây là nhiều trình sửa lỗi có thể dễ dàng bỏ qua phương pháp này và làm cho việc phân tích tương đối dễ dàng hơn

Tóm tắt nó

Việc làm xáo trộn mã của bạn đôi khi có thể hữu ích nếu được triển khai đúng cách và các kỹ thuật thích hợp được sử dụng để triển khai mã trong mã. Việc che giấu các trang lừa đảo đang gia tăng và những kẻ tấn công đang cố gắng tìm những cách mới để vượt qua các cơ chế phát hiện và trình gỡ lỗi phân tích mã của chúng. Những gì chúng ta đã thảo luận trong blog này là một phần rất nhỏ của Obfuscation trong Javascript. Có rất nhiều kỹ thuật mới và nâng cao để có thể làm xáo trộn mã mạnh mẽ, tôi sẽ đính kèm một số tài nguyên để tìm hiểu thêm về che giấu, điều này sẽ hữu ích cho người đọc tham khảo.

Làm xáo trộn có ảnh hưởng đến hiệu suất JavaScript không?

Việc xáo trộn tên không ảnh hưởng đến hiệu suất và phải luôn được sử dụng. Bạn có thể ảo hóa các phương pháp không chuyên sâu về tính toán.

Bạn có nên làm xáo trộn mã của mình không?

Điều cần thiết là ẩn logic và mã nghiệp vụ để khiến kẻ tấn công khó truy cập hơn và bắt đầu gỡ lỗi cũng như can thiệp vào ứng dụng của bạn . [Họ thường đóng gói lại một ứng dụng có mã độc. ] 3. Làm xáo trộn mã có thể giảm đáng kể kích thước tệp và thời gian tải xuống cũng có thể giảm đáng kể.

JavaScript bị xáo trộn có chậm hơn không?

Chắc chắn là nó làm chậm quá trình KHỞI TẠO mã . Tuy nhiên, khi mảng đó đã được khởi tạo, tác động lên tập lệnh là không đáng kể.

Tôi có nên xáo trộn ứng dụng của mình không?

Cân nhắc kỹ lưỡng việc sử dụng tính năng tự bảo vệ ứng dụng thời gian chạy và che giấu dữ liệu nếu bạn phát hành phần mềm chạy trong môi trường không đáng tin cậy và có tài sản trí tuệ, cung cấp quyền truy cập vào thông tin nhạy cảm hoặc có chức năng kiểm soát

Chủ Đề