Cài đặt chế độ nâng cao của Protector4J

Chế độ nâng cao được dùng để tự quyết định phạm vi bảo vệ, các tùy chọn tương thích và các tham số dành riêng cho loại ứng dụng. Khi xử lý ứng dụng mới lần đầu, nên sử dụng chế độ đơn giản trước hoặc chạy lệnh quét khả năng tương thích trên trang tham số nâng cao, sau đó điều chỉnh dựa trên kết quả quét.

Bài viết này là phần giải thích chi tiết về chế độ nâng cao trong Hướng dẫn sử dụng GUI. Khi cần xác định những lớp nào nên được giữ ở trạng thái không mã hóa, hãy đọc kèm Tính tương thích và phạm vi bảo vệ; khi cần viết các lệnh tự động hóa, hãy dựa vào Tham khảo tham số CLI.

1. Chuyển sang chế độ nâng cao

  1. Chọn loại ứng dụng và nhập tên tập tin JAR/WAR.
  2. Chọn Phiên bản Java đi kèm cùng ít nhất một nền tảng mục tiêu.
  3. Chọn Advanced — customise the options yourself trong Mode.
  4. Nhấp vào Next để chuyển sang trang tham số nâng cao.

Nếu đã vào trang xác nhận xuất ra, bạn có thể nhấp vào Customize… để quay lại trang tham số nâng cao. Sau khi chỉnh sửa xong, hãy truy cập lại trang xuất ra để kiểm tra xem tóm tắt đã phản ánh đúng các thiết lập mới hay chưa.

Phiên bản Java và nền tảng đích không được chỉnh sửa trên trang tham số nâng cao; nếu cần điều chỉnh, hãy quay lại trang nhập liệu. Các nhiệm vụ đa nền tảng sẽ tạo ra kết quả xuất ra riêng biệt cho mỗi nền tảng, và các mục trong vlxjre không thể thay thế cho nhau.

2. Tùy chọn chung

Bốn loại ứng dụng sử dụng chung khu vực tham số nâng cao, nhưng một số thiết lập sẽ có hiệu lực tùy theo loại ứng dụng. Tính năng Library Encryption không tạo script khởi động, vì vậy không sử dụng các tham số khởi động của JVM; thiết lập phụ đuôi tệp của nó sẽ được dùng để đề xuất và đồng bộ hóa tên tệp xuất ra.

Cài đặt GUIGiá trị mặc địnhChức năngGợi ý
Archive suffixp4jxĐặt tên cho tập tin lưu trữ ứng dụng là .p4jx hoặc .jarHãy giữ nguyên .p4jx;chỉ khi tên tệp .jar được mã hóa cứng với các thành phần bên thứ ba thì mới thay đổi thành jar
Disable JIT for protected methodsTắtHãy để phương thức bảo vệ chỉ được thực thi trong trình giải thích.Kích hoạt khi dữ liệu có tính nhạy cảm về mặt an ninh và đã hoàn tất việc kiểm thử hiệu năng
Append scanner ZIP overlayTắtThêm góc nhìn tương thích để công cụ quét cấu trúc ZIP có thể đọc đượcChỉ kích hoạt khi việc quét khả năng tương thích đưa ra khuyến nghị hoặc ứng dụng được bảo vệ thực sự đọc cấu trúc ZIP vật lý.
JVM startup optionsTrốngGhi các tham số JVM vào script khởi động được tạo raĐiền một tham số đầy đủ cho mỗi dòng
Compatibility scan…Không thực thi tự độngQuét đầu vào và đưa ra các khuyến nghị thận trọngThực thi lại sau khi có ứng dụng mới, nâng cấp framework hoặc thay đổi phạm vi bảo vệ

Các thiết lập chuyên dụng thực tế xuất hiện cho từng loại ứng dụng như sau:

Loại ứng dụngCài đặt chuyên dụngTrạng thái ban đầuMục tương ứng CLI
Java ApplicationMain class, Classes to exclude, JavaFX/WebViewLấy lớp chính từ Manifest; mặc định không loại trừ lớp, không đóng gói JavaFX--main, --exclude, --javafx, --javafx-webview / --no-javafx-webview
Spring BootMain class, Layout, Protect dependency JARs, Classes to exclude, JavaFX/WebViewLấy lớp chính từ Start-Class; p4jx-fat; không bảo vệ các phụ thuộc, không loại trừ lớp, không đóng gói JavaFXCác tùy chọn liên quan đến --main, --layout, --protect-lib, --exclude, JavaFX
TomcatTomcat version, Context path, Classes to excludeChưa chọn phiên bản; /app; không loại trừ lớp--tomcat-version, --context, --exclude

