Skip to content

Unpacking

MITRE ATT&CK · T1027 phase: defense-evasion

Unpacking, packer/stub katmanını soyup gerçek kod ve veriyi ortaya çıkarmaktır. Amaç “her packer’ı otomatik kırmak” değil; OEP (Original Entry Point) civarında belleği dump edip statik analize dönmektir.

- Packer ipucu (DIE, bölüm adları, az import)
- Debugger + dump aracı (x64dbg+Scylla, gdb, pe-sieve)
- Snapshot; anti-debug farkındalığı
  1. Tespit — UPX mi, bilinen packer mi, custom mı?

  2. Bilinen araç — UPX -d, özel unpacker varsa dene.

  3. Runtime — stub’ı adımla; VirtualAlloc + kopyalama döngüsünü izle.

  4. OEP — orijinal entry’ye gelince (tipik pushad/popad veya jmp gerçek kod).

  5. Dump & fix — IAT onar (Scylla); dump’ı Ghidra’da aç.

  6. Doğrula — strings/import anlamlı mı; değilse erken dump etmişsindir.

Terminal window
diec ./sample.bin
Terminal window
upx -t ./sample.bin
Terminal window
upx -d -o sample_unpacked.bin ./sample.bin
Terminal window
file sample_unpacked.bin

UPX bozulmuş/modified ise -d başarısız olur → manuel OEP yolu.

PE (x64dbg):
1. Entry’de dur
2. ESP/stack’e hardware BP (sık “pushad” tekniği) veya
VirtualAlloc dönüşüne BP
3. Yazılan bölgede yürütme başlayınca OEP adayı
4. Scylla: IAT Autosearch → Get Imports → Dump
ELF (gdb):
1. break *entry / TLS callback sonrası
2. mprotect/mmap RWX bölgelerini izle
3. OEP’te gcore veya dd if=/proc/PID/mem …
4. Yeniden file/strings/ghidra
Terminal window
# Linux process memory ipucu (PID bilinirken)
cat /proc/$(pgrep -n sample)/maps
Terminal window
gcore -o /tmp/sample.core $(pgrep -n sample)
Terminal window
file ./dump.exe
Terminal window
strings -a -n 8 ./dump.exe | rg -i 'http|\.dll|password'
Terminal window
rabin2 -i ./dump.exe | head

Hâlâ anlamsızsa: çok erken dump, şifreleme katmanı ikinci tur, veya process hollowing (başka image) — child process’i de dump et.

upx · unpack

embedded tool
Generated command
upx -d -o ./sample_unpacked.bin ./sample.bin

Yalnızca gerçek UPX ise. Modified UPX’te manuel OEP gerekir.

Terminal window
upx -d -o ./sample_unpacked.bin ./sample.bin
- Anti-debug: OEP’e gelmeden çıkış → Frida/patch
- Çok katmanlı packer: dump → tekrar DIE
- .NET: native packer + managed; dnSpy ile modülleri ayrıca aç
- Sadece overlay şifreli veri: kod değil config dump’ı
DIE → custom packer
→ x64dbg VirtualAlloc BP
→ Scylla dump + IAT fix
→ Ghidra’da C2 / ransomware note