Tài liệu
/

Tương thích môi trường chạy

Tương thích môi trường chạy

Chọn target theo môi trường chạy thực tế. Bản dựng Browser và Node có thể chứa các cơ chế phòng thủ khác nhau; target Browser không thay thế được Node.

target

  • browser - Chrome, Firefox, Safari, Edge.
  • browser-no-eval - giống browser, nhưng đầu ra không dùng eval(). Dùng khi trang đích có Content Security Policy cấm eval/unsafe-eval.
  • node - môi trường Node.js. Các tùy chọn dành riêng cho trình duyệt bị tắt (chúng cần window/document và sẽ không có tác dụng hoặc ném lỗi trong Node). Một số cơ chế phòng thủ của vmSelfDefending dựa vào API chỉ có trên trình duyệt (phát hiện trình duyệt headless, khôi phục realm sạch dựa trên iframe, kiểm tra chống inspector/DOM) không được sinh ra cho target này.
  • service-worker - ngữ cảnh Service Worker. Không có window, không có document, biến toàn cục self khác.
  • userscript - sandbox của trình quản lý userscript (ví dụ Tampermonkey). Các cơ chế phòng thủ của vmSelfDefending được điều chỉnh tương ứng. Yêu cầu VM Obfuscation (hoặc Parse HTML) và trình làm rối v6.9.0+.
  • bytenode - dành cho mã sẽ được biên dịch thành .jsc bằng bytenode. Yêu cầu VM Obfuscation (hoặc Parse HTML) và trình làm rối v6.13.0+.

Môi trường trình duyệt và tên miền

Các khai báo về nơi mã chạy phải khớp với môi trường triển khai thực tế. browserEnvironment phải mô tả đúng cách bản dựng thực sự được phục vụ (xem Browser Environment), và VM Domain Lock phải liệt kê mọi tên miền phục vụ nó (xem VM Domain Lock). Công cụ tự động hóa và trình gỡ lỗi có thể kích hoạt các cơ chế phòng thủ nâng cao; xem Kiểm thử và CI.

JavaScript

Tên hàm và mã nguồn dạng văn bản của hàm có thể thay đổi khi làm rối. Đừng dùng .name hay .toString() làm dữ liệu ổn định của ứng dụng; hãy dùng định danh tường minh. Các biến toàn cục công khai có thể vẫn hiển thị khi thiết lập của bạn yêu cầu.

strictMode

strictMode: null và strictMode: false vẫn nhận biết chỉ thị tường minh, ES module và phương thức của class là strict. strictMode: true coi toàn bộ đầu vào là strict. Hãy khớp với ngữ cảnh chạy cuối cùng; một bundler thêm chế độ strict sau khi làm rối có thể làm thay đổi hành vi.

Quy trình build

Biên dịch TypeScript hoặc JSX và đóng gói ứng dụng trước bước làm rối cuối cùng. Giữ các chú thích /* javascript-obfuscator:vm */ qua quá trình build đó để chế độ comment vẫn tìm thấy chúng. Không rút gọn, định dạng lại hay viết lại đầu ra Self Defending hoặc VM Self Defending theo bất kỳ cách nào sau đó. Source map không khả dụng cho làm rối VM và làm rối HTML.