IDA Pro
IDA Pro เป็น disassembler/debugger มาตรฐานอุตสาหกรรม พร้อม decompiler Hex-Rays ที่ทรงพลังที่สุด บทนี้ลงลึกการ navigate, คีย์ลัดครบ, การใช้ Hex-Rays decompiler, การ rename/retype, IDAPython, การ debug ในตัว, และเทคนิคแก้โจทย์ CTF
1. IDA Pro คืออะไร
IDA (Interactive DisAssembler) เป็นมาตรฐานอุตสาหกรรมสำหรับ reversing — disassembler + debugger + decompiler (Hex-Rays) จุดเด่นคือความแม่นยำในการวิเคราะห์, ปลั๊กอินจำนวนมาก, debugger ในตัวที่แข็งแรง, และ Hex-Rays decompiler คุณภาพสูงสุด IDA Free ใช้ฟรีได้ (มี Hex-Rays x64 ในรุ่นใหม่) ส่วน IDA Pro ราคาแพงมาก
2. หน้าต่างและ navigate
- IDA View (Disassembly): assembly — มี graph view (default) และ text view
- Pseudocode (F5): Hex-Rays decompiler output (C)
- Functions window: รายการฟังก์ชันทั้งหมด
- Strings window (Shift+F12): string ทั้งหมด
- Imports/Exports: ฟังก์ชันที่ import/export
- Hex View: raw bytes
- double-click = ตามไป;
Esc= ย้อนกลับ (เหมือน back)
3. คีย์ลัดสำคัญ
F5 เปิด Hex-Rays decompiler (pseudocode) — ฟีเจอร์เด่นสุด
Tab สลับ disassembly <-> pseudocode (จากจุดเดียวกัน)
N rename ตัวแปร/ฟังก์ชัน (ทั้งใน asm และ pseudocode)
Y เปลี่ยน type ของตัวแปร/argument (set type)
X cross-references (ใครเรียก/ใช้)
G goto address
; หรือ : ใส่ comment (repeatable / regular)
Space สลับ graph view <-> text view (disassembly)
Esc ย้อนกลับ (navigation back)
Shift+F12 Strings window
Alt+T search text; Ctrl+F ใน window
H แปลงเลขเป็น hex/decimal4. Hex-Rays decompiler + ทำให้อ่านง่าย
กด F5 ในฟังก์ชันเพื่อ decompile เป็น C — เหมือน Ghidra การทำให้อ่านง่ายใช้หลักเดียวกัน:
- N (rename): ตั้งชื่อตัวแปร/ฟังก์ชันให้สื่อความหมาย
- Y (set type): เปลี่ยน type เช่น
__int64→char *; แก้ทั้ง function prototype ได้ - สร้าง struct (Structures window, หรือ Local Types) แล้ว set type ตัวแปรเป็น struct นั้น
- คลิกขวาใน pseudocode → มีตัวเลือก rename/set type/convert มากมาย
- ทำซ้ำเรื่อยๆ — pseudocode จะอ่านเหมือน source จริงขึ้นเรื่อยๆ
5. Debugger ในตัว
IDA มี debugger ในตัว (ต่างจาก Ghidra ที่ต้อง setup) — ใช้ดู runtime value, ข้าม anti-debug, dump ค่าที่ decode แล้ว
- F2: ตั้ง/ยกเลิก breakpoint
- F9: run; F8: step over; F7: step into
- เลือก debugger (local/remote) ที่ toolbar ก่อน run
- ดู register/stack/memory ใน window ระหว่าง debug
- ใช้ดูค่าจริงตอน runtime (เช่นค่าหลัง decode) ที่ static อ่านยาก
6. IDAPython + เทคนิค CTF
# File > Script command (Python) หรือ console ล่าง
import idautils, idc, ida_bytes
# พิมพ์ทุกฟังก์ชัน
for ea in idautils.Functions():
print(hex(ea), idc.get_func_name(ea))
# อ่าน byte แล้ว decode xor (เช่น obfuscated string)
addr = 0x402000
data = ida_bytes.get_bytes(addr, 16)
key = 0x42
print("".join(chr(b ^ key) for b in data))
# patch byte
ida_bytes.patch_byte(0x401234, 0x90) # NOP- หา flag check: Strings (Shift+F12) → ดับเบิลคลิก string → X xref → ไปโค้ด
- reverse algorithm จาก pseudocode (F5) → เขียน solver
- patch: Edit → Patch program → Change byte/Assemble; Apply patches to input file
- FLIRT signatures ช่วยระบุ library function ใน static binary
7. IDA vs Ghidra
| IDA Pro | Ghidra | |
|---|---|---|
| ราคา | แพงมาก (Free จำกัด) | ฟรี (open-source) |
| decompiler | Hex-Rays (คุณภาพสูงสุด) | ดีมาก (ใกล้เคียง) |
| debugger | ในตัว แข็งแรง | มี (ต้อง setup) |
| scripting | IDAPython (ecosystem ใหญ่) | Java/Jython (Flat API) |
| นิยมใน | อุตสาหกรรม/มืออาชีพ/malware | CTF/นักเรียน/ทั่วไป |
8. Quick Reference
- disassembler มาตรฐาน + Hex-Rays decompiler (F5)
- คีย์: F5 decompile, N rename, Y set type, X xref, G goto
- Space = graph/text, Shift+F12 = strings, Esc = back
- debugger ในตัว: F2 bp, F9 run, F8 step over, F7 step into
- อ่านง่าย: N/Y + struct (เหมือน Ghidra)
- IDAPython: idautils.Functions(), patch_byte; automate
- CTF ใช้ Ghidra พอ; IDA เด่นงานใหญ่/malware
🧭 จับมือทำทีละขั้น (มีแค่ Kali) + ถ้าติดไปไหนต่อ
สมมติอยากใช้ IDA แต่เครื่อง Kali เปล่าๆ ไม่มี IDA ติดตั้ง (ไม่ได้มากับ Kali และตัวเต็มมีค่าใช้จ่าย) ทำตามนี้ทีละขั้นเพื่อไปต่อได้โดยไม่ต้องรอ IDA
- 1เช็คก่อนว่ามี IDA ในเครื่องไหม: which ida64 หรือดูใน /opt
- 2ถ้าไม่มี ให้เริ่มด้วยเครื่องมือที่มีใน Kali ก่อน: file ./binary แล้ว strings ./binary
- 3เปิด ghidra (มีใน Kali/ติดตั้งง่าย) แทน — decompiler คุณภาพใกล้เคียงกันมาก พอสำหรับ CTF ทั่วไป
- 4ถ้าอยากเทียบผล decompile หลายตัว (รวม IDA Hex-Rays) โดยไม่ต้องติดตั้งเอง: อัพโหลด binary ไปที่ dogbolt.org
- 5ถ้าจำเป็นต้องใช้ IDA จริง (โจทย์ยากมาก/ต้องใช้ debugger ในตัว) ให้โหลด IDA Free/Home edition มาติดตั้งเพิ่ม
- 6ทำงานต่อด้วย logic เดียวกับ ghidra: หา main → กด F5 อ่าน pseudo-C → rename (N)/retype (Y) → X ดู xref
- 7ถ้าใช้ IDA debugger ในตัว: F2 ตั้ง breakpoint, F9 run, F8/F7 step ดูค่า runtime
- 8เปรียบเทียบผลกับที่ทำใน ghidra ถ้าอ่านไม่ออกจากตัวหนึ่ง ลองอีกตัว (decompiler ต่างกันบางจุดอ่านง่ายกว่ากันคนละที่)
| ขั้นตอน/งาน | เครื่องมือใน Kali | ติดตั้งเพิ่ม (ถ้าไม่มี) | เครื่องมือออนไลน์ |
|---|---|---|---|
| เช็ค type/arch ก่อนเปิดเครื่องมือ | file | - | - |
| ดึงข้อความเร็วๆ | strings | - | CyberChef |
| decompiler ที่มีใน Kali (ทดแทน IDA ได้) | ghidra | apt install ghidra | dogbolt.org |
| เทียบผล decompile หลายตัว (รวม Hex-Rays) | - | - | dogbolt.org |
| เทียบ assembly กับ compiler | - | - | godbolt.org |
| disassemble จาก CLI | objdump, radare2 | apt install radare2 | onlinedisassembler.com |
| debug ค่า runtime (ถ้าไม่มี IDA debugger) | gdb + gef/pwndbg | apt install gdb | - |
| ติดตั้ง IDA เพิ่มถ้าจำเป็นจริงๆ | - | โหลด IDA Free จากเว็บทางการ | - |
โน้ตของฉัน
ยังไม่มีโน้ตสำหรับหัวข้อนี้