Binary Ninja
Binary Ninja (Binja) เป็น reverse engineering platform ที่เด่นเรื่อง Intermediate Language (BNIL) หลายระดับและ Python API ที่สะอาดที่สุด เหมาะกับงาน automation/deobfuscation บทนี้ลงลึก BNIL แต่ละชั้น, การ navigate, Python API, และเทคนิคแก้โจทย์
1. Binary Ninja คืออะไร
Binary Ninja เป็น reversing platform เชิงพาณิชย์ (ถูกกว่า IDA มาก, มี cloud version ฟรีให้ลอง) จุดเด่นหลักคือ BNIL (Binary Ninja Intermediate Language) หลายระดับ และ Python API ที่สะอาดและทรงพลังที่สุดในบรรดา RE tools — เหมาะกับการเขียน automation, deobfuscation, และ analysis แบบ programmatic
2. BNIL — IL หลายระดับ (จุดเด่น)
Binja แปลง assembly เป็น IL หลายชั้น ให้เลือกดูระดับที่เหมาะกับงาน — ยิ่งสูงยิ่งใกล้ C ยิ่งต่ำยิ่งใกล้ asm:
| ระดับ IL | ลักษณะ | ใช้เมื่อ |
|---|---|---|
| Disassembly | assembly ดิบ | ดู instruction จริง |
| LLIL (Low Level) | ใกล้ asm แต่ normalize | วิเคราะห์ระดับ instruction |
| MLIL (Medium Level) | มีตัวแปร, ตัด register | วิเคราะห์ data flow |
| HLIL (High Level) | ใกล้ C ที่สุด | อ่าน logic (เหมือน decompiler) |
3. Navigate และคีย์ลัด
- G: goto address; N: rename; Y: change type
- X: cross-references; double-click = ตามไป
- Esc / Alt+←: ย้อนกลับ
- ; comment; Space: สลับ linear/graph view
- Triage Summary แสดงภาพรวม binary ตอนเปิด
4. Python API (จุดแข็งสุด)
import binaryninja as bn
bv = bn.load("./binary") # โหลด binary
# วน loop ทุกฟังก์ชัน
for func in bv.functions:
print(hex(func.start), func.name)
# อ่าน HLIL (ใกล้ C) ของฟังก์ชัน
func = bv.get_functions_by_name("main")[0]
for block in func.hlil:
for instr in block:
print(instr)
# อ่าน/เขียน byte (deobfuscate / patch)
data = bv.read(0x402000, 16)
key = 0x42
print(bytes(b ^ key for b in data))
bv.write(0x401234, b'\x90') # patch NOP
# ใช้ใน console ในตัว (ด้านล่าง) ได้ด้วย — bv พร้อมใช้5. เทคนิค CTF + เลือก tool
- หา flag check: search strings → xref (X) → ไปโค้ด → อ่าน HLIL
- deobfuscation: จุดแข็ง Binja — เขียน API วน decode/patch ทั้งไฟล์ผ่าน MLIL/HLIL
- track data flow: MLIL/SSA form ช่วยตามค่าตัวแปรย้อนกลับ (เช่นหาที่มาของ key)
- reverse algorithm จาก HLIL → เขียน solver
- เลือก tool: Ghidra (ฟรี), IDA (มาตรฐาน), Binja (เด่น API/IL — งาน scripting/deobfuscation)
6. Quick Reference
- RE platform เด่นเรื่อง BNIL + Python API
- BNIL: Disassembly → LLIL → MLIL → HLIL (เลือกระดับ)
- HLIL อ่านง่ายสุด; MLIL ดี track data flow
- คีย์: G goto, N rename, Y type, X xref
- API: bn.load(); bv.functions; func.hlil; bv.read/write
- เด่นงาน automate/deobfuscation; ราคาถูกกว่า IDA, มี Cloud ฟรี
🧭 จับมือทำทีละขั้น (มีแค่ Kali) + ถ้าติดไปไหนต่อ
สมมติอยากได้ Python API ที่สะอาดแบบ Binary Ninja แต่เครื่อง Kali เปล่าๆ ไม่มี Binja ติดตั้ง (ไม่ได้มากับ Kali) ทำตามนี้ทีละขั้น
- 1เช็คว่ามี Binary Ninja ในเครื่องไหม (which binaryninja หรือดู path ที่ติดตั้ง)
- 2ถ้าไม่มี เริ่มด้วย ghidra ก่อน (มีใน Kali ฟรี) ทำ static ปกติ: file → strings → imports → analyze → main
- 3ถ้างานต้องการ automation/scripting เยอะ (decode ทั้งไฟล์, patch หลายจุด) ลองใช้ Ghidra headless + Python (Flat API) แทนไปก่อน
- 4ถ้าอยากลองของจริงแบบไม่เสียเงิน สมัคร Binary Ninja Cloud (ฟรี ใช้ผ่านเบราว์เซอร์) แล้วอัพโหลด binary ไปวิเคราะห์
- 5ถ้าจำเป็นต้องมี Binja ติดตั้งจริงจัง (โจทย์ deobfuscation หนักๆ) พิจารณา Personal license (ถูกกว่า IDA มาก)
- 6ทำงานแบบเดียวกับ ghidra: หา main → อ่าน HLIL (คล้าย pseudo-C) → rename/retype → X ดู xref
- 7เขียน Python API script (bn.load, bv.functions, bv.read/write) เพื่อ automate deobfuscation
- 8เปรียบเทียบผลกับ ghidra ถ้าอ่านไม่ออกจากตัวหนึ่ง ลองอีกตัว
| ขั้นตอน/งาน | เครื่องมือใน Kali | ติดตั้งเพิ่ม (ถ้าไม่มี) | เครื่องมือออนไลน์ |
|---|---|---|---|
| เช็ค type/arch | file | - | - |
| ดึงข้อความเร็วๆ | strings | - | CyberChef |
| decompiler ที่มีใน Kali (ทดแทน Binja ได้) | ghidra | apt install ghidra | dogbolt.org |
| ลอง Binja จริงโดยไม่ติดตั้ง | - | - | Binary Ninja Cloud (cloud.binary.ninja) |
| เทียบผล decompiler หลายตัว | - | - | dogbolt.org |
| เทียบ assembly กับ compiler | - | - | godbolt.org |
| automate แบบ headless (แทน Binja API) | ghidra (Python script) | - | - |
| debug ค่า runtime | gdb + gef/pwndbg | apt install gdb | - |
หัวข้อที่เชื่อมโยง
โน้ตของฉัน
ยังไม่มีโน้ตสำหรับหัวข้อนี้