คลัง
reverse

IDA Pro

IDA Pro เป็น disassembler/debugger มาตรฐานอุตสาหกรรม พร้อม decompiler Hex-Rays ที่ทรงพลังที่สุด บทนี้ลงลึกการ navigate, คีย์ลัดครบ, การใช้ Hex-Rays decompiler, การ rename/retype, IDAPython, การ debug ในตัว, และเทคนิคแก้โจทย์ CTF

IntermediateAdvanced#ida#reverse#disassembler#decompiler#hex-rays#idapython#ctf

1. IDA Pro คืออะไร

IDA (Interactive DisAssembler) เป็นมาตรฐานอุตสาหกรรมสำหรับ reversing — disassembler + debugger + decompiler (Hex-Rays) จุดเด่นคือความแม่นยำในการวิเคราะห์, ปลั๊กอินจำนวนมาก, debugger ในตัวที่แข็งแรง, และ Hex-Rays decompiler คุณภาพสูงสุด IDA Free ใช้ฟรีได้ (มี Hex-Rays x64 ในรุ่นใหม่) ส่วน IDA Pro ราคาแพงมาก

  • 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. คีย์ลัดสำคัญ

คีย์ลัด IDA
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/decimal
F5 (Hex-Rays) คือฟีเจอร์เด่นสุด; N rename, Y set type, X xref คือคีย์ที่ใช้บ่อยสุดตอน reverse

4. Hex-Rays decompiler + ทำให้อ่านง่าย

กด F5 ในฟังก์ชันเพื่อ decompile เป็น C — เหมือน Ghidra การทำให้อ่านง่ายใช้หลักเดียวกัน:

  • N (rename): ตั้งชื่อตัวแปร/ฟังก์ชันให้สื่อความหมาย
  • Y (set type): เปลี่ยน type เช่น __int64char *; แก้ทั้ง 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

IDAPython (automate)
# 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
IDAPython ใช้ automate: decode strings, patch หลายจุด, ดึงข้อมูล; console อยู่ด้านล่าง
  • หา 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 ProGhidra
ราคาแพงมาก (Free จำกัด)ฟรี (open-source)
decompilerHex-Rays (คุณภาพสูงสุด)ดีมาก (ใกล้เคียง)
debuggerในตัว แข็งแรงมี (ต้อง setup)
scriptingIDAPython (ecosystem ใหญ่)Java/Jython (Flat API)
นิยมในอุตสาหกรรม/มืออาชีพ/malwareCTF/นักเรียน/ทั่วไป
CTF: Ghidra ฟรีและเพียงพอสำหรับโจทย์ส่วนใหญ่; IDA เร็ว/แม่นกว่าในงานใหญ่/malware ถ้ามี license หลายคนใช้ทั้งสองคู่กัน (decompiler ต่างกันบางทีตัวหนึ่งอ่านชัดกว่า)

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. 1เช็คก่อนว่ามี IDA ในเครื่องไหม: which ida64 หรือดูใน /opt
  2. 2ถ้าไม่มี ให้เริ่มด้วยเครื่องมือที่มีใน Kali ก่อน: file ./binary แล้ว strings ./binary
  3. 3เปิด ghidra (มีใน Kali/ติดตั้งง่าย) แทน — decompiler คุณภาพใกล้เคียงกันมาก พอสำหรับ CTF ทั่วไป
  4. 4ถ้าอยากเทียบผล decompile หลายตัว (รวม IDA Hex-Rays) โดยไม่ต้องติดตั้งเอง: อัพโหลด binary ไปที่ dogbolt.org
  5. 5ถ้าจำเป็นต้องใช้ IDA จริง (โจทย์ยากมาก/ต้องใช้ debugger ในตัว) ให้โหลด IDA Free/Home edition มาติดตั้งเพิ่ม
  6. 6ทำงานต่อด้วย logic เดียวกับ ghidra: หา main → กด F5 อ่าน pseudo-C → rename (N)/retype (Y) → X ดู xref
  7. 7ถ้าใช้ IDA debugger ในตัว: F2 ตั้ง breakpoint, F9 run, F8/F7 step ดูค่า runtime
  8. 8เปรียบเทียบผลกับที่ทำใน ghidra ถ้าอ่านไม่ออกจากตัวหนึ่ง ลองอีกตัว (decompiler ต่างกันบางจุดอ่านง่ายกว่ากันคนละที่)
ไม่มี IDA ในเครื่อง แล้วไปต่อยังไง
which ida64 (หรือดู /opt) เช็คว่ามี IDA ในเครื่องไหม
❌ ไม่มี IDA ติดตั้ง (ปกติสำหรับ Kali ล้วนๆ)→ ใช้ ghidra แทนไปก่อน (มีใน Kali ฟรี)
✅ มี IDA ติดตั้ง/มี license→ ใช้ IDA เปิดไฟล์ได้เลย
อยากเทียบผล decompile กับ IDA/Hex-Rays โดยไม่ติดตั้งเอง
อัพโหลด binary ไป dogbolt.org ดูผล decompile หลายตัวพร้อมกัน
✅ อ่านออกจาก decompiler ตัวใดตัวหนึ่งแล้ว→ ใช้ตัวนั้นทำงานต่อ ไม่ต้องติดตั้ง IDA จริง
❌ ยังต้องการ IDA จริง (debugger ในตัว/ปลั๊กอินเฉพาะ)→ ติดตั้ง IDA Free/Home edition เพิ่ม
ติดตั้ง IDA แล้วทำงานแบบเดียวกับ ghidra: F5 decompile, N rename, X xref
ขั้นตอน/งานเครื่องมือใน Kaliติดตั้งเพิ่ม (ถ้าไม่มี)เครื่องมือออนไลน์
เช็ค type/arch ก่อนเปิดเครื่องมือfile--
ดึงข้อความเร็วๆstrings-CyberChef
decompiler ที่มีใน Kali (ทดแทน IDA ได้)ghidraapt install ghidradogbolt.org
เทียบผล decompile หลายตัว (รวม Hex-Rays)--dogbolt.org
เทียบ assembly กับ compiler--godbolt.org
disassemble จาก CLIobjdump, radare2apt install radare2onlinedisassembler.com
debug ค่า runtime (ถ้าไม่มี IDA debugger)gdb + gef/pwndbgapt install gdb-
ติดตั้ง IDA เพิ่มถ้าจำเป็นจริงๆ-โหลด IDA Free จากเว็บทางการ-
🚑 ถ้าตันสนิท ลองท่าถัดไป: ghidra — ทดแทน IDA ได้ในเกือบทุกโจทย์ CTF และมีใน Kali ฟรี; static-analysis — ยังไม่ได้ triage ให้ครบก่อน; dynamic-analysis — ไม่มี IDA debugger ใช้ gdb แทนได้; binary-patching — เข้าใจ logic แล้วแค่ต้องผ่าน check ใช้ radare2/ghidra patch แทน x64dbg/IDA; binary-ninja — อีกทางเลือกถ้าอยากได้ Python API ที่สะอาดกว่า

โน้ตของฉัน

ยังไม่มีโน้ตสำหรับหัวข้อนี้