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ốngbrowser, nhưng đầu ra không dùngeval(). Dùng khi trang đích có Content Security Policy cấmeval/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ầnwindow/documentvà 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ủavmSelfDefendingdự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ụcselfkhác.userscript- sandbox của trình quản lý userscript (ví dụ Tampermonkey). Các cơ chế phòng thủ củavmSelfDefendingđượ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.jscbằ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.
