I. Dịch ngược mã nguồn là gì?

Dịch ngược mã nguồn (Decomplier, Disassembler) là quá trình chuyển đổi mã mà máy tính đọc được sang mã nguồn mà con người có thể đọc được. Quá trình này có thể hiểu là sự đảo ngược của biên dịch.

Để dễ hiểu hơn, mình sẽ đưa ra một ví dụ như sau:

Mình sẽ dùng C# để viết một chương trình nào đó trên Visual Studio 2019, khi mình thực hiện build chương trình, Visual Studio 2019 sẽ tiến hành biên dịch đoạn mã C# mà mình đã viết thành tập tin chương trình có định dạnh là .exe.

Nếu mình thực hiện chuyển đổi tập tin .exe này trở lại thành những đoạn mã C#, thì quá trình đó được gọi là dịch ngược mã nguồn.

II. ILSpy là gì? Các tính năng chính của ILSpy

ILSpy là trình dịch ngược mã nguồn, có khả năng phân tích các gói phần mềm .NET theo các định dạng WINMD, DLL và EXE. Đây là công cụ mã nguồn mở, bạn có thể xem mã nguồn của ILSpy tại đây:

https://github.com/icsharpcode/ILSpy.

ILSpy sẽ cung cấp cho chúng ta những tính năng chính như sau:

  • Kết xuất và dịch ngược ngôn ngữ lập trình C#, Visual Basic và IL.
  • Hỗ trợ xử lý các định dạng tập tin WINMD, DLL và EXE.
  • Dịch ngược toàn bộ dự án (csproject, không phải sln).
  • Giao diện đơn giản và dễ sử dụng.
  • Dịch ngược BAML sang XAML.

Ngoài ra, ILSpy cũng cung cấp nhiều tính năng khác, vì thế nếu bạn muốn tìm hiểu thêm thì có thể vào link bên trên nha!

III. Cách sử dụng công cụ ILSpy

1. Tải xuống và cài đặt chương trình

Link tải công cụ: https://github.com/icsharpcode/ILSpy/releases.

Bạn vào link bên trên, sau đó chọn cho mình 1 phiên bản và gói cài đặt phù hợp. Đối với mình, thì mình đã chọn ILSpy phiên bản 7.2 và gói cài đặt có tên “ILSpy_binaries_7.2.0.6844.zip”.

Lựa chọn gói cài đặt phù hợp.

Sau khi tải gói cài đặt “ILSpy_binaries_7.2.0.6844.zip” về máy, mình tiến hành giải nén ra 1 thư mục bất kỳ. Tiếp theo đó, mình sẽ mở thư mục có chứa gói cài đặt đã giải nén ra như hình bên dưới.

Giải nén “ILSpy_binaries_7.2.0.6844.zip” ra 1 thư mục bất kỳ.

Để chạy công cụ, mình sẽ nhấn vào tập tin ILSpy.exe. Hình bên dưới là giao diện khi mở công cụ lên.

Giao diện khi mở công cụ ILSpy.

2. Chọn tệp .exe, .dll cần dịch ngược

Để thực hiện dịch ngược mã nguồn, mình sẽ tiến hành mở file .exe, .dll lên. Có một lưu ý ở đây đó là file .exe, .dll phải là tập tin đã được biên dịch từ ngôn ngữ C#.

Chọn tập tin cần dịch ngược.

Sau khi chọn xong file .exe, .dll, thì công cụ sẽ thực hiện dịch ngược về mã nguồn C#. Mình đã tiến hành dịch ngược mã nguồn của 1 ứng dụng nho nhỏ do mình viết (bạn có thể truy cập đọc bài viết đó trong phần “IV. Các bài viết liên quan” ở bên dưới nhé!).

Kết quả khi dịch một ứng dụng viết bằng C#.

Ngoài ra, công cụ này cũng cho phép chúng ta chọn loại, phiên bản của ngôn ngữ lập trình để thực hiện dịch ngược.

+ Khi mình chọn dịch ngược ra C# 10.0 / VS 2022:

Khi dịch ngược ra C# 10.0 / VS 2022.

+ Khi mình chọn dịch ngược ra C# 4.0 / VS 2010:

Khi dịch ngược ra C# 4.0 / VS 2010.

Nếu bạn để ý thì sẽ nhận thấy rằng, mã nguồn C# khi dịch ngược ra với các tùy chọn C# 10.0 / VS 2022 và C# 4.0 / VS 2010 có sự khác nhau.

+ Khi mình chọn dịch ngược ra IL (Intermediate Language – ngôn ngữ trung gian):

Khi dịch ngược ra IL.

IV. Các bài viết liên quan

Bài viết trên mình đã tiến hành dịch ngược 1 ứng dụng nho nhỏ mà mình đã viết, vì thế nếu bạn cần đọc bài viết đó thì có thể nhấn vào link này:

Lập trình C# – Xây dựng trò chơi Kéo Búa Bao không dùng tới câu lệnh if, switch case, biểu thức tam phân.

Ngoài ra, nếu bạn có hứng thú muốn đọc thêm thì có thể đọc những bài viết mà mình giới thiệu ở dưới đây:

V. Lời kết

Qua bài viết này, mình đã chia sẻ cho bạn cách để dịch ngược mã nguồn C# rất đơn giản với công cụ ILSpy. Bạn có thể dùng công cụ trên để phục vụ tốt hơn cho việc lập trình như phân tích, đánh giá mã nguồn, tìm lỗ hổng bảo mật của một chương trình nào đó… Tuy nhiên, bạn không nên dùng nó cho các mục đích xấu như ăn cắp mã nguồn, công nghệ của một chương trình có bản quyền,… vì đây là những hành vi đi không tốt, đi ngược với đạo đức nghề nghiệp và là hành vi vi phạm pháp luật.

Mình sẽ luôn sẵn sàng trả lời những câu hỏi mà bạn đặt ra, vì thế đừng ngần ngại đặt câu hỏi ở phần bình luận. Cuối cùng, cảm ơn bạn đã đọc bài viết, nếu bạn thấy hay thì hãy chia sẻ bài viết đến với nhiều người hơn nhé! Mình sẽ rất vui vì điều đó!

Được phân loại:

Được gắn thẻ:

, ,