Tersine Mühendislik (Reverse Engineering)


Tersine mühendislik basitçe derlenmiş bir binary veya bir exe uzantılıi yani çalıştırılabilir bir dosyanın nasıl çalıştığını anlamaya yönelik uygulanan sürece denir.
Tersine mühendislik bir sistemin daha yüksek bir soyutlama seviyesinde temsilini yaratmak için analiz edilmesi işlemidir.
Programcı programı genellikle yüksek seviyeli dillerde (c ,c++, visual basic v.b.) yazmaktadır. Bu yazılan kodlar insanlar tarafından anlaşılmaktadır fakat kod derlendikten sonra makinanın anlayabileceği dile çevrilir çevirildikten sonra ise insanlar tarafından çok zor anlaşılır duruma gelir.
Tersine Mühendislikle Neler Yapılabilir
         Açık kaynak kodlu olmayan yazılımın kaynak kodlarını ortaya çıkarma
         Malware analiz edebilme olanağı
         Programların lisans korumasını atlatma (Cracking)
         Yazılımlarda zafiyet aramak (Yazılımların sağlamlığını kontrol etme)
         Yazılımlara ek özelikler getirme (patching)
         Oyun hileleri
Reversing (Analiz) çeşitleri:
·        Statik analiz
·        Dinamik analiz
Statik Analiz: statik program analizi execute etmeden yani programı çalıştırmadan yapılan yazılım analizidir.
Dinamik Analiz: dinamik program analizi ise o an sanal veya gerçek bir process üzerinde execute olan programa yapılan analizidir.
Tersine Mühendislikte en çok kullanılan programlar:
·        Disassemblerlar
·        Debuggerlar
·        PE Editörleri
·        Hex-Resource Editörler
·        Sistem izleme araçları
Disassembler: bu yazılımlar, programı disassembly işleminden geçirerek programın assembly kodu şeklindeki halini gösterir.  Bu olay bize programda çağrılan fonksiyonları, string değerleri vs. görüp incelememize olanak sağlar.
En yaygın olarak kullanılan disassembler IDA dır.
Debugger: debuggerlar ile programın çalışmasını satır satır izleyebiliriz.  Disassembler gibi çalışırlar fakat ek olarak işlemleri izleme imkanımız olur.
Çoğu zaman cracking, malware analizi, exploit geliştirme aşamalarında kullanılırlar.
Bir debugger ile programın çalışması esnasında değişiklik yapılabilir.
En yaygın olarak kullanılan debuggerlar:
         ImmunitlyDebugger
         OllyDbg
         WinDbg
Hex- Resource Editörleri:
Diğerlerine göre çok yaygın olarak kullanılmaz. Basit string düzenlemeleri. Bayt değiştirmeleri. Hızlı kod analizi yapabilir.
Birçok hex-resource editör mevcut;
         HxD
         Hes Workshop
         ResEdit