Logo CyberJutsu
Về chúng tôi
Học thử

Tổng hợp công cụ debug trên Windows, Linux và macOS

Technical Writer
Reverse EngineerBinary Exploitation
“Để trở thành một pentester giỏi, bạn phải quen thuộc với debugger như một nghệ sĩ với chiếc bút của mình - nó không chỉ là công cụ, mà là cánh tay nối dài của tư duy.”

Giới thiệu: Debug là gì ?

Debug là quá trình quan trọng giúp chúng ta hiểu rõ cách chương trình chạy, tìm bug và lỗ hổng. Trong Reverse Engineering và Pwnable, debug không chỉ là “tìm bug”, mà còn là cách để chúng ta nhìn thấy bên trong chương trình: lệnh nào đang được thực thi, dữ liệu nằm ở đâu, stack thay đổi thế nào, và control flow có thể bị điều khiển ra sao. Vì vậy, để debug hiệu quả, chúng ta cần đến các debugger — những công cụ giúp hacker, pentester và người học bảo mật phân tích chương trình ở tầng thấp một cách trực quan và chính xác hơn.

I. Công cụ đa nền tảng (Cross-platform)

GDB - GNU Debugger

  • Link: gnu.org/software/gdb
  • Hỗ trợ: Linux, macOS, Windows (MinGW/Cygwin); nhiều kiến trúc (x86, x86-64, ARM, MIPS, RISC-V…).
  • Mô tả: GDB là trình gỡ lỗi dòng lệnh cổ điển của GNU. Nó cho phép dừng/breakpoint tại bất kỳ chỗ nào, kiểm tra giá trị register, biến, memory và điều khiển từng bước thực thi. Bạn có thể điều khiển luồng chương trình, xem stack, disassembly, thậm chí ghi nhật ký debug. GDB thường đi kèm với các plugin như Pwndbg/GEF giúp đổi màu, thêm tính năng tự động tạo chuỗi gây lỗi (cyclic pattern), phân tích heap, debug qua QEMU… biến nó thành “hacker Swiss Army Knife” cực mạnh.

Ưu điểm:

  • Miễn phí, phổ biến trên Linux và nhiều nền tảng khác.
  • Hỗ trợ breakpoint, watchpoint, xem register, stack, disasm.
  • Chạy trên máy ảo hay remote debug (ví dụ thông qua gdbserver).
  • Tích hợp tốt với các IDE/Editor, hỗ trợ scripting Python.

Nhược điểm: Giao diện CLI ban đầu hơi khô khan với người mới; có đường cong học tập (nhất là không có GUI).

Quickstart:

  1. Biên dịch chương trình với flag debug: gcc -o example example.c.
  2. Chạy GDB và nạp chương trình: gdb ./app
  3. Trong GDB, đặt breakpoint ví dụ: break main, sau đó gõ run.
  4. Dùng các lệnh step, next, print variable, info registers để theo dõi.
    • Ví dụ: print x hiện giá trị biến x; x/16xb $rsp xem 16 byte dưới stack.

Ứng dụng thực tế: GDB là chuẩn mực để debug trên Linux. Từ việc sửa lỗi phần mềm cho tới tận dụng trong CTF pwn, GDB (với Pwndbg/GEF) được dùng trong hầu hết các cuộc thi pwnable. Giảng viên an toàn thông tin thường hướng dẫn học viên “nhìn runtime qua debugger” sau khi đã học qua static analysis.

LLDB - Debugger hiện đại của LLVM (macOS)

  • Link: lldb.llvm.org
  • Hỗ trợ: macOS (i386, x86-64, AArch64/Apple Silicon) và cả iOS. Cũng có bản chạy trên Linux, hỗ trợ x86, ARM và các nền Unix.
  • Mô tả: LLDB là debugger thế hệ mới, hiệu năng cao, do dự án LLVM phát triển. LLDB thường được xem là default debugger trên Xcode (macOS). Nó tận dụng mã của LLVM/Clang để hỗ trợ tốt cho ngôn ngữ C, C++, Objective-C, Swift… ngoài ra nó còn hỗ trợ cú pháp hiện đại, nhiều lệnh đa dòng, hỗ trợ debug trên iOS. LLDB cho phép breakpoint, xem backtrace, inspect variables cũng như script Python mở rộng.