“Không loại trừ các lớp tương tự” có nghĩa là mặc định sẽ bảo vệ toàn bộ các ứng dụng thuộc loại này, nhưng không có nghĩa là cả các phụ thuộc từ bên thứ ba cũng được bảo vệ. BOOT-INF/lib của Spring Boot và WEB-INF/lib của Tomcat mặc định vẫn ở trạng thái bình thường.

Hậu tố kho lưu trữ

Việc chọn jar chỉ thay đổi tên tập tin; nội dung tập tin vẫn ở định dạng P4JX, không thể sửa đổi bằng các công cụ ZIP/JAR thông thường và cũng không thể được tải bằng JRE thông thường. Đối với tính năng Library Encryption, thiết lập này sẽ thay đổi phần mở rộng thành .p4jx/.jar cho tập tin đầu ra đã chọn; nếu người dùng chỉ định phần mở rộng tùy chỉnh khác, tên tập tin hoàn chỉnh sẽ được giữ nguyên.

CLI tương ứng:

--archive-suffix p4jx
--archive-suffix jar

Cấm phương thức được bảo vệ sử dụng bộ biên dịch JIT

Khi kích hoạt Disable JIT for protected methods, các phương thức được bảo vệ sẽ không đi vào bộ biên dịch JIT, giúp giảm diện tích mã máy bị lộ sau khi biên dịch, nhưng các đoạn mã có tính chất tính toán cao có thể chạy chậm hơn đáng kể. Thiết lập này chỉ ảnh hưởng đến các phương thức được bảo vệ, không chuyển toàn bộ JVM sang chế độ giải thích thuần túy.

CLI tương ứng:

--no-jit

Trình quét ZIP overlay

overlay chỉ tiết lộ các tài nguyên công khai, thư mục và các cột dữ liệu siêu dữ liệu thuộc loại bảo vệ, không bao gồm thân phương thức thực tế. Nó được dùng để tương thích với các công cụ đọc trực tiếp thư mục trung tâm của ZIP, nhưng không thể thay thế bố cục Spring Boot fat, cũng không giải quyết được tình huống phân tích tập tin nén từ luồng bộ nhớ sử dụng ZipInputStream/JarInputStream.

CLI tương ứng:

--zip-overlay scanner

Tham số khởi động JVM

Mỗi dòng ghi một tham số hoàn chỉnh, ví dụ:

-Xms512m
-Xmx2g
-Dfile.encoding=UTF-8

Mỗi dòng tương ứng với một ranh giới tham số; không nên viết nhiều tham số trên cùng một dòng. Các tham số sẽ được ghi vào script khởi động của macOS/Linux và Windows; các tham số của Tomcat cũng sẽ được thêm vào đường dẫn khởi động của nó. Library Encryption không tạo script khởi động, vì vậy ô nhập liệu sẽ không khả dụng. Xem ví dụ chi tiết hơn cho các nền tảng tại Cấu hình tham số khởi động JVM.

CLI tương ứng yêu cầu sử dụng lại tùy chọn:

--jvm-option -Xms512m --jvm-option -Xmx2g

3. Quét tương thích và gợi ý ứng dụng

Bốn loại ứng dụng đều có thể nhấp vào Compatibility scan… để quét nội dung đang được nhập. Khi chấp nhận kết quả, công cụ sẽ kết hợp các gợi ý dành cho loại ứng dụng đó vào cài đặt hiện tại, chủ yếu bao gồm:

  • Thêm các lớp cần được giữ ở trạng thái không mã hóa;
  • Kích hoạt tính năng quét khả năng tương thích cho scanner ZIP;
  • Điều chỉnh phần mở rộng tệp nén;
  • Kích hoạt JavaFX/WebView cho Java Application hoặc Spring Boot;
  • Chọn giao diện hiển thị cho Spring Boot;
  • Chọn phiên bản 9 hoặc 10.1 cho Tomcat.

Tính năng Library Encryption chỉ tự động áp dụng các khuyến nghị về việc sử dụng scanner ZIP overlay và phần mở rộng tệp nén. Nó được thiết kế để bảo vệ tất cả các lớp trong tệp JAR đầu vào, không hỗ trợ việc loại trừ lớp nào đó; nếu quá trình quét phát hiện ra các nội dung như JNI/lớp nguyên bản cần được giữ ở trạng thái không mã hóa, báo cáo sẽ chỉ rõ cần tách chúng ra thành tệp JAR thông thường hoặc chuyển sang chế độ đóng gói ứng dụng hỗ trợ bảo vệ có chọn lọc.

Người dùng vẫn có thể tiếp tục chỉnh sửa sau khi chấp nhận các khuyến nghị. Quá trình quét sẽ giữ nguyên các quy tắc loại trừ hiện có và sẽ không tự động tắt tính năng JavaFX mà người dùng đã kích hoạt nếu không phát hiện thấy JavaFX. Việc hủy cửa sổ đối thoại sẽ dẫn đến việc các khuyến nghị không được áp dụng.

