Skip to content

Dinamik Analiz

dynamic-analysis difficulty: orta

Dinamik analiz, süreci çalıştırırken bellek, API ve kontrol akışını gözler. Packed veya şifreli string’li örneklerde çoğu gerçek içerik ancak runtime’da görünür. İzolasyon (VM snapshot, ağ kesici) şarttır.

- Snapshot’lı VM; host’tan ayrılmış ağ
- Linux: gdb / gef/pwndbg; Windows: x64dbg / WinDbg
- Frida (user / native hook); gerekirse emulator
- Statik triage çıktısı (OEP adayı, şüpheli API)
  1. Snapshot al — bozulursa geri dön.

  2. Entry / TLS / OEP’ye breakpoint koy.

  3. Decrypt / alloc sonrası dump veya string tara.

  4. Anti-debug görürsen patch veya Frida ile atlat.

  5. Davranışı not et — dosya, registry, ağ, child process.

Terminal window
gdb -q ./sample
(gdb) break main
(gdb) run
(gdb) break *0x401234
(gdb) continue
(gdb) info registers
(gdb) x/20gx $rsp
(gdb) disassemble $pc,+32
Terminal window
# gef/pwndbg kuruluysa
gdb -q ./sample
(gdb) checksec
(gdb) vmmap
(gdb) telescope 10
1. Örneği aç (veya attach)
2. Symbols / Imports → CreateProcessW, VirtualAlloc, …
3. F2 breakpoint; F9 run; F7/F8 step
4. Memory map → dump; Follow in Dump
5. Scylla / ollydump benzeri eklenti ile unpack dump

Sık breakpoint hedefleri:

VirtualAlloc / VirtualProtect
CreateFileW / WriteFile
WinHttpSendRequest / connect
IsDebuggerPresent (anti-debug)
Terminal window
frida-ps -U
Terminal window
frida -U -f com.hedef.app -l hook.js --no-pause
Terminal window
frida -n sample.exe -l hook.js

Minimal log örneği (hook.js fikri):

Interceptor.attach(Module.getExportByName(null, 'IsDebuggerPresent'), {
onLeave(retval) { retval.replace(0); }
});

frida · spawn + script

embedded tool
Generated command
frida -n sample.exe -l hook.js

Mobil için -U -f paket kullan. Lab dışı hedefe bağlanma.

Terminal window
frida -n sample.exe -l hook.js
Windows: IsDebuggerPresent, CheckRemoteDebuggerPresent,
NtQueryInformationProcess (ProcessDebugPort),
timing (RDTSC), donanım breakpoint tarama
Linux: ptrace(PTRACE_TRACEME), /proc/self/status TracerPid,
timing, LD_PRELOAD tespiti

Pratik yaklaşımlar:

- API’yi patch et (retval 0) veya Frida ile hook’la
- Exception handler’lı packer’da step-over dikkatli kullan
- “Debugger yok” yalanı yetmezse parent/child çift süreç izle
- Sandbox/VM artefaktı varsa ayrı bulgu; davranışı değiştiren örnekler yaygın
Terminal window
# Linux: TracerPid kontrolü (örnek kendini okuyorsa)
cat /proc/self/status | rg TracerPid
x64dbg → bp VirtualAlloc
→ decrypt sonrası dump
→ Ghidra import → C2 URL
gdb → break @ decrypt
→ x/s $rdi → plaintext config