Ưu điểm:

  • Tích hợp sẵn trên macOS/iOS.
  • Mạnh về ngôn ngữ Apple (Swift, ObjC), cú pháp tương tự GDB nhưng có nhiều tiện ích.
  • Có giao diện GUI với Xcode, hoặc chạy CLI. Hỗ trợ script với Python, remote debug.
  • Hỗ trợ đầy đủ kiến trúc mới (AArch64, v.v.) mà LLVM phát triển.

Nhược điểm: Có ít tài liệu tiếng việt hơn GDB. Nếu chuyển từ GDB sang LLDB thì mất thời gian học lại vài lệnh khác biệt.

Quickstart:

1. Trên macOS, compile: clang -g -o app app.c

2. Chạy LLDB: lldb ./app

3. Đặt breakpoint: (lldb) breakpoint set --name main. Dùng run để bắt đầu.

4. Các lệnh tương tự GDB: next, step, frame variable varname, register read.

  • Ví dụ: thread backtrace xem call stack; expr varname in ra giá trị.

Tip: Nếu quen GDB, xem LLDB Tutorial hoặc sơ đồ trong phần mapping để chuyển từ GDB sang LLDB. Trên macOS, LLDB là lựa chọn ưu tiên do tương thích tốt với hệ Apple (có sẵn trong Xcode).

Ứng dụng thực tế: LLDB rất phù hợp với macOS, Apple Silicon, iOS/macOS app và các project dùng LLVM/Clang. Nếu bạn dùng MacBook M1/M2/M3/M4, LLDB gần như là lựa chọn tự nhiên để debug chương trình C/C++, Swift, Objective-C hoặc Assembly ARM64. Với người học Assembly trên macOS, LLDB giúp hiểu rõ cách function call, stack frame và register hoạt động trên kiến trúc ARM64.

Radare2 & Cutter - Framework RE mã nguồn mở

  • Link: radare2 GitHub, Cutter (giao diện đồ hoạ)
  • Hỗ trợ: Đa nền tảng (Linux, Windows, macOS) với hỗ trợ nhiều kiến trúc CPU (x86, ARM, MIPS, RISC-V, …).
  • Mô tả: Radare2 (r2) là bộ công cụ RE hoàn chỉnh, ban đầu viết cho Unix, sau này mở rộng qua Rizin. Radare2 gồm tập hợp tiện ích command-line phục vụ phân tích nhị phân, debug, emulation… Đặc biệt, r2 có debug rất mạnh: có thể debug chương trình cục bộ hoặc thông qua server như GDB/Windbg. Công cụ có các plugin tùy chọn, hỗ trợ script (via r2pipe) và đầu ra hiển thị dạng text. Vì giao diện trên r2 khá cơ bản, cho nên Cutter ra đời như frontend Qt cho Rizin, cung cấp giao diện biểu đồ, hex view, decompiler tích hợp (Ghidra decompiler) và debugger đa nền tảng. Cutter cho phép debug native (tới mức beta) trên Windows/Linux/macOS với giao diện dễ tiếp cận hơn radare2 thuần CLI.

Ưu điểm:

  • Hoàn toàn miễn phí, mã nguồn mở (GPLv3).
  • Hỗ trợ debug đa nền tảng, nhiều kiến trúc (xem description radare2).
  • Có thể phân tích, sửa code, patch file, trace execution… Rất linh hoạt cho reverse engineering.
  • Cutter thêm giao diện đồ họa (như IDA Pro) giúp dùng dễ hơn, với decompiler tích hợp của Ghidra.

Nhược điểm: Giao diện CLI của radare2 không dễ nhìn đối với người mới, nhiều lệnh kỳ lạ. Cutter cải thiện GUI nhưng vẫn cần thời gian làm quen. Hiện tại debugger trong r2/Cutter đang là phiên bản beta nên có thể thiếu ổn định.

Quickstart:

  • Với radare2 CLI:
    Sau đó trong shell r2, chạy lệnh aaa (auto-analysis), rồi db main (đặt breakpoint ở main), dc để chạy đến breakpoint. Các lệnh khác như dr (xem register), px @ rip (hexdump từ RIP), aa (analysis)… Dùng ? để xem trợ giúp lệnh. r2 -d ./app # mở file app trong chế độ debug
  • Với Cutter (GUI): Mở Cutter, chọn File → Open chọn chương trình, rồi click chuột phải để đặt breakpoint. Sử dụng thanh công cụ để Play/Pause chương trình. Ta có thể xem biểu đồ hàm (graph view), sửa code ngay trong giao diện, và cài script Python tự động.

