Nhật ký thay đổi

6.0.9 2026-07-25

Sửa lỗi treo cho ứng dụng đã mã hóa khi hiển thị NullPointerException

  • Đã sửa một lỗi treo JVM có thể xảy ra khi một phương thức được bảo vệ ném ra NullPointerException ngầm định và ứng dụng đọc thông báo của nó hoặc in dấu vết ngăn xếp. Tính năng "chi tiết NPE hữu ích" của runtime cố gắng dựng lại đoạn văn bản "because ... is null" từ bytecode đã mã hóa của phương thức, truy cập vào vùng nhớ không hợp lệ và làm treo VM (quan sát thấy ở các ứng dụng JavaFX FXML). Các phương thức được bảo vệ giờ đây bỏ qua thông báo chi tiết và quay về NullPointerException tiêu chuẩn; loại ngoại lệ, dấu vết ngăn xếp và bất kỳ thông báo nào do ứng dụng cung cấp đều không bị ảnh hưởng.
  • Runtime cho JDK 17, 21 và 25 được dựng lại thành VLX 1.0.16 với bản sửa lỗi này. JDK 11 không bị ảnh hưởng vì tính năng NPE hữu ích không tồn tại trước JDK 14 và vẫn giữ VLX 1.0.15; JDK 8 vẫn giữ VLX 1.0.11.

6.0.8 2026-07-24

Runtime Tomcat tải theo nhu cầu và giá trị mặc định an toàn cho môi trường sản xuất

  • Khắc phục lỗi khiến bộ mã hóa tự bảo vệ đã phát hành không thể đóng gói WAR Tomcat vì các lớp Tomcat bên trong app.p4jx không còn hiển thị như một JAR vật lý trên classpath. Tomcat 9.0.107 và 10.1.53 hiện là các artifact R2/COS bất biến, có phiên bản, được chọn theo namespace Servlet, tải xuống ở lần sử dụng đầu tiên, lưu trong bộ nhớ đệm cục bộ và xác minh bằng SHA-256 chính xác cùng danh sách JAR. Bộ nhớ đệm bị sửa đổi sẽ bị loại bỏ và tải lại.
  • Các JAR công khai trong WEB-INF/lib hiện được triển khai thành tài nguyên Web vật lý, tách riêng theo từng ứng dụng và ràng buộc bằng hàm băm. Nhờ đó, Spring không phải đọc và xác minh lặp lại tệp lưu trữ lồng nhau cho từng lớp khi khởi động.
  • Các bản dựng mới giờ mặc định dùng endpoint cấp phép sản xuất https://protector4j.com. Endpoint nội bộ http://10.10.10.16:16002 chỉ được dùng khi chọn rõ ràng P4JX_LICENSE_MODE=dev hoặc -PlicenseMode=dev.

6.0.7 2026-07-24

