การถอดการทำให้สับสนและกลลวงต่อต้านการวิเคราะห์
ระบุและหลีกเลี่ยงการทำให้สตริงสับสน การทำให้โฟลว์ควบคุมแบนราบ การต่อต้านการดีบัก และการแพ็ก
การถอดการทำให้สับสนและกลลวงต่อต้านการวิเคราะห์ เป็นบทเรียน Cyber Security Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cyber Security Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cyber Security Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดมัลแวร์จึงทำให้โค้ดอ่านยาก
ผู้เขียนมัลแวร์ทำให้โค้ดอ่านยากเพื่อหลบเลี่ยงการตรวจจับลายเซ็นของ AV แบบสแตติก การทำวิศวกรรมย้อนกลับโดยนักวิเคราะห์ และการตรวจจับแซนด์บ็อกซ์ การทำให้โค้ดกลับมาอ่านได้คือกระบวนการกู้คืนโค้ดที่อ่านได้จากรูปแบบที่ถูกทำให้สับสน
การทำให้สตริงอ่านยาก
มัลแวร์มักไม่เก็บ URL ของ C2 หรือชื่อ API ในรูปแบบข้อความธรรมดา เทคนิคทั่วไปมีดังนี้:
- การเข้ารหัส XOR:
key ^ charสำหรับแต่ละไบต์ - การเข้ารหัส Base64
- สตริงบนสแตก: สตริงที่สร้างขึ้นทีละอักขระขณะทำงาน
- การเข้ารหัสแบบกำหนดเองด้วยคีย์ที่ฝังตายตัว
การถอดการทำให้สตริง XOR อ่านยาก
การค้นหาคีย์ XOR:
# If you see single-byte XOR:
import string
for key in range(256):
decoded = bytes([b ^ key for b in encoded])
if all(c in string.printable for c in decoded.decode('latin1')):
print(f"Key {key}: {decoded}")การแพ็กโค้ด
ตัวแพ็กจะบีบอัดหรือเข้ารหัสไบนารีต้นฉบับ และเพิ่มสตับที่คลายแพ็กหรือถอดรหัสขณะทำงาน โค้ดต้นฉบับจะไม่ปรากฏบนดิสก์ ตัวอย่างเช่น UPX (การใช้งานที่ไม่เป็นอันตราย) และตัวแพ็กแบบกำหนดเองในมัลแวร์
การตรวจจับ: ตารางการนำเข้าขนาดเล็ก + เอนโทรปีสูง + ลายเซ็นตัวแพ็กที่รู้จักใน PEID/Detect-It-Easy
เทคนิคต่อต้านการดีบัก
มัลแวร์จะตรวจจับดีบักเกอร์และเปลี่ยนพฤติกรรม:
- IsDebuggerPresent() — การตรวจสอบ Windows API
- การตรวจสอบเวลา — โค้ดที่ทำงานภายใต้ดีบักเกอร์จะทำงานช้าลง
- การตรวจสอบ ptrace — กระบวนการบน Linux สามารถถูก ptrace ได้เพียงครั้งเดียว
- กับดัก INT3 — การตรวจจับจุดหยุดของซอฟต์แวร์
# Linux anti-ptrace:
if (ptrace(PTRACE_TRACEME, 0, 0, 0) == -1) {
exit(); // already being traced!
}การตรวจจับ VM และแซนด์บ็อกซ์
มัลแวร์จะตรวจจับสภาพแวดล้อมเสมือนจริงหรือแซนด์บ็อกซ์ แล้วหยุดรอหรือออกจากโปรแกรม:
- ตรวจสอบบิตไฮเปอร์ไวเซอร์ด้วย CPUID
- ตรวจหาคีย์รีจิสทรี กระบวนการ และไฟล์เฉพาะของ VM
- เวลาที่ระบบเปิดใช้งานสั้น ไม่มีไฟล์ล่าสุด และไม่มีประวัติการท่องเว็บ
- ตรวจสอบการเคลื่อนไหวของเมาส์ (แซนด์บ็อกซ์อัตโนมัติจะไม่ขยับเมาส์)
การทำให้ลำดับการควบคุมอ่านยาก
เทคนิคที่ใช้ทำให้ตัวถอดคำสั่งสับสน:
- การทำให้การกระโดดอ่านยาก — การกระโดดทางอ้อมผ่านที่อยู่ที่คำนวณขึ้น
- เพรดิเคตทึบ — เงื่อนไขที่เป็นจริงเสมอและทำให้การวิเคราะห์สับสน
- คำสั่งซ้อนทับกัน — ฝังข้อมูลไว้ในกระแสคำสั่ง
การหลบเลี่ยงการต่อต้านการดีบักใน GDB
การหลบเลี่ยงเทคนิคต่อต้านการดีบักทั่วไป:
# Patch IsDebuggerPresent return value:
# In GDB: set $rax = 0 after the call
# Or use NOP sled to skip the check:
# In GDB: jump *0x401234 (skip the check)
# Force ptrace to succeed:
set follow-fork-mode childการคลายแพ็กแบบไดนามิก
สำหรับมัลแวร์ที่ถูกแพ็ก ให้สตับสำหรับคลายแพ็กทำงานจนกว่าโค้ดต้นฉบับจะอยู่ในหน่วยความจำ จากนั้นจึงดัมป์ออกมา:
- เรียกใช้ใน GDB จนกว่าสตับของตัวแพ็กจะทำงานเสร็จ
- ค้นหา OEP (จุดเริ่มต้นดั้งเดิม) — มักทำได้โดยตั้งจุดหยุดที่
VirtualAlloc+jmp reg - ดัมป์หน่วยความจำลงไฟล์ด้วย
dump binary memory
การถอดการทำให้โค้ดอ่านยากด้วยการจำลอง
เครื่องมือที่จำลองการทำงานของโค้ดเพื่อเปิดเผยสตริงที่ถูกทำให้อ่านยากโดยไม่ต้องเรียกใช้ไบนารี:
- FLOSS (FireEye) — ดึงสตริงบนสแตกและสตริงที่ถูกทำให้อ่านยาก
- speakeasy — การจำลอง Windows API
- Capa — ระบุความสามารถของมัลแวร์โดยอัตโนมัติ
การจดจำรูปแบบ
การจดจำรูปแบบทั่วไปของมัลแวร์ช่วยเร่งการวิเคราะห์:
- แฮช API: CRC32/ROR13 ของชื่อฟังก์ชันที่ใช้แก้ไขการนำเข้าขณะทำงาน
- รูปแบบการฉีด DLL แบบสะท้อนกลับ
- สตับการเรียกระบบของ NTDLL (การเรียกระบบโดยตรงเพื่อหลบเลี่ยงฮุกของ EDR)
ตรวจสอบอย่างรวดเร็ว: การต่อต้านการวิเคราะห์
ตัวอย่างมัลแวร์ตรวจสอบว่า ptrace(PTRACE_TRACEME) ส่งกลับค่า -1 บน Linux หรือไม่ เทคนิคนี้เรียกว่าอะไร
สรุปบทเรียน
มัลแวร์ทำให้สตริงอ่านยาก (XOR, สตริงบนสแตก) แพ็กโค้ด ตรวจจับดีบักเกอร์ (IsDebuggerPresent, ptrace, การตรวจสอบเวลา) และหลบเลี่ยงแซนด์บ็อกซ์ (การตรวจสอบ VM และการไม่มีกิจกรรม) การถอดการทำให้โค้ดอ่านยากทำได้ด้วยการเดาคีย์ XOR แบบครบทุกค่า การคลายแพ็กแบบไดนามิก (ดัมป์หลัง OEP) และ FLOSS สำหรับสตริงบนสแตก แพตช์หรือหลบเลี่ยงการตรวจสอบต่อต้านการดีบักใน GDB เครื่องมือจำลอง (FLOSS, speakeasy) ช่วยดึงพฤติกรรมได้อย่างปลอดภัย
คำถามที่พบบ่อย
บทเรียน “การถอดการทำให้สับสนและกลลวงต่อต้านการวิเคราะห์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การถอดการทำให้สับสนและกลลวงต่อต้านการวิเคราะห์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cyber Security Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cyber Security Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การถอดการทำให้สับสนและกลลวงต่อต้านการวิเคราะห์”
ระบุและหลีกเลี่ยงการทำให้สตริงสับสน การทำให้โฟลว์ควบคุมแบนราบ การต่อต้านการดีบัก และการแพ็ก คุณปฏิบัติ Cyber Security Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cyber Security Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cyber Security Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การถอดการทำให้สับสนและกลลวงต่อต้านการวิเคราะห์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cyber Security Academy นี้ได้ไหม
ได้ บทเรียน Cyber Security Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Ghidra: การนำทางและใส่คำอธิบายไบนารี
- พื้นฐานแอสเซมบลี x86/x64 สำหรับนักวิเคราะห์ย้อนกลับ
- การวิเคราะห์แบบไดนามิกด้วย GDB และ pwndbg
- การถอดการทำให้สับสนและกลลวงต่อต้านการวิเคราะห์