Tip: R2/Cutter rất mạnh cho tự động hoá; bạn có thể script mọi thứ. Nếu thấy CLI quá khó, dùng Cutter ban đầu rồi mở terminal bên trong nó để chạy lệnh r2. Ngoài ra, Rizin (radare2 fork) có nhiều cải tiến đáng thử.

Ứng dụng thực tế: Radare2/Cutter phù hợp với người thích CLI, automation và binary analysis nâng cao. Trong thực tế, radare2 thường được dùng trong các trường hợp cần phân tích malware hoặc reverse engineering nâng cao. Ví dụ, nhóm bảo mật có thể dùng Cutter trên Windows để gỡ lỗi một file PE, hay trên Linux để trace một executable. Với tính năng scripting, nó cũng thường được dùng để build “reversing pipeline” tự động.

Ghidra - Framework RE của NSA

  • Link: GitHub/Ghidra
  • Hỗ trợ: Windows, macOS, Linux (đa nền tảng Java). Rất nhiều kiến trúc CPU (x86, ARM, MIPS, PowerPC, RISC-V, …) và định dạng file.
  • Mô tả: Ghidra là framework phân tích mã nguồn mở do NSA phát hành từ 2019. Nó gồm bộ công cụ phân tích tĩnh disassembler, decompiler mạnh mẽ, phân tích luồng (graph view), cross-reference, scripting… Hầu hết dân RE coi Ghidra là công cụ thay thế IDA miễn phí, vì giao diện khá trực quan và có plugin phong phú. Ghidra cũng đã thêm debugger (dùng GDB server) nhưng thế mạnh chính vẫn là static analysis trên nhiều nền tảng. Mã nguồn Ghidra công khai nên ai cũng có thể tự mở rộng bằng Java/Python.

Ưu điểm:

  • Miễn phí, open-source, rất phù hợp giáo dục và nghiên cứu.
  • Giao diện GUI tốt, hỗ trợ cộng tác (project multi-user).
  • Decompiler tích hợp chất lượng cao (tạo ra mã C giả để hiểu logic).
  • Hỗ trợ phân tích đa hệ (Windows PE, Linux ELF, Android… nhiều kiến trúc CPU).
  • Khả năng mở rộng với script (Ghidra API) và kho plugin từ cộng đồng.

Nhược điểm: Debugging trong Ghidra chưa mạnh lắm (dùng GUI Ghidra sẽ gọi GDB/BinDbg phía sau). Học viên có thể bị “ngợp” với quá nhiều tính năng. Vì dùng Java, Ghidra hơi nặng và tốc độ một số thao tác có thể chậm hơn tương đương.

Quickstart:

1. Cài đặt Java (JDK 21 64-bit) rồi tải file Ghidra release (*.zip) và giải nén.

2. Chạy ghidraRun (hoặc ghidraRun.bat trên Windows) để mở GUI Ghidra.

3. Tạo New Project, import file nhị phân. Chọn mã máy phù hợp và để Ghidra tự phân tích.

4. Dùng Decompiler xem mã giả C, hay Listing xem assembly. Đặt breakpoints (qua Debugger → Attach/Launch) để debug nếu cần.

5. Bạn có thể mở Python->GhidraScript để viết macro hoặc tự động phân tích.

Ứng dụng thực tế: Ghidra mạnh nhất ở phần phân tích tĩnh. Trong thực tế, chúng ta có thể dùng Ghidra khi có một binary không có source code và cần hiểu trước cấu trúc chương trình, hàm nào quan trọng, nhánh kiểm tra nằm ở đâu, string nào đáng chú ý, function nào xử lý input.

IDA Pro - Công cụ quốc dân Reverse Engineering chuyên sâu

Link: hex-rays.com/ida-pro

Kiến trúc hỗ trợ: IDA Pro hỗ trợ hơn 60 disassembler theo bảng sản phẩm của Hex-Rays, gồm các kiến trúc như x86-32, x86-64, ARM-32, ARM-64, MIPS-32+nM, MIPS-64, PPC-32, PPC-64, ARC, RISC-V-32, V850-32.

