Các vấn đề của biên dịch AOT
Biên dịch AOT chuyển đổi mã Java thành mã native, cải thiện đáng kể tốc độ chạy của chương trình Java. Nó gián tiếp đạt được mục tiêu bảo vệ mã Java bằng cách chuyển đổi nó thành mã máy.
Đối với các chương trình Java, đặc biệt là những chương trình dựa trên các framework khác nhau, biên dịch AOT là một thách thức rất lớn do bao gồm nhiều tính năng động. Đồng thời, để thỏa hiệp với tính động, tệp nhị phân đã biên dịch có thể vẫn chứa một lượng lớn thông tin tệp class. Bài viết sau giới thiệu một dự án quét các tệp nhị phân đã biên dịch để lấy thông tin class. https://protector4j.com/vi/articles/extract-java-classes-information-from-aot/
Ngay cả khi chương trình nhị phân không chứa thông tin tệp class, logic chạy của nó vẫn tồn tại theo cùng cách. Sự khác biệt duy nhất là biểu diễn đã thay đổi từ bytecode sang mã máy, mà không có bất kỳ bảo vệ đặc biệt nào. Nếu ai đó có thể hiểu cơ chế biên dịch và thực thi của nó, vẫn có thể dịch ngược ra mã có thể đọc được. Bài viết sau giới thiệu một dự án như vậy. https://protector4j.com/vi/articles/graalvm-nativeimage-reverse-engineering/
Kết luận
Cấu hình biên dịch AOT khó khăn, độ khó biên dịch cao, và xác suất thất bại khi biên dịch cao. Ngay cả khi biên dịch thành công, logic mã chỉ thay đổi từ biểu diễn bytecode sang biểu diễn mã máy. Logic vận hành vốn có vẫn tồn tại mà không có bất kỳ bảo vệ đặc biệt nào. Nếu ai đó có thể hiểu cơ chế biên dịch và thực thi của chính nó, vẫn có thể dịch ngược ra mã có thể đọc được.