Herkes İçin Tersine Mühendislik
(0xinfection.github.io)- Reverse Engineering For Everyone, tersine mühendisliği ilk kez öğrenenlerin kavramları ve uygulama akışını takip edebilmesi için hazırlanmış bir eğitim setidir
- Tersine mühendislik, bir yapıtı parçalarına ayırarak tasarım, mimari, kod veya bilgiyi ortaya çıkarma sürecidir
- Müfredat x86, x64, ARM-32, ARM-64 konularını kapsar; hem yeni başlayanları hem de kavramları yeniden gözden geçirmek isteyen okurları hedefler
- Hiçbir şey bilmeden başlanabilecek şekilde yapılandırılmıştır; tersine mühendisliğin orta seviye temellerine kadar adım adım öğrenmek mümkündür
- Tüm eğitimler PDF ve MOBI olarak indirilebilir; yeni eğitimler eklendiğinde e-kitap sürümleri de otomatik olarak güncellenir
Tersine mühendisliğin amacı
- Tersine mühendislik, backwards engineering veya back engineering olarak da adlandırılır
- Hedef yapıtı parçalarına ayırarak içindeki tasarım, mimari, kodu ortaya çıkarma ya da bilgi çıkarma sürecidir
- Bilimsel araştırmaya benzer, ancak bilimsel araştırmanın doğal olguları konu almasıyla ayrılır
- Bu eğitim seti, tersine mühendisliği mümkün olduğunca basit şekilde öğrenilebilir kılmaya odaklanır
Müfredat ve hedef kitle
- Ele alınan başlıca dersler şunlardır
- Hem reversing öğrenmek isteyen yeni başlayanlara hem de daha önce öğrendiği kavramları tekrar etmek isteyen okurlara yöneliktir
- Yeni başlayanlar, temel bilgiye sahip olmadan tersine mühendisliğin orta seviye temellerine kadar öğrenebilir
- Kenar çubuğu üzerinden şimdiye kadar ele alınan bölümleri kontrol ederek gerekli kavramları tekrar edebilirsiniz
1 yorum
Hacker News yorumları
Tersine mühendislik, hedefin kendisine doğrudan bakmadan da yapılabilir.
Andrew Tridgell’in Microsoft’un SMB protokolünü “French cafe technique” ile nasıl tersine mühendislikten geçirdiğini anlattığı yazı: https://www.samba.org/ftp/tridge/misc/french_cafe.txt
Tridge, Linus’un bir dönem Linux kernel geliştirmesini barındırmak için kullandığı kapalı kaynak yazılım BitKeeper’ı da tersine mühendislikten geçirdi. Özel istemci yerine BitKeeper adresi:port’una telnet ile bağlanınca
helpyazılabildiğini, bunun da denenebilecek komutların listesini çıktıladığını keşfetti.Bu komutlarla depoyu sorgulayınca, kapalı kaynak yazılımı kullanmaya ya da tersine assembly yapmaya gerek kalmadan tüm iç veri yapılarını anlayabildi; bu tersine mühendislik yüzünden BitKeeper’ın sahibi Larry McVoy Linux topluluğunun kullanım hakkını geri çekince Linus git’i yapmak zorunda kaldı.
helpin komut listesini çıktıladığı şey, BitKeeper geliştiricilerinin iyi bir mühendislik/UI kararıydı; ama bundan çıkarılacak dersin “yazılımı fazla kullanıcı dostu yapmayın”a dönüşmesinden endişeleniyorum.Ayrıca ağ üzerinden bir yazılımla konuşmanın da açıkça o yazılımı “kullanmak” olduğu kanaatindeyim.
Tersine mühendisliğin kitaplardan öğrenilen bir alan olduğunu hiç düşünmedim. Çocukluğumdan beri her şeyi kendim deneyerek öğrendim.
Cheat Engine ile video oyunu süreç belleğini tarayıp değiştirmeyi, MMO paketlerini okuyup yeniden göndererek hile denemeyi, DLL ve hook yazıp süreçlere enjekte etmeyi, crackme görevlerini çözmek için çalıştırılabilir dosya yamaları yapmayı öğrendim.
Lisans anahtarı gerektiren gerçek yazılımlarla oynayıp anahtarsız çalışır hâle getirmeyi ya da herhangi bir anahtarı kabul ettirmeyi denedim; oyun kayıt dosyaları gibi ikili formatları analiz edip hilelerde kullandım ve sonunda bu beceri ve bilgilerle gerçek bir iş bulup para kazanmaya başladım.
Gerçekte bu, doğrudan denemek ve zaman harcamak gereken türden bir şey. Kaynak metindeki öğretici fazla seyrek; çok fazla şeyi kapsamaya çalışırken, birkaç saat kurcalayınca çoğu kişinin edineceği seviyenin ötesinde tersine mühendislik becerileri öğretemiyor gibi geliyor.
Buna karşılık beginners.re çok kapsamlı ama çok daha derin ve adım adım ilerliyor; pratik ödev olarak da crackmes daha iyi olabilir.
Devam eden bir video oyunu tersine mühendislik projesinde programlama bilmeyen, kendi kendini yetiştirmiş bir mod geliştiricisiyle iletişime geçtim; birkaç Discord görüşmesinde birlikte Ghidra projesine bakıp bilgisayar programı mühendisliğinin temellerini anlatınca, Cheat Engine ile bitleri ters çevirdiği dönemden çok daha fazla şey öğrendi.
Sonrasında, 15 yıl önce yalnızca bir YouTube videosunda gösterilmiş ve dağıtılmamış epey iddialı bir modu yeniden yaptı; ben ona yön verdim ama parçaların nasıl birbirine geçtiğini gördükten sonra devam oyununda da aynı modu tek başına uyguladı.
Mühendislik deneyimi tersine mühendislik yaparken bakış açısı kazandırır.
Kitap çok ama “iyi” kitapların bir elin parmaklarını geçmemesi de önemli.
Sadece 5 dakika okuyunca bile o kadar çok hata, yanlış anlaşılmış kavram ve tamamen hatalı açıklama görüyorum ki önermek zor. Açıkça bu alanda az deneyimi olan bir amatör tarafından yazılmış görünüyor.
Daha iyi kaynaklar olarak Eldad Eilam’ın Secrets of Reverse Engineering’i, Windows tarafı için Practical Reverse Engineering, gerçekten temel bilgiler için de Patterson’ın Computer Organization and Design kitabı var.
Konuya yeni başlayan biri için fena olmayan üst düzey bir genel bakış gibi görünüyor.
Daha derin kaynak olarak şu bağlantı da vardı: https://github.com/mytechnotalent/Reverse-Engineering
Düzenleme: Ah, çoğu yine kaynak metne yönlendiriyor gibi.
searchlores.org ve fravia.com’da reversing öğreticileri okuduğum günler aklıma geldi.
Şimdi web arşivinde: https://web.archive.org/web/20191201105759/http://search.lor...
Java tersine mühendisliği de eğlenceli. Özellikle tuhaf bir Bluetooth protokolüyle ev aletlerini kontrol eden şüpheli Android uygulamaları.
Bu kılavuzu yazan kişiyi tanıyorum. HN’de yayımlandığını görmek güzel; somut geri bildirim varsa iletebilirim.
Katılımı teşvik eden unsurlar ve görsel materyaller çok eksik. Açıklama çok, metin duvarı aşırı fazla; sırf bu bile bunu “herkes için” bir kaynak olmaktan çıkarıyor.
Örneğin 2. bölümdeki statik analiz/dinamik analiz açıklaması, IDA ve disassembler tanıtımı, ABC Biochemicals senaryosunun açıklaması çok daha kısa yazılabilir.
“Zararlı yazılım analizinde statik analiz ve dinamik analiz olmak üzere iki temel teknik vardır. Statik analiz, çalıştırılabilir dosyayı çalıştırmadan inceler; burada ele alınmayacak, sonraki derste işlenecektir. Dinamik analiz, çalışan zararlı yazılım ikilisini disassembler ve debugger ile analiz eder. Disassembler, çalıştırılabilir ikiliyi debug edilebilen ve değiştirilebilen assembly dili komutlarına dönüştürür. Hopper, OllyDbg, IDA gibi araçlar vardır; IDA, birçok platformu ve işlemciyi destekleyen popüler bir disassembler ve debugger’dır. Tersine mühendislik, zararlı yazılım analizinden çok daha geniş bir alandır. Sonda, ABC Biochemicals adlı kurgusal ve hassas bir biyokimya laboratuvarında zırhlı kapı kontrol sistemini etik olarak hack’leme senaryosunda IDA kullanılacaktır. Temel bir projedir ama kara kutu bir ikiliyi tersine mühendislikten geçirip daha güvenli kod tasarımı çözümleri bulma sürecini gösterir. Bir sonraki derste çeşitli zararlı yazılım türleri ele alınır” kadar kısaltılabilir.
Kitap bağlantısı bende açılmıyor; HN trafik bombasına mı yakalandı?