IDA Pro là phiên bản dành cho công việc reverse engineering chuyên sâu, đầy đủ: phân tích malware, audit phần mềm, nghiên cứu lỗ hổng, phân tích firmware, mobile app, embedded system và các binary phức tạp.

Điểm khác biệt lớn nhất của IDA Pro nằm ở độ sâu của hệ sinh thái: disassembler mạnh, decompiler chất lượng cao, debugger tích hợp, scripting, SDK, plugin, Lumina, Teams add-on và khả năng mở rộng workflow. Hex-Rays mô tả IDA Pro là một công cụ kết hợp disassembler, decompiler và debugger trong cùng một môi trường.

Điểm mạnh:

  • Hỗ trợ rất nhiều kiến trúc và định dạng binary.
  • Có local và remote debugger.
  • Có decompiler chất lượng cao, dễ đọc, gần với mã nguồn gốc hơn.
  • Hỗ trợ IDAPython API và C++ SDK để tự động hóa phân tích.
  • Có thể dùng plugin, script, Private Lumina, Teams add-on trong workflow lớn.
  • Phù hợp với malware analysis, vulnerability research, firmware analysis, software assessment và reverse engineering chuyên nghiệp.

Ứng dụng thực tế: IDA Pro thường được dùng khi gặp binary lớn hoặc phức tạp. Ví dụ: phân tích malware bị obfuscate, firmware embedded nhiều kiến trúc, app mobile native, driver, hoặc chương trình thương mại có nhiều lớp bảo vệ. Ngoài ra IDA Pro cũng được dùng hầu hết trong mọi trường hợp với độ phổ biến cao.

II. Công cụ Windows

x64dbg - Debugger mã nguồn mở cho Windows

  • Link: x64dbg.com
  • Hỗ trợ: Chỉ Windows (32-bit và 64-bit).
  • Mô tả: x64dbg là debugger mã nguồn mở chuyên cho Windows, tự nhận là “tiếp theo của OllyDbg” nhưng hỗ trợ đầy đủ 64-bit và GUI hiện đại. Nó tích hợp sẵn engine TitanEngine để debug file EXE/DLL; giao diện trực quan, nhiều chế độ xem (hex, memory map, thanh ghi, code view…) tương tự IDA Pro. x64dbg có cộng đồng phát triển sôi nổi, liên tục cập nhật plugin (profiling, unpacker…), kịch bản (script) và theme tuỳ chỉnh.

Ưu điểm:

  • Mã nguồn mở (GPLv3), dùng miễn phí.
  • Hỗ trợ debug full 64-bit, giao diện trực quan, dễ dùng
  • Hỗ trợ plugin phong phú, thể hiện jump arrows & highlight màu code như IDA.
  • Có scripting, debug symbol PDB, sửa patch trực tiếp.

Nhược điểm: Dành riêng cho Windows, không hỗ trợ debug Linux/Mac. Tài liệu tiếng Việt ít, phải vào các forum hoặc Github để tìm plugin mới.

Quickstart:

1. Tải và cài x64dbg từ trang chính hoặc GitHub.

2. Mở x64dbg, chọn File -> Open một file .exe để debug.

3. Chạy (Run hoặc F9) sẽ dừng tại entrypoint. Tại đây, có thể đặt breakpoint bằng cách nhấp phải vào lệnh và chọn Toggle breakpoint (F2).

4. Dùng F8 (step into), F7 (step over) để lần theo lệnh. Các tab khác cho phép xem giá trị register (Registers pane), memory map, danh sách thread, stack, I/O…

Ứng dụng thực tế: Nếu target là phần mềm Windows (ví dụ service hoặc driver), x64dbg là công cụ đầu tiên nên nghĩ đến. Kết hợp với IDA/Ghidra phân tích tĩnh, x64dbg giúp xác định logic lỗ hổng hoặc hàm quan trọng khi chạy thực tế.

OllyDbg - Debugger 32-bit cổ điển

  • Link: ollydbg.net
  • Hỗ trợ: Windows 32-bit (dù có bản thử nghiệm 64-bit nhưng chưa hoàn thiện).
  • Mô tả: OllyDbg (phiên bản 1.10 cập nhật cuối năm 2013) là debugger chuyên phân tích mã máy, nổi tiếng một thời với khả năng track các đoạn assembly phức tạp mà không cần source. Phát triển đã “đóng băng” từ lâu (không còn bản cập nhật chính thức), nhưng vì dễ dùng nên vẫn được nhiều người dùng. OllyDbg có UI đơn giản, highlight code, phân tích luồng thực thi, hỗ trợ plugin.

