Tersine Mühendislik: Nerede Gerekli, Nerede Yasal Sınır Başlıyor
Tersine mühendislik, çalışan bir sistemi parçalarına ayırıp nasıl kurulduğunu geri çıkarmaktır. Çoğu zaman merak değil zorunluluk sonucu yapılır: belge yoktur, üretici ortadan kaybolmuştur, o kodu yazan kişiye ulaşmanın yolu kalmamıştır. İşin teknik tarafı genelde en kolay kısmıdır. Asıl ayrım, elde edilen bilgiyle ne yapıldığında ortaya çıkar.
Ne zaman gerçekten gerekir
Başvurma nedenlerinin çoğu tek cümlede toplanır: elinizde çalışan bir şey var, ama nasıl çalıştığını anlatan hiçbir şey yok. Bunun en sık görüldüğü yer eski sistemlerdir. Yirmi yıllık bir stok programının veritabanına yeni bir arayüz bağlamanız gerekir, kaynak kod kayıptır, üretici firma kapanmıştır. Yapacak başka bir şey yoktur.
Diğer başlıklar da var: desteği bitmiş donanım için yedek parça üretmek, kapalı bir protokole konuşan istemci yazmak, kendi ürününüzdeki açığı saldırganın gördüğü yerden görmek. Bir de rakip analizi var, ama orada işin rengi değişiyor; aşağıda ayrıca duracağım.
Bir protokolü çözerken disassembler'a genelde en son giderim. Önce trafiği kaydeder, girdiyi tek tek değiştirip çıktının nasıl kaydığına bakarım. Çoğu ikili formatın alan yapısı bu iki adımda ortaya çıkıyor, dosyayı hiç sökmeden.
Anlamak ile kopyalamak aynı iş değil
Konuyu anlatan metinlerin çoğu süreci beş adımlık bir liste hâline getirir ve son adıma "ürünün birebir kopyası da üretilebilir" diye ekler. Sonra bir paragraf aşağıda kopyalamanın suç olduğunu söyler. İkisi aynı yazıda duramaz.
Ayrım şurada: telif fikri değil, ifadeyi korur. Bir programın ne yaptığını, hangi algoritmayı kullandığını, bir dosya formatının nasıl kurulduğunu öğrenmek serbesttir. O bilgiyi kendi kodunuzla baştan yazmak da serbesttir. Serbest olmayan, orijinal kodun kendisini, yapısını, hatta yorum satırlarına kadar taşınmış izlerini yeni ürüne aktarmaktır. Dava açıldığında sorulan soru "aynı işi mi yapıyor" değil, "aynı ifadeyi mi taşıyor" olur.
Temiz oda yöntemi
Bu çizgiyi savunulabilir tutmanın bilinen yolu temiz oda yöntemidir. İki ekip kurarsınız. Birincisi orijinali inceler ve yalnızca davranışı anlatan bir belge yazar: şu girdi verildiğinde şu çıkıyor, şu bayrak şu anlama geliyor. Kod parçası geçmez, ekran görüntüsü geçmez. İkinci ekip orijinali hiç görmeden sadece o belgeye bakarak yazar. Phoenix'in 1980'lerde IBM PC BIOS'unu bu şekilde yeniden üretmesi yöntemin ders kitabı örneğidir.
Maliyeti açık: iki ekip demek. Karşılığında elinizde davranış belgesi kalır ve mahkemede işe yarayan tek şey odur, çünkü ikinci ekibin orijinale hiç erişmediğini gösteren yazılı kayıttır.
Yasal zemin: uyumluluk istisnası
Türkiye'de yazılım, Fikir ve Sanat Eserleri Kanunu kapsamında korunur. Kanun, programı hukuka uygun yoldan edinmiş kişiye, başka programlarla birlikte çalışabilirliği sağlamak için gereken bilgiyi elde etmek amacıyla kod üzerinde çoğaltma ve çeviri yapma hakkı tanır. İstisna dardır: yalnızca uyumluluk için gereken kısımlarla sınırlıdır, elde edilen bilgi başka amaçla kullanılamaz, benzer bir program geliştirmek için hiç kullanılamaz. Avrupa Birliği'nin yazılım direktifiyle aynı mantığı taşır.
Pratikte şu demek: kapalı bir sistemle konuşan bir eklenti yazmak için protokolü çözmek savunulabilir zemine oturur, aynı sistemin ucuz bir alternatifini üretmek için çözmek oturmaz. Lisans metninde açık bir yasak varsa (çoğunda vardır) tablo yeniden karışır. Kanuni istisna ile sözleşme hükmü arasındaki ilişki, projeye başlamadan önce bakılacak ilk yerdir, sonradan değil.
Çıktı ürün değil, bilgidir
Tersine mühendisliğin sonunda elde ettiğiniz şey bir ürün değil, bir anlayıştır. Kafada tutulduğu sürece tek kişiye bağlı kalır ve o kişi ekipten ayrıldığında sıfırlanır. Protokolün alan alan dökümü, hangi baytın ne anlama geldiği, denenip yanlış çıkan varsayımlar: hepsi yazılmalı. Özellikle yanlış çıkanlar, çünkü altı ay sonra aynı yolu ikinci kez deneyecek olan büyük ihtimalle sizsiniz.
Kaynaklar