-
Tc4dy
OPSEC Specialist | Free internet - Open Source ADV
🔧 REVERSE ENGINEERING ULTIMATE REHBERİ – APK, EXE, ELF SÖKME TEKNİKLERİ 100+ YÖNTEM, 20+ ARAÇ
Reverse engineering (tersine mühendislik), bir yazılımın kaynak koduna sahip olmadan çalışmasını analiz etme, anlama ve değiştirme sanatıdır. Bu rehberde Windows EXE, Linux ELF ve Android APK dosyalarını nasıl sökeceğini, statik ve dinamik analiz yöntemlerini, debugger kullanımını, patching ve keygen yapmayı en ince ayrıntısına kadar anlatıyorum.
⚠️ ETİK UYARI: Bu rehber yalnızca eğitim, güvenlik araştırmaları ve izinli yazılım testleri içindir. Başkalarının yazılımlarını izinsiz olarak tersine mühendislik yapmak yasa dışıdır ve telif hakları ihlalidir. Tüm sorumluluk kullanıcıya aittir.
📌 BÖLÜM 1: REVERSE ENGINEERING NEDİR VE NEDEN YAPILIR?
Reverse engineering, bir yazılımın nasıl çalıştığını anlamak için ikili dosyayı (binary) analiz etme işlemidir.🔧 Neden yapılır?
- Kötü amaçlı yazılım analizi (malware analysis)
- Zafiyet keşfi (bug bounty, exploit geliştirme)
- Kayıp kaynak kodunu geri kazanma
- Uyumluluk sorunlarını çözme
- Rekabet analizi
- Crackleme (korsanlama) – eğitim amaçlı
| Tür | Uzantı | Platform | Analiz Araçları |
|---|---|---|---|
| Windows EXE | .exe, .dll, .sys | Windows | Ghidra, IDA, x64dbg, OllyDbg |
| Linux ELF | (no extension), .so | Linux | Ghidra, IDA, GDB, radare2 |
| Android APK | .apk | Android | jadx, apktool, MobSF, Frida |
| macOS | .app, .dylib | macOS | Ghidra, Hopper |
| .NET | .exe (C#/VB) | Windows | dnSpy, ILSpy, dotPeek |
📁 BÖLÜM 2: TEMEL KAVRAMLAR (BİLMEN ŞART)
2.1. Assembly Dili (x86/x64/ARM)
Makine dilinin insan tarafından okunabilir hali. Reverse engineer'ın en çok uğraştığı şey assembly kodudur.x86 assembly örneği:
asm
mov eax, 5 ; eax = 5
add eax, 3 ; eax = eax + 3 (sonuç 8)
cmp eax, 8 ; eax 8'e eşit mi?
je 0x00401234 ; eşitse atla
2.2. Endianness
Verinin bellekte saklanma sırası:- Little-endian: x86/x64, ARM (en yaygın) – 0x12345678 bellekte 78 56 34 12
- Big-endian: Ağ protokolleri – 12 34 56 78
2.3. PE (Portable Executable) – Windows EXE yapısı
PE dosyası şu bölümlerden oluşur:| Bölüm | İçerik | Açıklama |
|---|---|---|
| DOS Header | MZ | Eski DOS uyumluluğu |
| PE Header | PE\0\0 | Ana header |
| Section Table | .text, .data, .rdata, .rsrc | Kod, veri, kaynaklar |
- .text / .code – Çalıştırılabilir kod (analiz edilecek yer burası)
- .data – Başlatılmış değişkenler
- .rdata – Sabit veri (string'ler)
- .rsrc – Kaynaklar (icon, menu, dialog)
- .reloc – Yeniden konumlandırma bilgileri
2.4. ELF (Executable and Linkable Format) – Linux için
| Bölüm | Açıklama |
|---|---|
| ELF Header | Dosya türü, mimari, entry point |
| Program Headers | Çalıştırma için gerekli segmentler |
| Section Headers | Bağlama için gerekli bölümler |
| .text | Kod |
| .rodata | Sabit veri (string'ler) |
| .data | Başlatılmış veri |
| .bss | Başlatılmamış veri |
2.5. DEX – Android Dalvik Executable
APK içindeki classes.dex dosyası Dalvik bytecode içerir. Java'dan farklı bir formattır.📁 BÖLÜM 3: STATİK ANALİZ ARAÇLARI (KODU ÇALIŞTIRMADAN İNCELEME)
Statik analiz, dosyayı çalıştırmadan içeriğini incelemektir. Zararlı yazılımın tetiklenme riski yoktur.3.1. Ghidra (NSA yapımı, ücretsiz, en iyisi)
Ghidra, NSA tarafından geliştirilmiş ücretsiz ve açık kaynaklı bir RE aracıdır. IDA Pro'nun en güçlü rakibidir.Kurulum (Kali):
bash
sudo apt install ghidra -y
# veya manuel:
wget https://github.com/NationalSecurityAgency/ghidra/releases
unzip ghidra_*.zip
cd ghidra_* && ./ghidraRun
Özellikleri:
- Çoklu platform (Windows, Linux, macOS)
- Birçok işlemci desteği (x86, x64, ARM, MIPS, PowerPC)
- Etkileşimli decompiler (C koduna çevirir)
- Script desteği (Python/Java)
- Çoklu kullanıcı ile işbirliği
text
[+] Project oluştur -> Import File -> hedef.exe
[+] Analysis başlat (varsayılan analizler)
[+] Symbol Tree'de "Functions" -> main fonksiyonunu bul
[+] Decompile penceresinde C kodu görünür
Ghidra decompiler çıktısı örneği (assembly'den C'ye):
c
// Assembly:
// 0x00401234: mov eax, [ebp+0x8]
// 0x00401237: add eax, 0x5
// Decompiler çıktısı:
int main(int param_1) {
int local_c;
local_c = param_1 + 5;
return local_c;
}
3.2. IDA Pro (Ticari, endüstri standardı)
IDA Pro, en güçlü reverse engineering aracıdır. Çok pahalıdır (binlerce dolar). Ücretsiz sürümü (IDA Free) sınırlıdır.Özellikleri:
- Etkileşimli ve otomatik analiz
- Lua, Python, IDC script desteği
- Decompiler eklentisi (extra ücret)
- Plugin ekosistemi çok geniş
3.3. radare2 / Cutter (Ücretsiz, terminal tabanlı)
radare2, Unix felsefesiyle yazılmış güçlü bir komut satırı RE aracıdır. Cutter, radare2 için GUI'dir.Kurulum:
bash
sudo apt install radare2 cutter -y
Örnek radare2 komutları:
bash
r2 ./hedef.exe # Dosyayı aç
aaa # Otomatik analiz
s main # main fonksiyonuna git
pdf # Fonksiyonu göster
V # Görsel mod
3.4. Binary Ninja (Ücretli, orta seviye)
IDA'dan ucuz, Ghidra'dan daha hızlı arayüz. Medium-level IL (Intermediate Language) ile çalışır.3.5. Hopper (macOS için)
Mac'te IDA alternatifi. ARM, x86/x64 desteği var.3.6. APK Statik Analiz Araçları
| Araç | Ne Yapar | Kullanım |
|---|---|---|
| jadx | DEX -> Java kaynak kodu | jadx -d output classes.dex |
| apktool | APK'yı açar (kaynakları çıkarır) | apktool d hedef.apk |
| dex2jar | DEX -> JAR (Java bytecode) | d2j-dex2jar classes.dex |
| JD-GUI | JAR dosyasını Java kodu olarak gösterir | jd-gui output.jar |
| Bytecode Viewer | Gelişmiş APK analizi (decompile + edit) | GUI uygulaması |
java
// Orijinal APK'daki smali kodu:
// invoke-virtual {v0}, Lcom/example/App;->getFlag()Ljava/lang/String;
// jadx ile çıkarılan Java kodu:
public String getFlag() {
return "flag{example_123}";
}
📁 BÖLÜM 4: DİNAMİK ANALİZ ARAÇLARI (ÇALIŞTIRARAK İNCELEME)
Dinamik analiz, programı çalıştırarak davranışını gözlemlemektir. Debugger ile adım adım ilerleyebilir, register'ları, memory'i, stack'i izleyebilirsin.4.1. x64dbg (Windows – Günümüzün en iyi debugger'ı)
x64dbg, modern Windows debugger'ıdır. OllyDbg'nin yerini almıştır. Hem x86 hem x64 destekler.Kurulum: https://x64dbg.com/ adresinden indir.
Özellikleri:
- Kaynak kodu açık (GitHub)
- Plugin desteği (ScyllaHide, titanic, vb.)
- Graph görünümü
- Koşullu breakpoint'ler
- Script desteği (x64dbgpy ile Python)
- Dosyayı aç (File → Open)
- CPU penceresinde assembly kodunu gör
- Breakpoint koy: F2 (main fonksiyonun başına)
- Çalıştır: F9
- Adım adım ilerle: F7 (call içine gir), F8 (call üzerinden atla)
- Register'ları gör: EAX, EBX, ECX, EDX, ESP, EBP
- Memory dump: Ctrl+G ile adrese git, Dump penceresinde gör
| Tür | Kısayol | Ne Yapar |
|---|---|---|
| Software breakpoint | F2 | İlk baytı 0xCC (int3) ile değiştirir |
| Hardware breakpoint | F2 + sağ tık | DR0-DR3 register'larını kullanır (tespit edilmesi zor) |
| Conditional breakpoint | Sağ tık → Conditional | eax == 0x1234 gibi koşul |
| Memory breakpoint | Sağ tık → Memory breakpoint | Bellek okuma/yazma/yürütme |
4.2. OllyDbg (Eski ama hala kullanılıyor)
Windows için eski ama kararlı debugger. Sadece x86 (32-bit) destekler. 2026'da birçok eklenti hala çalışıyor.OllyDbg eklentileri:
- OllyDump: Dumped process (unpacking sonrası)
- HideDebugger: Anti-debug bypass
- PhantOm: Gelişmiş gizleme
4.3. GDB (Linux için)
Linux ELF dosyalarını debug etmek için standart araç.Kurulum:
bash
sudo apt install gdb gdb-multiarch -y
Temel GDB komutları:
bash
gdb ./hedef # Dosyayı aç
break main # main'e breakpoint
run # Çalıştır
stepi # Bir assembly adımı (next instruction)
info registers # Register'ları gör
x/10wx $esp # Stack'i göster
disas main # main'in assembly'ini göster
continue # Devam et
quit # Çık
GDB peda/gef/gdbinit (gelişmiş eklentiler):
bash
# PEDA (Python Exploit Development Assistance)
git clone https://github.com/longld/peda.git
echo "source ~/peda/peda.py" >> ~/.gdbinit
# GEF (GDB Enhanced Features) – daha modern
bash -c "$(curl -fsSL https://gef.blah.cat/sh)"
4.4. WinDbg (Windows kernel debug)
Windows çekirdek modu sürücülerini ve kullanıcı modu uygulamalarını debug eder. Microsoft'un resmi aracı.4.5. Frida (Android/iOS dinamik analiz)
Frida, mobil uygulamalara JavaScript ile hook atmanı sağlar. Root gerekmez (ama bazı işlemler için root gerekir).Kurulum:
bash
pip install frida-tools
Örnek Frida script'i (SSL pinning bypass):
javascript
Java.perform(function() {
var TrustManager = Java.use('javax.net.ssl.X509TrustManager');
TrustManager.checkServerTrusted.implementation = function(certs, authType) {
console.log('[+] SSL pinning bypassed');
};
});
Çalıştırma:
bash
frida -U -l bypass.js com.example.app
📁 BÖLÜM 5: 50+ STATİK ANALİZ TEKNİĞİ
5.1. String Analizi
Binary içindeki tüm yazılı mesajları bulmak.Linux:
bash
strings hedef.exe | grep -i "password\|flag\|key\|http"
Windows (Sysinternals strings):
cmd
strings64.exe hedef.exe | findstr /i "password"
Ghidra'da: Window → Defined Strings
5.2. Import/Export Analizi
Programın hangi DLL/fonksiyonları kullandığını görmek.Linux:
bash
objdump -p hedef.exe | grep "DLL Name"
readelf -s hedef | grep FUNC
Windows:
cmd
dumpbin /imports hedef.exe
5.3. Section Analizi
Programın hangi bölümlerinin ne işe yaradığını anlamak.bash
objdump -h hedef.exe
readelf -S hedef
5.4. Hash ve İmza Karşılaştırma
Bilinen zararlı yazılımlarla eşleştirme.bash
md5sum hedef.exe
sha256sum hedef.exe
# Virustotal'da ara
5.5. Entropi Analizi
Yüksek entropi = şifrelenmiş veya sıkıştırılmış veri.bash
# binwalk ile entropi grafiği
binwalk -E hedef.exe
5.6. Disassembly
Assembly kodunu insan okuyabilir hale getirme.bash
objdump -d hedef.exe | less
5.7. Decompilation (C koduna çevirme)
Ghidra veya IDA decompiler ile.5.8. Control Flow Graph (CFG)
Fonksiyonun akış diyagramı.5.9. Call Graph
Fonksiyonların birbirini çağırma haritası.5.10. Data Flow Analysis
Verinin kaynaktan hedefe nasıl aktığını izleme.📁 BÖLÜM 6: 50+ DİNAMİK ANALİZ TEKNİĞİ
6.1. Breakpoint'ler
Programı durdurup inceleme.6.2. Trace (Adım adım izleme)
Programın her adımını loglama.x64dbg'de trace: Debug → Trace into
6.3. Memory Dump
Çalışan programın belleğini dışa aktarma.x64dbg: File → Save memory dump
6.4. Patch'leme (Canlı bellekte değiştirme)
Bir koşullu atlamayı zorla yaptırma.Örnek: je (jump if equal) → jne (jump if not equal) yaparak şifre kontrolünü tersine çevirme.
6.5. API Monitor
Programın hangi Windows API'lerini çağırdığını izleme.Araç: apimonitor.exe
6.6. Registry Monitor
Registry'de okuma/yazma izleme.Araç: procmon.exe (Process Monitor)
6.7. File Monitor
Dosya sistemi erişimlerini izleme.Araç: procmon.exe
6.8. Network Monitor
Programın hangi IP/portlara bağlandığını izleme.bash
# Linux
strace -e network ./hedef
# Windows
netstat -an | findstr "ESTABLISHED"
6.9. Anti-Debug Bypass
Debugger tespitini engelleme.Yöntemler:
- IsDebuggerPresent: mov eax, fs:[0x30] → mov eax, 0 yap
- CheckRemoteDebuggerPresent: NOP'la
- NtQueryInformationProcess: Return 0 yap
- Timing attacks: rdtsc farkını kapat
- x64dbg eklentileri: ScyllaHide, titanic
6.10. Unpacking (Packer'dan çıkarma)
UPX, Themida, VMProtect gibi packer'ları devre dışı bırakma.UPX unpack:
bash
upx -d hedef_packed.exe
Genel unpack yöntemleri:
- OEP (Original Entry Point) bul → breakpoint → dump
- ESP law (stack frame)
📁 BÖLÜM 7: WINDOWS EXE CRACKLEME (EĞİTİM İÇİN)
Bu bölümde, basit bir programın şifre kontrolünü nasıl bypass edeceğini gösteriyorum. Sadece eğitim amaçlıdır.7.1. Örnek Crackme – Şifre Kontrolü
Varsayalım bir program var. Kullanıcıdan şifre istiyor. Şifre doğruysa "Başarılı", yanlışsa "Hatalı" diyor.Statik analiz (Ghidra):
c
int main() {
char input[20];
printf("Şifre: ");
scanf("%s", input);
if (strcmp(input, "secret123") == 0) {
printf("Başarılı!\n");
} else {
printf("Hatalı şifre!\n");
}
return 0;
}
Dinamik analiz (x64dbg):
- Programı x64dbg'de aç
- F9 ile başlat, şifre gir (test)
- "Hatalı şifre" mesajı gelir
- Ctrl+F2 ile yeniden başlat
- strcmp fonksiyonuna breakpoint koy (bp strcmp)
- F9 ile çalıştır, şifre gir
- strcmp'te durur. EAX register'ında 0 ise eşit, 1 ise farklı
- F7 ile strcmp'in içine gir
- Şifre kontrolünden sonraki je (jump if equal) komutunu bul
- je'yi jne ile değiştir (patchle)
- F9 ile devam et → "Başarılı" mesajını gör
- x64dbg'de Edit → Patch file
- Yeni dosyayı kaydet (cracked.exe)
7.2. Keygen yapma
Eğer şifre kontrolü matematiksel bir algoritma kullanıyorsa, bu algoritmayı tersine mühendislik ile bulup keygen yazabilirsin.Örnek (basit algoritma):
c
int serial_valid(char *serial) {
int sum = 0;
for(int i=0; serial; i++) sum += serial;
return sum == 0x1A2B;
}
Bu algoritmayı çözüp keygen yazmak:
python
# Keygen
import random
while True:
serial = ''.join(chr(random.randint(65,90)) for _ in range(10))
if sum(ord(c) for c in serial) == 0x1A2B:
print(serial)
break
📁 BÖLÜM 8: ANDROID APK REVERSE ENGINEERING (ADIM ADIM)
8.1. APK'yı açma (apktool)
bashapktool d hedef.apk -o hedef_klasoru
Çıkan dosyalar:
- AndroidManifest.xml – İzinler, aktiviteler
- smali/ – Dalvik bytecode (insan okunabilir)
- res/ – Kaynaklar (layout, drawable)
- lib/ – Native kod (.so dosyaları)
8.2. Java kaynak koduna çevirme (jadx)
bashjadx -d jadx_output hedef.apk
jadx, APK'yı direkt Java koduna çevirir. Çıktı jadx_output/sources/ altında olur.
📊 jadx çıktısı örneği:
java
package com.example.app;
public class MainActivity extends Activity {
public void checkPassword(String pwd) {
if (pwd.equals("supersecret")) {
Toast.makeText(this, "Başarılı", 0).show();
}
}
}
8.3. Smali kodunu anlama
Smali, Android'in ara seviye dilidir. Java'dan daha düşük seviyeli ama assembly'den daha yüksek seviyeli.Java:
java
if (x == 5) { doSomething(); }
Smali:
text
if-eq v0, v1, :cond_0
:cond_0
invoke-static {}, Lcom/example/App;->doSomething()V
8.4. Smali'de patchleme
APK'yı aç (apktool), smali dosyasında değişiklik yap, sonra yeniden paketle:bash
# Aç
apktool d hedef.apk
# smali/com/example/MainActivity.smali dosyasını düzenle
# Şifre kontrolünü tersine çevir (if-ne -> if-eq)
# Yeniden paketle
apktool b hedef_klasoru -o hedef_patched.apk
# İmzala (keystore gerekir)
uber-apk-signer -a hedef_patched.apk
8.5. Frida ile runtime hook (dinamik)
Root'lu veya root'suz (Frida gadget ile) telefonda çalışan uygulamaya müdahale etme.Frida script'i (şifre kontrolünü bypass):
javascript
Java.perform(function() {
var MainActivity = Java.use('com.example.app.MainActivity');
MainActivity.checkPassword.implementation = function(pwd) {
console.log('[+] checkPassword çağrıldı: ' + pwd);
this.checkPassword("supersecret");
};
});
8.6. MobSF ile otomatik analiz
Mobile Security Framework (MobSF), APK'yı otomatik tarar, zafiyetleri listeler.Kurulum:
bash
git clone https://github.com/MobSF/Mobile-Security-Framework-MobSF
cd MobSF
./setup.sh
./run.sh
Web arayüzü http://localhost:8000 adresinde açılır. APK'yı yükle, tarama başlasın.
📁 BÖLÜM 9: LİNUX ELF REVERSE ENGINEERING
9.1. Statik analiz
bash# Dosya türünü gör
file hedef
# Sembolleri gör
nm hedef
# Dinamik bağımlılıklar
ldd hedef
# String'ler
strings hedef
# Disassembly
objdump -d hedef | less
# Detaylı bölümler
readelf -a hedef
9.2. Dinamik analiz (GDB)
bashgdb ./hedef
# Breakpoint
break *0x00401234
break main
# Çalıştır
run arg1 arg2
# Register'lar
info registers
# Bellek
x/20wx $rsp
# Devam
continue
# Adım
stepi
nexti
# Değişken
print variable
9.3. strace (system call izleme)
Programın hangi sistem çağrılarını yaptığını gösterir.bash
strace -f -o trace.log ./hedef
9.4. ltrace (library call izleme)
Programın hangi kütüphane fonksiyonlarını çağırdığını gösterir.bash
ltrace -f ./hedef
9.5. radare2 ile patching
bash# Dosyayı aç
r2 -w ./hedef
# Analiz
aaa
# main'e git
s main
# Assembly göster
# Değiştir
wa "mov eax, 0"
# Kaydet
quit
📁 BÖLÜM 10: 30+ REVERSE ENGINEERING EKLENTİSİ VE SCRIPT'İ
10.1. IDA Python Script'leri
python# Tüm string'leri bul ve dışa aktar
import idautils
for seg in idautils.Segments():
for ea in idautils.Functions(seg, idc.get_segm_end(seg)):
name = idc.get_func_name(ea)
print(f"{hex(ea)}: {name}")
10.2. Ghidra Python Script'i
python# Tüm fonksiyon isimlerini listele
from ghidra.program.model.listing import FunctionManager
fm = currentProgram.getFunctionManager()
functions = fm.getFunctions(True)
for f in functions:
print(f.getName(), f.getEntryPoint())
10.3. x64dbg x64dbgpy (Python script)
python# Breakpoint'e yazdır
from x64dbg import *
def print_on_breakpoint():
log("Breakpoint hit at " + hex(GetRegValue("cip")))
10.4. Popüler eklentiler
| Eklenti | Araç | Açıklama |
|---|---|---|
| ScyllaHide | x64dbg/OllyDbg | Anti-anti-debug |
| Titanic | x64dbg | Gelişmiş gizleme |
| IDAPython | IDA | Python script |
| Ghidra Scripts | Ghidra | Java/Python script |
| BinDiff | IDA/Ghidra | İkili karşılaştırma |
| FLIRT | IDA | Kütüphane tanıma |
| FindCrypt | IDA | Kripto sabitleri bulma |
📁 BÖLÜM 11: ZARARLI YAZILIM ANALİZİ (MALWARE RE)
Zararlı yazılımları analiz ederken dikkat edilmesi gerekenler:11.1. Güvenli ortam (sandbox)
- Windows Sandbox (Windows 10/11 Pro)
- VirtualBox/VMware (izole ağ)
- Cuckoo Sandbox (otomatik analiz)
- FLARE VM (FireEye'in RE ortamı)
11.2. Davranışsal analiz
Araçlar:- Process Monitor (procmon) – Registry, dosya, işlem
- Process Explorer – Process tree, DLL'ler
- Regshot – Registry öncesi/sonrası farkı
- Wireshark – Ağ trafiği
- FakeNet-NG – Sahte ağ hizmetleri
11.3. Statik analiz (zararlı)
- VirusTotal (çoklu AV taraması)
- YARA kuralları – İmza tabanlı tespit
- Capabilities (PE analizi)
📊 ÖZET – REVERSE ENGINEERING ARAÇLARI VE KULLANIMLARI
| Amaç | Araç | Platform | Ücret |
|---|---|---|---|
| Statik analiz (genel) | Ghidra | Hepsi | Ücretsiz |
| Statik analiz (profesyonel) | IDA Pro | Hepsi | Ücretli |
| Windows debug | x64dbg | Windows | Ücretsiz |
| Windows debug (eski) | OllyDbg | Windows (32-bit) | Ücretsiz |
| Linux debug | GDB + PEDA | Linux | Ücretsiz |
| APK decompile | jadx | Hepsi | Ücretsiz |
| APK açma | apktool | Hepsi | Ücretsiz |
| APK dinamik | Frida | Android/iOS | Ücretsiz |
| APK otomatik | MobSF | Hepsi | Ücretsiz |
| Terminal RE | radare2 | Hepsi | Ücretsiz |
| macOS RE | Hopper | macOS | Ücretli |
| Malware analizi | FLARE VM, Cuckoo | Windows | Ücretsiz |
⚠️;
Reverse engineering, sabır ve pratik gerektiren bir disiplindir. Bu rehberde öğrendiklerini sadece kendi yazılımlarında veya izinli ortamlarda dene. Başkalarının yazılımlarını cracklemek veya zararlı yazılım geliştirmek yasa dışıdır.Öğrenmek için önerilen crackme'ler:
- Crackmes.one – Binlerce eğitim amaçlı crackme
- Root-me.org – Reverse engineering challenge'ları
- Reversing.kr – Kore merkezli challenge
- pwnable.tw – Binary exploitation
Bu rehber, eğitim ve bilgilendirme amaçlıdır. Tüm sorumluluk kullanıcıya aittir.
💬 SpyHackerz Telegram — Anlık tartışmalar ve duyurular için katıl