Các rủi ro ở cấp độ mã nguồn được ghi trong báo cáo quét, chẳng hạn như Agent, JNI, bộ tải lớp tùy chỉnh hoặc việc sửa đổi mã byte thời gian chạy, thường không thể được giải quyết chỉ bằng cách bật một công tắc. Cần điều chỉnh ranh giới mã nguồn theo hướng dẫn của Tính tương thích và phạm vi bảo vệ và tiến hành kiểm tra thực tế.

4. Cài đặt ứng dụng Java

Các tham số nâng cao cho ứng dụng Java thông thường

Main class

Khi trống, sẽ đọc giá trị từ Main-Class trong tệp JAR Manifest đầu vào. Chỉ cần điền tên lớp đầy đủ khi Manifest thiếu lớp chính hoặc cần thay thế lớp khởi động mặc định, ví dụ như com.example.Main.

Tương ứng với CLI: --main com.example.Main.

Classes to exclude

Mặc định, tất cả các lớp ứng dụng đều được bảo vệ. Các lớp hoặc gói trong danh sách này sẽ không được mã hóa, phù hợp với các lớp DTO, entity, lớp cấu hình, lớp kết nối JNI và những lớp cần được framework tăng cường chức năng hoặc đọc mã byte thực tế. Định dạng quy tắc xem tại “Phạm vi bảo vệ và các quy tắc loại trừ”.

JavaFX runtime

Đối với các ứng dụng JavaFX thông thường, hãy chọn Bundle JavaFX into the packaged runtime. Đối với WebView, có thể chọn tùy chọn phù hợp.

  • Auto: Được bao gồm khi phát hiện có javafx.scene.web.
  • Include: Bắt buộc phải bao gồm fx-webkit.
  • Exclude:Bắt buộc không bao gồm.

WebView sẽ làm tăng kích thước khoảng 40 MB. Giao diện người dùng sẽ tải các tài liệu phù hợp với phiên bản Java và nền tảng mục tiêu; hãy sử dụng CLI khi cần chỉ định thư mục JavaFX ngoại tuyến trên máy tính.

CLI tương ứng: --javafx, --javafx-webview--no-javafx-webview. Auto sẽ không ghi thêm tùy chọn WebView bắt buộc, mà do công cụ đóng gói quyết định dựa trên các tham chiếu trong ứng dụng.

5. Cài đặt Spring Boot

Các tham số nâng cao của Spring Boot

Main class

Khi để trống sẽ đọc giá trị từ Start-Class trong tệp Manifest. Hãy điền đầy đủ tên lớp nếu cần thay thế lớp khởi tạo.

CLI tương ứng: --main com.example.Application.

Layout