Ưu điểm:

  • Giao diện trực quan, tập trung vào assembly (code analysis).
  • Hoạt động “portable” (không cần cài, không ghi registry).
  • Có thể debug ứng dụng 32-bit hoặc DLL.
  • Nhiều plugin bên thứ ba (BPE, hide break, v.v.).

Nhược điểm: 64-bit chưa hẳn ổn định. Dừng phát triển nên chưa cập nhật các tính năng mới. Không hỗ trợ script hiện đại.

Quickstart:

1. Tải bản OllyDbg (phiên bản 1.10) và giải nén. Mở chương trình lên.

2. Kéo thả file .exe (32-bit) vào cửa sổ OllyDbg để nạp.

3. Chạy (F9) để thực thi, thêm breakpoint (F2) tùy ý. Olly có nhiều tuỳ chọn với từng bước chạy (F7, F8), trace, breakpoints điều kiện, v.v.

4. Xem vùng nhớ, sửa câu lệnh trực tiếp bằng cách nhấp đôi, thêm comment hay đặt tên hàm.

Ứng dụng thực tế: OllyDbg vẫn phổ biến trong cộng đồng nghiên cứu malware legacy hoặc giáo dục. Nhiều tài liệu RE cũ (năm 2010 về trước) dùng Olly minh họa, nên việc làm quen với Olly là cần thiết để đọc case study, rồi áp dụng tương tự với x64dbg.

WinDbg - Debugger cao cấp của Microsoft

  • Link: Microsoft Docs: WinDbg
  • Hỗ trợ: Windows (user-mode và kernel-mode) trên kiến trúc x64 và ARM64.
  • Mô tả: WinDbg là bộ gỡ lỗi của Microsoft, chuyên cho việc phân tích crash dump và debug sâu ở mức hệ thống. Nó có thể attach vào ứng dụng đang chạy, hoặc debug driver (kernel) qua kết nối (Ví dụ, debug 2 máy với Null-modem). WinDbg hỗ trợ nhiều lệnh mạnh: xem register, trace code, analyze CPU/memory. Phiên bản mới (WinDbg Preview) có giao diện Modern, script JavaScript/PowerShell và hỗ trợ Time Travel Debugging (TTD).

Ưu điểm:

  • Đặc trị Windows: debug mọi phần của OS và ứng dụng của Windows.
  • Hỗ trợ cả kernel-mode - rất quan trọng cho lập trình driver.
  • Xem và phân tích crash dump (.dmp).
  • Tích hợp mạnh: xem symbol Microsoft, xem thread, source code (nếu có debug info).

Nhược điểm: Rất khó với người mới, giao diện và cú pháp phức tạp. Ít tài liệu Việt. Chủ yếu dùng trong phát triển hệ thống, ít dùng cho CTF thông thường.

Quickstart:

1. Cài WinDbg (qua Windows SDK hoặc Microsoft Store).

2. Để debug user-mode: mở WinDbg, chọn File → Open Executable và chạy. Để debug kernel: nối target qua kênh COM hoặc USB.

3. Thiết lập symbol server: gõ .symfix và reload để dùng symbol Microsoft.

4. Đặt breakpoints: bp MyFunction (ở hàm trong module) và gõ g để chạy. Dùng k xem backtrace, r xem register, !analyze -v để phân tích minidump.

Ứng dụng thực tế: Mọi phần mềm/mã nguồn Windows phức tạp (như driver, antivirus) đều có thể dùng WinDbg để debug. Ví dụ, khi gặp BSOD, dev sẽ load dump trong WinDbg để tìm nguyên nhân. Trong cộng đồng exploit, WinDbg cũng dùng để debug lỗ hổng bảo mật phần mềm.

III. Kết luận

Debugger là vũ khí quan trọng trong bộ công cụ của bất kỳ hacker/malware analyst nào. Hy vọng qua bài này, anh em đã có cái nhìn tổng thể về các debugger phổ biến trên Windows, Linux và macOS, nắm được ưu nhược điểm và khi nào nên dùng công cụ nào. Hãy thử cài đặt và chạy thử từng cái để tìm ra cái bạn thấy “ngầu nhất” và phù hợp với bài toán của mình.

Nguồn tham khảo