Trình giải mã mã JavaScript (JavaScript Deobfuscator)

Chỉ cần dán một đoạn mã JavaScript đã được mã hóa (gồm các chuỗi được mã hóa bằng hệ số thập phân, tên biến chỉ gồm một chữ cái và một vòng lặp giải mã ở phần đầu), công cụ sẽ tự động phân tích từng lớp cấu trúc bên trong: giải mã các chuỗi bị mã hóa, đưa mảng tra cứu vào nội dung văn bản, đổi tên các biến thành các giá trị thay thế dễ đọc, gỡ bỏ các lớp bao bọc không cần thiết và làm đẹp kết quả hiển thị. Công cụ này rất hữu ích khi phân tích những đoạn mã đáng ngờ mà bạn lấy từ một trang web hoặc từ liên kết pastebin đã được dán vào.

Cách giải mã mã JavaScript

  1. 1

    Dán mã nguồn đã được mã hóa

    Đã được thu nhỏ, đóng gói hoặc xuất từ các công cụ theo kiểu `javascript-obfuscator.io`.

  2. 2

    Hãy để bộ phân tích thực hiện việc xử lý dữ liệu.

    Các mảng chuỗi được giải mã, các dãy số được tính toán, và các nhánh mã không hoạt động được loại bỏ.

  3. 3

    Áp dụng đặt tên mới

    Các biến có ký tự đơn `a`/`b`/`c` được đổi tên thành `var1`, `var2`, v.v. – đây là các tên thay thế dễ đọc, không nhất thiết mang ý nghĩa cụ thể.

  4. 4

    Nâng cao vẻ đẹp

    Định danh các đoạn mã, thêm dòng mới, và xuất ra mã có thể được đọc hiểu và phân tích một cách chính xác.

Các kỹ thuật mà công cụ giải mã bí mật sử dụng để đảo ngược quá trình mã hóa

Phù duối Ngược chiều
Các văn bản chuỗi được mã hóa theo định dạng hex Giải mã \x48\x69 thành "Hi"
Các định danh được mã hóa theo Unicode \u006E\u0061\u006D\u0065 -> name
Mảng chuỗi + hàm giải mã Đặt mảng vào vị trí nội tuyến và gọi hàm giải mã khi phân tích
Phép gấp nếp hằng số số 0x1F3 + 5 -> 504
Các bộ đóng gói eval(...) Di chuyển mã bên trong lên cấp cao nhất
Phẳng hóa dòng kiểm soát (máy trạng thái) Phát hiện các điểm chuyển đổi và tái tạo dòng thực thi
Mã lỗi / các điều kiện ba giá trị vô ích Xóa các nhánh không bao giờ được thực thi
Tên kiểu _0x1a2b3c() Thay bằng các tên kiểu tăng dần như var1, var2

Giới hạn: những điều công cụ không hỗ trợ

  • Phục hồi tên biến gốc. Sau khi userEmail được đổi thành a, không công cụ nào có thể suy ra tên ban đầu của nó. Bạn sẽ nhận được cấu trúc dễ đọc, chứ không phải ý nghĩa gốc của các biến đó.
  • Giải đóng gói các trình ảo hóa tùy chỉnh. Các công cụ làm rối mã thương mại hạng nặng (như JScrambler hoặc các phiên bản dành cho doanh nghiệp của Obfuscator.io) đưa vào một máy ảo tùy chỉnh để thông dịch bytecode; việc vượt qua chúng đòi hỏi phải dịch ngược thủ công.
  • Thực thi mã tùy ý: Công cụ giải mã mã đánh giá các biểu thức thuần túy một cách tĩnh; nó không truy xuất tài nguyên từ xa, tạo các phần tử DOM hay giao tiếp với mạng.

Các trường hợp sử dụng điển hình

  • Nghiên cứu bảo mật: phân tích kỹ lưỡng một script đáng ngờ xuất hiện trong email hoặc được phát hành từ một CDN bị xâm nhập.
  • Khoa học cổ vật mã nguồn: khôi phục các đoạn mã cũ khi duy nhất còn lại là một tập tin được nén nhỏ gọn.
  • Học tập: hiểu rõ cách thức mà phương pháp làm mờ dữ liệu ở cấp độ hướng dẫn thực sự hoạt động bên trong hệ thống.

An toàn và đạo đức

Tuyệt đối không chạy các đoạn mã JavaScript không đáng tin cậy trong tab trình duyệt khi đang truy cập vào bất kỳ tài khoản hay hệ thống quan trọng nào – những đoạn mã này có thể đọc cookie, gọi các API nội bộ và thu thập thông tin trạng thái hệ thống. Bản công cụ giải mã tự động hoạt động trên mã nguồn dưới dạng văn bản; nó không thực thi trực tiếp đoạn mã mà bạn nhập.

Chỉ có thể giải mã các đoạn mã mà bạn được ủy quyền phân tích. Việc thực hiện kỹ thuật ngược trên phần mềm có giấy phép có thể bị hạn chế tại khu vực pháp lý của bạn.

Câu hỏi thường gặp

Không. Khi công cụ mã hóa đổi tên userEmail thành _0x1a2b3c, tên gốc sẽ bị mất đi. Công cụ giải mã sẽ cung cấp các giá trị thay thế có thể đọc được (ví dụ: var1, var2) cùng cấu trúc chính xác, nhưng không bao gồm các tên ngữ nghĩa ban đầu.

Không. Hệ thống phân tích mã nguồn dưới dạng cây biểu thức ngữ pháp (AST) và thực hiện các biến đổi tĩnh. Các biểu thức thuần túy (như 0x1F3 + 5) được xử lý gọn gàng, nhưng không tác động đến mạng lưới, cookie hay DOM.

Đúng vậy, nhưng kết quả từ công cụ bundler được rút gọn thay vì bị che giấu một cách cố ý; do đó, kết quả thu được chỉ là mã nguồn được tối ưu hóa hơn mà các lớp bao quanh mô-đun vẫn được giữ nguyên. Nếu bản đồ mã nguồn có sẵn riêng biệt, chúng sẽ cung cấp các tên gọi rõ ràng và dễ hiểu hơn nhiều.

Các công cụ thương mại mạnh mẽ (như Enterprise JScrambler hay các máy ảo tùy chỉnh) tích hợp một trình diễn giải bytecode mà phân tích tĩnh không thể giải mã được. Công cụ này chỉ thu thập được lớp bề mặt, trong khi lôgic cốt lõi vẫn còn bí ẩn nếu không thực hiện quá trình đảo ngược mã thủ công.

Công cụ liên quan

Công cụ này có phiên bản bằng các ngôn ngữ khác