6 puan yazan GN⁺ 2024-07-26 | 1 yorum | WhatsApp'ta paylaş
  • 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

Sunulan biçimler

  • Tüm eğitim seti e-kitap olarak indirilebilir
  • Yeni eğitimler eklendiğinde e-kitap sürümleri de otomatik olarak güncellenir

1 yorum

 
GN⁺ 2024-07-26
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 help yazı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ı.

    • Linus’un BitKeeper kullanmasını illa “aptalca” görmek zor. O dönemde eldeki araçlar arasından en iyisini seçmiş sayılır; mutlak anlamda en iyisi miydi bilinmez ama Linus birden çok aracı inceleyip değerlendirmişti.
      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.
    • Andrew bizi bir kez değil, iki kez kurtarmış oldu. Gol atan insanlara ihtiyaç olduğu kadar, kritik pası veren insanlara da ihtiyaç olduğunu gösteriyor.
    • Lisans öğrencisiyken fakülte yemekhanesinde tesadüfen Tridge’den BitKeeper/git hikâyesini bizzat dinlediğimi hatırlıyorum.
  • 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.

    • Ben de çocukken CE/IDA’ya çok uzun süre bakarak tersine mühendislik öğrendiğim için, biri nasıl öğrenmesinin iyi olacağını sorduğunda pek iyi bir cevabım yok.
      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.
    • Doğrudan tersine mühendisliğe dalmak da mümkün, ama ister örgün eğitimle ister kendi kendine olsun, mühendislik geçmişi yoksa iş çok daha zorlaşıyor.
      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.
    • Yapılandırılmış öğrenmenin ve tekrarlı alıştırmaların gücünü fazla küçümsüyorsunuz. Eleştirel düşünceyi, merakı ve tutkuyu aktarmak zor olabilir; ama iyi yazılmış bir kitap, deneme yanılmaya gidecek zamanı makul ölçüde ciddi biçimde azaltabilir.
      Kitap çok ama “iyi” kitapların bir elin parmaklarını geçmemesi de önemli.
    • Yemek yapmanın da kitaptan öğrenilen bir şey olduğunu hiç düşünmedim.
  • 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.

    • Secrets of Reverse Engineering 2005 tarihli bir kitap; daha güncel kitaplar arasında önerebileceğiniz var mı?
  • 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ı.

    • Java’da DnSpyEx’in karşılığı olan bir araç olsa iyi olurdu. Recaf4’ün hazır olmasını bekliyorum.
  • 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.

    • Yazmış olması takdire değer, ama ben de benzer hissettim. Cümleler fazla uzun ve lafı dolandırıyor, okumayı zorlaştırı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ı?