× Giới thiệu Lịch khai giảng Tin tức Sản phẩm học viên

Trình biên dịch ngược trong Java mà mọi LTV đều nằm lòng

07/06/2021 02:06

Bạn đã bao giờ tự hỏi liệu có công cụ nào để chuyển đổi tệp lớp đã biên dịch trở lại mã nguồn trong Java hay không? Quá trình biên dịch trong Java chỉ là quá trình biên dịch ngược lại. Cho đến giờ, chúng ta đã biên dịch các chương trình Java của chúng ta thành tệp thực thi. Những trong bài viết này, chúng ta sẽ học cách dịch ngược tệp lớp thành mã nguồn Java. Để phục vụ cùng một mục đích, có rất nhiều trình dịch ngược Java mà chúng ta có thể sử dụng để dịch ngược mã. 

 

Trình biên dịch ngược trong Java là gì?

Trình biên dịch ngược trong Java là một loại đặc biệt của trình biên dịch thể hiện quá trình đảo ngược của trình biên dịch Java. Nó trả lại mã nguồn tương ứng trong Java tới mã Đối tượng ở dạng tệp lớp ở dạng nhị phân. Nói một cách đơn giản, trình dịch ngược trong Java lấy tệp lớn làm đầu vào và tạo ra mã nguồn trong Java làm đầu ra. Nhưng trình dịch ngược không bao giờ tạo ra bản sao chính xác của mã nguồn ban đầu. Nguyên nhân là do có một số loại mất thông tin từ mã nguồn trong khi biên dịch chương trình Java. 

Trình biên dịch ngược trong Java là gì?

Trình biên dịch ngược trong Java là gì?

Có một số chương trình dịch ngược Java có sẵn, nhưng việc lựa chọn trong vô vàn các trình dịch ngược là vô cùng khó khăn. Do vậy, chúng ta sẽ cùng thảo luận về một số trình dịch ngược phổ biến và được sử dụng rộng rãi trong Java.

Khái niệm JAD Decompiler

JAD ( Java Decompiler) là trình dịch ngược không được duy trì trong Java. JAD cung cấp giao diện dòng lệnh cho người dùng. Ứng dụng dòng lệnh này chuyển đổi các tệp .class vào tệp java. Nó sẽ biên dịch ngược lại các tệp lớp hoặc biên dịch code thành mã nguồn Java. Ứng dụng JAD cơ bản được viết trong ngôn ngữ C++. Nó giúp lập trình viên làm đẹp code trong Java để tăng cường khả năng đọc của mã nguồn được tạo ra. 

Trình biên dịch ngược trong Java - DJ Java Decompiler (UI cho JAD) 

Trình biên dịch ngược DJ Java là trình dịch ngược dựa trên cửa sổ tạo mã nguồn Java từ tệp lớp nhị phân được biên dịch. Nó hoạt động như một GUI (GIao diện người dùng đồ họa) cho các trình dịch ngược JAD. Nó được phát triển bởi Atanas Nehskov. 

Trình dịch ngược DJ này có thể dịch ngược DJ này có thể dịch ngược các tệp đã biên dịch thành mã  nguồn ban đầu dưới dạng thử nghiệm này rất đơn giản và dễ sử dụng. Điều thú vị là ngay cả khi bạn chưa cài đặt Java trong máy thì bạn cũng có thể làm việc với trình dịch ngược Java này. Ngoài ra, bạn có thể dịch ngược nhiều tệp lớp cùng một lúc.

>>> Đọc thêm: Định danh trong Java - Quy tắc định danh trong lập trình Java

Trình biên dịch ngược trong Java  - JDProject (Dự án trình biên dịch Java) 

Dự án trình biên dịch Java (JDProject) là một bộ công cụ được phát triển để trích xuất mã nguồn từ tệp lớp nhị phân đã được biên dịch nhất định. Nó là một trong những trình dịch ngược Java ngoại tuyến để dịch ngược mã Java được viết bằng Java 5 và các phiên bản mới hơn. Trình dịch ngược này có thể được sử dụng cho tất cả các nền tảng. Nó bao gồm ba công cụ: JD-GUI, JD-core, JD- Eclipse, JD- Intellij, JD-GUI là một giao diện đồ thoaj để hiển thị mã nguồn tương ứng với các tệp lớp. JD - Eclipse là một nền tảng trình plug=in cho IDE eclipse. JD - Intellij là một trình Plug-in cho Intellij IDEA.

Trình biên dịch ngược trong Java - Procyon

Procyon là một trình dịch ngược Java khác. Nó được phát triển bởi Mike Strobel. Sử dụng Procyon rất dễ sử dụng khi làm việc với các chú thích, enum, các lớp Local, và các tham chiếu Phương thức và Lambdas của Java 8.

Trình biên dịch ngược trong Java - JBVD

JBVD là viết tắt của Java Bytecode Viewer và Decompiler. Nó hoạt động trên cơ sở các thư viện- mã nguồn mở JavaScript. Nó chỉ có thể sử dụng cho hệ điều hành Windows. Nhưng nếu chúng ta muốn làm việc với trình dịch ngược này, chúng ta cần cài đặt Java trong hệ thống của mình.

Trình biên dịch CFR

Dạng đầy đủ của CFR Class File Reader. Decompiler này được viết hoàn toàn bằng Java6. Tuy nhiên, trình dịch ngược này vẫn hỗ trợ các chức năng  mới nhất của java 8 như lambdas. Chỉ có một hạn chế của việc sử dụng trình dịch ngược này là nó không phải là một chương trình mã nguồn mở.

>>> Đọc thêm: Java Null - Khám phá các sự thật chưa biết về Java Null

Ưu điểm và nhược điểm của trình biên dịch ngược trong Java 

Ưu điểm của trình dịch ngược Java

Có rất nhiều ưu điểm mà chúng ta nên sử dụng trình biên dịch ngược:

  • Các trình biên dịch có thể tiết kiệm thời gian của chúng ta khi đã mất mã nguồn tương ứng của mã byte nhị phân. Nếu chúng ta có mã đã biên dịch, thì chúng ta có thể dễ dàng lấy mã nguồn với sự trợ giúp của trình đình ngược.
  • Trình biên dịch là thành phần được đánh giá cao của bất kỳ bộ vi phạm bản quyền phần mềm nào.
  • Trình biên dịch cũng giúp chúng ta làm rõ hoặc cải thiện những tài liệu kém. Sau khi tạo mã nguồn từ bytecode, chúng ta sẽ nhận được tài liệu thích hợp cho từng dòng mã mà chúng không thực sự được viết trong mã.

>>> Tham khảo: Khóa học lập trình Java

Nhược điểm của trình dịch ngược trong Java

Bên cạnh những ưu điểm trên, Trình dịch ngược Java cũng có một vài nhược điểm. Ví dụ như mã Java có cấu trúc và mã byte không có cấu trúc. Hơn nữa, sự chuyển đổi không phải là một, hai chương trình Java khác nhau có thể mang lại mã byte giống hệt nhau.

Kết luận: Trên đây là một số thông tin về trình biên dịch ngược trong Java. Hy vọng bạn có thể hiểu rõ hơn về trình biên dịch ngược và có thể áp dụng các kiến thức này trong các dự án tiếp theo của mình. Tìm hiểu thêm về các khóa học lập trình Java qua các khóa học lập trình tại Viện công nghệ thông tin T3H.