Bố cụcCác trường hợp sử dụng phù hợp
p4jx-fatChế độ mặc định; dịch vụ Spring Boot thông thường, có phạm vi bảo vệ rộng nhất.
fatYêu cầu cấu trúc JAR Spring Boot thực tế như ClassGraph, Reflections, v.v.
separatePhải sử dụng môi trường tích hợp cũ với đường dẫn lớp dạng phẳng lib/*.

Nếu kết quả quét khả năng tương thích khuyến nghị sử dụng fat, đừng chỉ bật chế độ ZIP overlay rồi vẫn cố gắng ép buộc sử dụng p4jx-fat. Chi tiết cấu hình xem tại Bảo vệ ứng dụng Spring Boot.

CLI tương ứng: --layout p4jx-fat, --layout fat hoặc --layout separate.

Protect dependency JARs…

Các phụ thuộc trong BOOT-INF/lib mặc định sẽ không được bảo vệ. Chỉ nên chọn các phụ thuộc nguồn mã đóng riêng của mình; đừng mã hóa các gói framework bên thứ ba như Spring, Tomcat, công cụ ghi nhật ký hay trình điều khiển cơ sở dữ liệu. Các JAR có chữ ký sẽ không hiển thị để chọn vì việc sửa đổi nội dung sẽ làm hỏng chữ ký của chúng.

Khi chọn một phụ thuộc, tất cả các lớp trong đó đều sẽ được bảo vệ, nhưng các quy tắc trong Classes to exclude vẫn có thể loại trừ một số lớp hoặc gói cụ thể khỏi phạm vi bảo vệ của phụ thuộc đó. Cả ba cấu hình Spring Boot đều hỗ trợ việc bảo vệ các phụ thuộc.

CLI tương ứng: --protect-lib 'company-core.jar,company-domain.jar'. CLI cũng hỗ trợ lệnh glob; giao diện GUI lưu tên tệp chính xác của các JAR đã được chọn.

Các lớp cần loại trừ và JavaFX

Cách sử dụng giống như ứng dụng Java. Các quy tắc loại trừ áp dụng đồng thời cho các lớp ứng dụng và các JAR phụ thuộc được chọn để bảo vệ. Các ứng dụng desktop Spring Boot + JavaFX cũng có thể được đóng gói với JavaFX/WebView trong tab JavaFX runtime.

6. Cài đặt Tomcat

Các tham số nâng cao của Tomcat

Tomcat version

  • Sử dụng WAR của javax.servlet.* để chọn Tomcat 9 · javax;
  • Sử dụng WAR của jakarta.servlet.* để chọn Tomcat 10.1 · jakarta.

Tomcat 10.1 yêu cầu ít nhất Java 11. Nếu không chắc chắn, hãy chạy công cụ quét tính tương thích; nếu ứng dụng sử dụng đồng thời javaxjakarta, đừng cố gắng chọn phiên bản nào cả, mà nên sửa lỗi xung đột phụ thuộc trước.

Chế độ nâng cao không có phiên bản được chọn sẵn; người dùng phải chấp nhận đề xuất từ công cụ quét hoặc chọn thủ công trước khi tiếp tục. Tương ứng với CLI: --tomcat-version 9 hoặc --tomcat-version 10; CLI cũng cho phép sử dụng auto.

Context path

Hãy điền đường dẫn triển khai bắt đầu bằng /, ví dụ như /app. Nếu để trống, sẽ sử dụng /app. Khi thêm ứng dụng vào thư mục đầu ra của Tomcat hiện có, path context không được trùng với các ứng dụng đã tồn tại.

CLI tương ứng: --context /app.

Classes to exclude

Mặc định sẽ bảo vệ các lớp ứng dụng dưới WEB-INF/classes, trong khi các lớp phụ thuộc vào WEB-INF/lib sẽ không được bảo vệ theo mặc định. Thông thường nên loại trừ các lớp Servlet, Filter, Listener, DTO, tệp cấu hình, lớp thực thể, các lớp cầu nối JNI và những lớp mà container yêu cầu tăng cường chức năng.

7. Phạm vi bảo vệ và các quy tắc loại trừ

Chế độ nâng cao của giao diện người dùng sẽ bảo vệ mặc định tất cả các ứng dụng loại này, đồng thời dùng Classes to exclude để xác định ranh giới của framework. Hỗ trợ ba loại quy tắc khác nhau:

com.example.SecretService   Chỉ khớp với lớp này
com.example.service.*       Khớp với gói hiện tại, không bao gồm các gói con
com.example.service.**      Khớp với gói hiện tại cùng tất cả các gói con

Có thể chọn từ cây các lớp bằng cách sử dụng Choose…, hoặc thêm chúng thủ công thông qua Add…. Việc chọn gói mặc định sẽ bao gồm cả gói hiện tại và các gói con; nếu chỉ muốn loại trừ gói hiện tại thì hãy dùng .*. Cây các lớp của Spring Boot còn hiển thị các JAR phụ thuộc đã được chọn để bảo vệ.

Cấu trúc được khuyến nghị là “Đầu vào biên giới/cơ sở khung công khai → facade hoặc giao diện thông thường → phần triển khai cốt lõi được bảo vệ”. Đừng mã hóa tất cả các phụ thuộc bên thứ ba hoặc điểm vào của framework chỉ để mở rộng phạm vi bảo vệ.

8. Xuất, tái sử dụng và kiểm tra cuối cùng

Nhấp vào Export parameters… để xuất dữ liệu:

  • p4j-encrypt-run.sh
  • p4j-encrypt-run.bat

Script xuất sẽ lưu các tùy chọn đã được phân tích, nhưng sẽ không lưu email và mật khẩu tài khoản. Sau đó có thể khôi phục nhiệm vụ thông qua Load Task File ở phía trên.

Khi vào trang kết quả, hãy kiểm tra ít nhất các mục sau:

  • Nhập tên tệp, loại ứng dụng, phiên bản Java và tất cả các nền tảng mục tiêu;
  • Phần mở rộng lưu trữ, JIT, hiển thị overlay của trình quét và các tham số JVM;
  • JavaFX/WebView, cấu hình bố cục của Spring Boot hoặc phiên bản/context của Tomcat;
  • Các tập JAR phụ thuộc được bảo vệ cùng tất cả các quy tắc loại trừ;
  • Thư mục đầu ra và việc có tạo thư mục con p4jx-xxxx mới hay không.

Sau khi tạo ra, cần sử dụng script khởi động trong gói trên mỗi nền tảng mục tiêu để kiểm tra việc khởi động, quét framework, việc tổng hợp dữ liệu, phản xạ, tải tài nguyên và các lộ trình nghiệp vụ cốt lõi. Việc cấu hình trang tham số nâng cao một cách chính xác chỉ chứng tỏ các tham số nhiệm vụ đã được thiết lập, nhưng không thể thay thế cho việc kiểm tra sản phẩm cuối cùng.