Phụ thuộc Tomcat lồng nhau và lớp động đáng tin cậy

  • Khắc phục lỗi khi WAR Tomcat được bảo vệ tải lớp hoặc dịch vụ từ WEB-INF/lib/*.jar. Protector4J hiện niêm phong siêu dữ liệu SHA-256 chính xác của JAR và lớp lồng nhau vào app.p4jx; các phụ thuộc không xác định, bị thay thế hoặc bị sửa đổi vẫn bị từ chối.
  • Khắc phục lỗi Spring CGLIB và Hibernate Byte Buddy trên JDK 11 do MethodHandles.Lookup#defineClass sử dụng dấu nguồn dành riêng cho JDK 11. Mức tin cậy động vẫn yêu cầu nguồn gốc lớp gọi hoặc loader đã được VM xác minh; chuỗi dấu, tên lớp, đường dẫn, gói và CodeSource không cấp quyền tin cậy.
  • Phát hành runtime VLX 1.0.15 cho JDK 11, 17, 21 và 25 trên 24 tổ hợp nền tảng được hỗ trợ. Tất cả đều vượt qua các cổng L1-L5 nghiêm ngặt, bao gồm FXML thực, Swing/AWT, tải phụ thuộc Tomcat lồng nhau và các trường hợp âm về nguồn gốc cũng như sửa đổi. JDK 8 tiếp tục giữ VLX 1.0.11.

6.0.6 2026-07-22

Nguồn gốc đáng tin cậy khi định nghĩa lớp

  • Khắc phục lỗi khởi động của ứng dụng JavaFX FXML được bảo vệ: MethodUtil định nghĩa helper Trampoline, có nguồn gốc đã được VM xác minh, thông qua defineClass(byte[]). Mức tin cậy giờ đây chỉ lan truyền từ nguồn gốc lớp hoặc loader đã được VM xác minh, không từ tên lớp, đường dẫn, gói hoặc chuỗi CodeSource.
  • Bổ sung phạm vi kiểm thử FXML thật với fx:controller, phần tử thuộc tính, tiêm Controller và khởi động WebView, cùng các kiểm thử hồi quy cho định nghĩa động đáng tin cậy, lan truyền hai cấp, nguồn không xác định, JAR chưa được phép và thay thế tên protected class.
  • Phát hành runtime VLX 1.0.14 cho JDK 11, 17, 21 và 25. JDK 8 tiếp tục giữ VLX 1.0.11.

6.0.5 2026-07-21

Tính toàn vẹn của môi trường chạy native JavaFX

  • Khắc phục lỗi khởi động JavaFX WebView trên Windows (Graphics Device initialization failed / No toolkit found) bằng cách đặt các DLL JavaFX đã đóng gói vào vlxjre/bin và điều chỉnh đường tìm kiếm thư viện native của trình khởi động.
  • Mở rộng danh sách cho phép đã mã hóa trong app.p4jx để bao gồm các thư viện native bên ngoài. Các tệp native JavaFX phải khớp chính xác với giá trị SHA-256 bất kể đường dẫn, và Glass sẽ kiểm tra lại tệp thực sự được tải; các tệp không được nhận diện hoặc bị sửa đổi sẽ bị từ chối.
  • Phát hành các môi trường chạy Protector4J đã cập nhật cho JDK 11, 17, 21 và 25. Các tổ hợp nền tảng JavaFX được hỗ trợ đã vượt qua L5.1-L5.4, bao gồm khởi động WebView và từ chối các mô-đun JAR, jdk.jsobject và thư viện native Glass bị sửa đổi.

6.0.4 2026-07-21

Tính toàn vẹn của mô-đun bên ngoài và khả năng tương thích với môi trường chạy JavaFX

  • Đã loại bỏ cơ chế tin cậy dựa trên đường dẫn đối với các mô-đun bên ngoài. Mọi JAR mô-đun bên ngoài giờ đây phải khớp chính xác với một mục SHA-256 trong danh sách cho phép được nhúng vào app.p4jx; các tệp không được nhận diện hoặc bị sửa đổi sẽ bị từ chối bất kể vị trí.
  • Đã thêm chức năng tự động phát hiện bao đóng phụ thuộc từ JavaFX module-info.class và kiểm soát việc cho phép các mô-đun JavaFX và JDK đã được cố định, bao gồm javafx.mediajdk.jsobject.
  • Đã khắc phục lỗi khởi động JavaFX WebView và lỗi E818 / ClassFormatError sau khi tạo lớp khởi động trên các phiên bản JDK và nền tảng được hỗ trợ bằng các môi trường chạy P4JX mới phát hành.

6.0.3 2026-07-20

Khả năng tương thích của mô-đun JavaFX WebView

  • Đã sửa việc phân giải mô-đun tùy chọn jdk.jsobject cho các runtime P4JX được hỗ trợ và xây dựng lại từ cùng phiên bản JDK/VLX. Runtime tương thích không còn bị từ chối chỉ vì ảnh lib/modules hoàn chỉnh có các byte khác nhau.
  • Vẫn duy trì việc chọn thành phẩm theo dòng JDK và nền tảng, xác thực chính xác SHA-256 và tên mô-đun, đồng thời kiểm tra lại đầy đủ chuỗi phụ thuộc sau khi cài đặt.

6.0.2 2026-07-20

Khả năng tương thích JavaFX WebView

  • Khắc phục lỗi khởi động JavaFX WebView bằng cách đóng gói javafx.media cùng với javafx.web và tự động chọn mô-đun jdk.jsobject khớp chính xác với P4JX khi runtime rút gọn chưa chứa mô-đun đó.
  • Bổ sung tải xuống mô-đun tùy chọn từ dịch vụ công khai theo khu vực, được cố định bằng SHA-256 và ràng buộc với phiên bản, nền tảng và runtime. Runtime đã chứa mô-đun sẽ bỏ qua bước tải xuống.

6.0.1 2026-07-20

Khả năng tương thích JavaFX

  • Đã sửa lỗi khởi động của các fat JAR có nhúng lớp runtime JavaFX. Tính năng tự động áp dụng quy tắc tương thích hiện giữ nguyên trạng thái không mã hóa cho các không gian tên API, phần triển khai và cầu nối JNI của JavaFX được nhúng, qua đó tránh trùng quyền sở hữu lớp với các mô-đun JavaFX đi kèm.
  • Cải thiện chẩn đoán tương thích và hướng dẫn đa ngôn ngữ cho các ứng dụng có runtime JavaFX được nhúng.

6.0.0 2026-07-20

Protector4J 6.0 là một bản phát hành lớn dựa trên kiến trúc bảo vệ được thiết kế lại hoàn toàn, không phải bản cập nhật gia tăng thông thường của dòng 5.x.

Kiến trúc và bảo vệ

  • Thiết kế lại kiến trúc nền tảng của Protector4J và giới thiệu cơ chế bảo vệ P4JX mới.
  • Bổ sung gần 100 biện pháp bảo vệ trên các lớp tạo tệp lưu trữ, tải lớp, thực thi runtime, chống gỡ lỗi và bảo đảm tính toàn vẹn của thành phẩm.
  • Nâng cao đáng kể rào cản đối với kỹ thuật đảo ngược. Kiến trúc mới được thiết kế để khiến việc bẻ khóa trong thời gian ngắn trở nên cực kỳ khó khăn, ngay cả khi sử dụng các công cụ phân tích tiên tiến có AI hỗ trợ.
  • Tăng cường bảo mật cho yêu cầu giấy phép, tải xuống runtime, xác minh thành phẩm và bộ cài đa nền tảng.

Trải nghiệm sản phẩm

  • Hỗ trợ JDK 8, 11, 17, 21 và 25, cùng quy trình đóng gói trực quan cho các ứng dụng Java, JavaFX, Spring Boot và Tomcat.
  • Bổ sung quét tương thích, mã hóa lớp có chọn lọc, bảo vệ JAR phụ thuộc, nhập/xuất tác vụ YAML và xây dựng hàng loạt cho nhiều nền tảng đích.
  • Thiết kế lại giao diện máy tính, hỗ trợ 11 ngôn ngữ và lưu tùy chọn ngôn ngữ lâu dài.

Lưu ý khi chuyển đổi

Cách sử dụng Protector4J 6.0 khác biệt đáng kể so với các phiên bản trước. Vui lòng đọc lại tài liệu mới nhất trước khi sử dụng, đồng thời sớm xây dựng lại và chuyển các ứng dụng đã mã hóa sang phiên bản 6.0 để tận dụng khả năng bảo vệ mạnh hơn.

Tải Protector4J 6.0

Các phiên bản trước

Nhật ký thay đổi

5.7.0 2026-03-07

  • Thêm hỗ trợ JDK25

5.6.2 2026-01-03

  • Sửa lỗi tải JRE
  • Sửa lỗi pidkiller

5.6.1 2025-08-13

  • Sửa lỗi chạy ứng dụng

5.6.0 2025-08-09

  • Sửa lỗi tài nguyên GraphQL

5.5.1 2025-06-01

  • Sửa lỗi tải tài nguyên

5.5.0 2025-04-19

  • Sửa các lỗi liên quan đến bộ giải mã

5.4.1 2025-04-17

  • Xây dựng pidchecker với phiên bản Go mới nhất

5.4.0 2025-04-08

  • Cập nhật JDK17 lên 17.0.14

5.3.5 2025-03-26

  • Cập nhật trình bao bọc thực thi

5.3.4 2025-03-08

  • Sửa lỗi không thể chạy trên một số hệ thống Windows

5.3.3 2025-02-20

  • Sửa lỗi không thể chạy trên một số hệ thống Windows

5.3.2 2025-02-04

  • Sửa lỗi META-INF không chính xác do mã hóa thư viện JAVA gây ra

5.3.1 2025-01-28

  • Sửa lỗi không thể chạy trên CPU phiên bản thấp hơn

5.3.0 2025-01-25

  • Thêm module jdk.naming.dns

5.2.0 2025-01-19

  • Bộ giải mã mới

5.1.0 2025-01-12

  • Sửa lỗi dương tính giả của bộ giải mã trên Windows.

5.0.0 2024-12-28

  • Thêm hỗ trợ mã hóa thư viện Java riêng lẻ (Bản xem trước), cho phép ứng dụng chạy với JRE thông thường

4.8.1 2024-12-08

  • Sửa lỗi không kiểm tra loại tệp khi xử lý tác vụ Tomcat.

4.8.0 2024-11-30

  • Sửa lỗi không thể chạy trên Windows 7
  • Sửa lỗi module jdk.net không được nhập

4.7.1 2024-09-19

  • Sửa lỗi ứng dụng Linux được tạo không chạy đúng

4.7.0 2024-09-08

  • Sửa lỗi chương trình được tạo không thể chạy trên macOS
  • Sửa lỗi dương tính giả của phần mềm bảo mật

4.6.2 2024-07-21

  • Thêm tùy chọn xóa tệp application.properties khỏi thư viện cho ứng dụng SpringBoot
  • Thêm thanh cuộn để giải quyết vấn đề các phần tử trên cửa sổ không hiển thị đầy đủ khi cửa sổ quá nhỏ.

4.6.1 2024-05-25

  • Sửa lỗi tải lại vlxjre8 trên Mac.
  • Sửa lỗi thiếu tùy chọn JVM khi tải TaskInfo.

4.6.0 2024-04-30

  • Cập nhật JDK để giải quyết vấn đề thiếu module đăng nhập
  • Cập nhật add-permission-script.sh

4.5.3 2024-03-16

  • Thêm Tomcat 10.1.19

4.5.2 2024-03-02

  • Sửa lỗi trình bao bọc trên Windows

4.5.1 2024-03-01

  • Sửa lỗi chữ ký liên quan đến Java 21

4.5.0 2024-02-25

  • Sửa lỗi virtual thread không hoạt động

4.4.0 2024-02-24

  • Sửa lỗi liên quan đến bộ giải mã

4.3.0 2024-02-06

  • Cập nhật Tomcat lên 9.0.85

4.2.2 2024-01-31

  • Xóa tệp wrapper.json không cần thiết

4.2.1 2024-01-25

  • Sửa lỗi script phân quyền

4.2.0 2024-01-23

  • Sửa lỗi broken pipe gây thoát ứng dụng
  • Sửa lỗi tự động dọn dẹp thư mục /tmp gây thoát ứng dụng
  • Sửa lỗi Java 8 không tìm thấy libfreetype trên macOS
  • Sửa lỗi xung đột khi tồn tại nhiều tệp application.properties

4.1.0 2023-10-30

  • Sửa lỗi liên quan đến JDK8
  • Sửa lỗi broken pipe trên Linux và macOS.
  • Người dùng Trung Quốc giờ có thể chọn máy chủ https://protector4j.cn

4.0.1 2023-10-24

  • Nâng cấp bộ giải mã

4.0.0 2023-10-17

  • Thêm hỗ trợ Java 21
  • Tăng cường bảo mật để bảo vệ mạnh hơn

3.3.0 2023-09-29

  • Sửa lỗi dự án Tomcat không khởi động đúng.
  • Cảnh báo khi tồn tại các lớp trùng lặp trong dự án

3.2.0 2023-08-24

  • Sửa lỗi mã hóa Windows trong môi trường đa ngôn ngữ

3.1.1 2023-08-02

  • Sửa lỗi ký tự bị lỗi trong đường dẫn không phải tiếng Anh

3.1.0 2023-07-22

  • Sửa các lỗi liên quan đến ZipInputStream.
  • Sửa các lỗi liên quan đến ZipFileSystem
  • Sửa các lỗi khác

3.0.2 2023-05-29

  • Sửa lỗi giải mã trên Windows

3.0.1 2023-05-25

  • Sửa lỗi khởi động phiên bản mac-aarch64

3.0.0 2023-05-20

  • Hệ thống khởi động ứng dụng mới
  • Hệ thống giải mã mới
  • Java 8 giờ có thể chạy chương trình bằng lệnh -jar

2.12.5 2023-05-12

  • Sửa lỗi JDK8 không tìm thấy freetype trên macOS

2.12.4 2023-02-28

  • Cập nhật backend