Dịch ngược phần mềm bằng Ghidra – Password Crackme

Ghidra

Trong bài hướng dẫn này tôi sẽ crack chương trình cho Windows đơn giản. File chương trình tải ở đây, tôi sử dụng Ghidra – một công cụ dịch ngược phần mềm miễn phí của NSA, xem cách cài đặt ở đây Ghidra Installation Guide. Các kiến thức về lập trình như ngôn ngữ C tôi cho rằng bạn đã nắm cơ bản để có thể tiếp tục.

Trước khi bắt đầu bạn có thể tham khảo cách sử dụng Ghidra qua video GHIDRA Tutorial — Learn How to Use Reverse Engineering Tool. Các bước Create ProjectImport file bạn có thể tự thực hiện sau khi xem hướng dẫn video trên.

Để xem thêm hướng dẫn sử dụng phần mềm Ghidra bạn có thể chọn Help -> Contents từ thanh công cụ hoặc nhấn phím F1.

Dịch ngược phần mềm bằng Ghidra - Password Crackme

Tải file crackme0x05.exe về máy tính của bạn. Sau khi Import File xong Ghidra sẽ hiển thị ra thông tin tổng quan của file:

Dịch ngược phần mềm bằng Ghidra - Password Crackme

File crackme0x05.exe là một file PE (Portable Executable), được biên dịch bằng hợp ngữ x86 và dạng little endian. Bạn có thể xem các thông tin khác và sau đó thì nhấn “OK” để tiếp tục.

Để mở CodeBrowser bạn nhấn vào biểu tượng con rồng trong tab Tool chest.

Dịch ngược phần mềm bằng Ghidra - Password Crackme

Sau khi mở CodeBrowser sẽ có thông báo hỏi có muốn phân tích tệp, bạn chọn “Yes“. Tại cửa sổ Analyzers bạn chọn thêm lựa chọn “WindowsPE x86 Propagate External Parameters” -> Apply -> Analyze.

Dịch ngược phần mềm bằng Ghidra - Password Crackme

Tôi sẽ bắt đầu từ sidebar trái Symbol Tree -> Exports ở đây bạn sẽ thấy hàm _mainCRTStartup. Bạn nháy đúp vào tên hàm để mở code giả C trong phần Decompile hoặc nhấn vào biểu tượng C(f) trong thanh công cụ ở trên.

Dịch ngược phần mềm bằng Ghidra - Password Crackme

Trong các trường hợp khác bạn có thể dễ dàng tìm thấy hàm main từ Symbol Tree -> Functions. Tuy nhiên trong trường hợp này tôi không thấy hàm main ở đó. Còn nếu các bạn hỏi vì sao lại phải đi tìm hàm main thì bạn cần tìm hiểu lại lập trình C. Mọi thứ trong C đều bắt đầu đi từ hàm main trước.

Nếu trong phần Functions bạn có thể nhìn thấy hàm entry thì đó cũng là một khởi đầu tốt.

Tiếp tục chọn vào hàm ___mingw_CRTStartup để có thể tìm thấy hàm main của chương trình.

Dịch ngược phần mềm bằng Ghidra - Password Crackme

Tại dòng 31 bạn đang thấy có gì đó giống như hàm main đang được gọi, tiếp tục nhấn vào nó để đi tiếp.

Dịch ngược phần mềm bằng Ghidra - Password Crackme

Bây giờ chúng ta đã thấy được hàm main thực sự. Các đoạn code trên bạn dễ dàng hiểu nếu như đã từng lập trình qua ngôn ngữ C nên tôi sẽ tạm thời bỏ qua để tập chung vào phần chính là hàm _check().

Dịch ngược phần mềm bằng Ghidra - Password Crackme

Để cho dễ phân tích hơn tôi sẽ chỉnh sửa lại các tên biến sao cho đúng với chức năng của chúng. Chỉnh sửa tên biến trong Ghidra bạn chuột phải vào tên biến chọn Rename Variable hoặc nhấn phím L trên bàn phím.

Dịch ngược phần mềm bằng Ghidra - Password Crackme

Sau khi chỉnh sửa lại toàn bộ, code của tôi trông như này:

Dịch ngược phần mềm bằng Ghidra - Password Crackme

Tại dòng 20 bạn có thể sử dụng tính năng convert số từ dạng hex -> thập phân bằng cách chọn 0x10 và nhấn chuột phải chọn Decimal. Đối với các kiểu dữ liệu khác bạn cũng có thể làm tương tự.

Dịch ngược phần mềm bằng Ghidra - Password Crackme

Như vậy hàm check() sẽ nhận vào pass của ta nhập từ bàn phím, từng ký tự sẽ được lặp cho tới hết chuỗi. Và nếu như giá trị của biến sum = 16 (0x10) thì sẽ gọi vào hàm _parell() hiển thị ra màn hình chuỗi “Password OK!” còn nếu không sẽ hiển thị chỗi “Password Incorrect!“.

Dịch ngược phần mềm bằng Ghidra - Password Crackme

Như vậy là tôi đã hướng dẫn xong các bước để tìm ra đáp án của chương trình chạy trên windows. Hy vọng bài viết hữu ích với các bạn.

Xem thêm: CRACKME