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.
Ön koşullar
Section titled “Ön koşullar”- 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)İş akışı
Section titled “İş akışı”-
Snapshot al — bozulursa geri dön.
-
Entry / TLS / OEP’ye breakpoint koy.
-
Decrypt / alloc sonrası dump veya string tara.
-
Anti-debug görürsen patch veya Frida ile atlat.
-
Davranışı not et — dosya, registry, ağ, child process.
gdb (ELF) temelleri
Section titled “gdb (ELF) temelleri”gdb -q ./sample(gdb) break main(gdb) run(gdb) break *0x401234(gdb) continue(gdb) info registers(gdb) x/20gx $rsp(gdb) disassemble $pc,+32# gef/pwndbg kuruluysagdb -q ./sample(gdb) checksec(gdb) vmmap(gdb) telescope 10x64dbg (PE) temelleri
Section titled “x64dbg (PE) temelleri”1. Örneği aç (veya attach)2. Symbols / Imports → CreateProcessW, VirtualAlloc, …3. F2 breakpoint; F9 run; F7/F8 step4. Memory map → dump; Follow in Dump5. Scylla / ollydump benzeri eklenti ile unpack dumpSık breakpoint hedefleri:
VirtualAlloc / VirtualProtectCreateFileW / WriteFileWinHttpSendRequest / connectIsDebuggerPresent (anti-debug)Frida temelleri
Section titled “Frida temelleri”frida-ps -Ufrida -U -f com.hedef.app -l hook.js --no-pausefrida -n sample.exe -l hook.jsMinimal log örneği (hook.js fikri):
Interceptor.attach(Module.getExportByName(null, 'IsDebuggerPresent'), { onLeave(retval) { retval.replace(0); }});frida · spawn + script
embedded toolGenerated command
frida -n sample.exe -l hook.jsMobil için -U -f paket kullan. Lab dışı hedefe bağlanma.
frida · spawn + script
Section titled “frida · spawn + script”frida -n sample.exe -l hook.jsAnti-debug notları
Section titled “Anti-debug notları”Windows: IsDebuggerPresent, CheckRemoteDebuggerPresent, NtQueryInformationProcess (ProcessDebugPort), timing (RDTSC), donanım breakpoint taramaLinux: ptrace(PTRACE_TRACEME), /proc/self/status TracerPid, timing, LD_PRELOAD tespitiPratik 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# Linux: TracerPid kontrolü (örnek kendini okuyorsa)cat /proc/self/status | rg TracerPidZincir
Section titled “Zincir”x64dbg → bp VirtualAlloc → decrypt sonrası dump → Ghidra import → C2 URLgdb → break @ decrypt → x/s $rdi → plaintext config