Ghidra Cheat Sheet 🐲 :simple-dragonframe:

Ghidra là một khung phân tích phần mềm mạnh mẽ bao gồm các công cụ phân tích mã code, phân dịch (disassembly), và dịch ngược (decompilation).


1. Quy trình phân tích mã nguồn (Reverse Engineering Workflow)

Hiểu vòng đời của một dự án trong Ghidra để tối ưu hóa việc phân tích.

graph TD A[New Project] --> B[Import File/Binary] B --> C[Auto Analysis] C --> D{Analysis Phase} D --> E[Navigation & Exploration] D --> F[Data Type Recovery] D --> G[Function Labeling] E & F & G --> H[Scripting & Automation] H --> I[Final Documentation/Export]

2. Phím tắt thần thánh (Essential Shortcuts)

Hệ thống phím tắt giúp tăng tốc độ “đọc” mã lên gấp nhiều lần.

Phím tắt điều hướng & View

Phím tắtChức năngÝ nghĩa
GGo ToĐi đến địa chỉ, nhãn (Label) hoặc tên hàm cụ thể
LRenameĐổi tên biến, tên hàm, nhãn (Cực kỳ quan trọng để hiểu luồng)
YRetypeThay đổi kiểu dữ liệu (Data Type) của biến hoặc hàm
Ctrl + EEdit FunctionChỉnh sửa thuộc tính hàm, tham số, Calling Convention
Ctrl + FFindTìm kiếm trong cửa sổ hiện tại
XReferencesXem các tham chiếu (Xrefs) - Gói tin này được gọi ở đâu?
F5Refresh DecompilerCập nhật lại mã C sau khi bạn đổi tên hoặc kiểu dữ liệu
Alt + Up/DownNavigationDi chuyển đến hàm trước hoặc sau trong danh sách

Phím tắt xử lý dữ liệu (Data & Assembly)

Phím tắtChức năngGiải thích
DDataChuyển vùng nhớ hiện tại thành dữ liệu (Byte, Word, Dword)
CClearXóa định nghĩa tại địa chỉ (trở về byte chưa xác định)
[`ArrayTạo mảng (sau khi đã xác định kiểu dữ liệu bằng D)
PCreate FunctionÉp Ghidra coi vùng mã hiện tại là một hàm
UUndefineHủy định nghĩa hàm hoặc dữ liệu
’ (Single Quote)Edit LabelChỉnh sửa nhãn tại địa chỉ hiện tại
TChoose Data TypeMở bảng chọn kiểu dữ liệu nâng cao (struct, union)

3. Các cửa sổ chức năng quan trọng (Windows & Views)

Ghidra chia nhỏ giao diện thành các công cụ chuyên biệt.

  • Hiển thị mã máy (Assembly).
  • Nơi bạn thực hiện các thao tác logic như Patch Byte, đặt Label.
  • Cung cấp cái nhìn chi tiết về cách bộ nhớ được tổ chức.
  • Chuyển đổi mã Assembly sang mã giả C (Pseudo-C).
  • Đây là nơi hầu hết các nhà phân tích dành thời gian để hiểu logic chương trình.
  • Chú ý: Mã C này là “phỏng đoán”, không phải mã gốc 100%.
  • Quản lý Exports, Imports, Functions, Labels.
  • Giúp tìm nhanh các hàm thư viện (như printf, malloc, WinMain).
  • Thư viện các cấu trúc dữ liệu.
  • Cho phép nạp file header .h để định nghĩa các struct phức tạp.

4. Kỹ thuật phân tích chuyên sâu (Deep Analysis)

Xử lý Cấu trúc dữ liệu (Structures)

Khi gặp một con trỏ trỏ tới một vùng nhớ có nhiều biến (struct), hãy thực hiện:

  1. Vào Data Type Manager.
  2. Chuột phải -> New -> Structure.
  3. Định nghĩa các trường (Fields), kích thước.
  4. Tại mã nguồn, nhấn Y trên biến đó và gõ tên struct vừa tạo.
  5. Mã C sẽ tự động chuyển từ *(int *)(ptr + 8) thành ptr->my_variable.

Phân tích gián tiếp (Indirect Calls)

Sử dụng Thunk FunctionsConstant References để giải quyết các lời gọi hàm động (Dynamic calls).


5. Ghidra Scripting & Tự động hóa

Ghidra hỗ trợ script bằng JavaPython (Jython).


6. Sửa đổi mã (Patching Binaries)

Ghidra không chỉ để đọc, nó có thể sửa đổi logic chương trình.

  1. Tại cửa sổ Listing, chọn dòng lệnh cần sửa.
  2. Chuột phải -> Patch Instruction (hoặc nhấn Ctrl + Shift + G).
  3. Nhập lệnh Assembly mới (ví dụ: đổi JZ thành JNZ để bypass check).
  4. Lưu ý: Để lưu file thực thi mới, bạn cần dùng script SavePatch.py hoặc sử dụng các Plugin như Ghidra2Exe.

7. Các Plugin “Phải có” cho người dùng nâng cao

PluginMô tả
Ghidra-DarkCung cấp giao diện tối (Dark mode) để bảo vệ mắt.
FindCryptTự động tìm kiếm các hằng số của các thuật toán mã hóa (AES, SHA…).
GhidraSRETập hợp các công cụ hỗ trợ phân tích Malware.
LazyGhidraThêm các phím tắt và menu chuột phải tiện lợi cho việc đổi tên/kiểu.

8. Mẹo chẩn đoán và khắc phục sự cố


9. Bảng tra cứu nhanh các kiểu dữ liệu trong Ghidra

Ghidra TypeC TypeSize (Typical)
dbchar / byte1 byte
dwshort / word2 bytes
ddint / dword4 bytes
dqlong long / qword8 bytes
undefinedUnknown1 byte
pointervoid *4/8 bytes (tùy kiến trúc)