Görsel http://www.vilabs.com/news-section/code-confidential/top-20-countries-software-piracy-2014 sitesinden alınmıştır.
Yazılım Derleme
Bir yazılımın nasıl tersine mühendislik yöntemi ile analiz edildiğinden önce bilmeyenler için derlenmiş yazılımın ne demek olduğundan bahsetmek istiyorum.
Yukarıdaki şemada, ilk aşamada bir derlenmemiş kod bulunmaktadır. Bu kodu çalışılır hale getirebilmek için bilgisayarınız önce kodu alıp derleyici ile nesne dosyasına, sonra da bağlayıcı ile bu nesneyi ilgili kütüphaneler ile ilişkilendirir. Bu işlem sonucunda ortaya çalıştırılabilir derlenmiş dosya ortaya çıkar. Çoğunuzun da bildiği gibi Windows işletim sistemlerinde yaygın olan “.EXE” uzantısı buna örnektir. Derlenmiş bir yazılımı, “notepad.exe” gibi uygulamalar kullanıp, kodlarını görüntülemek mümkün değildir. Çünkü derlenmiş yazılımlar binary’dir yani bildiğiniz 0 ve 1dir. Bu yazılım artık sizin anlayacağınız dil yerine işlemcinizin anlayacağı dile çevrilmiştir. Ancak Tersine Mühendislik yöntemleri ile kodları analiz edilip, incelene bilinir.
Tersine Mühendislik
Üniversitede yazılım, bilgisayar ve benzeri bölümler okuyanlar bilir. ‘Assembly’ programlama dilini öğrenmenin vakit kaybı olduğunu savunan öğrenciler vardır. Onun yerine daha güncel ve daha havalı konulara yönelmek isterler. Ancak, sanıldığının aksine ‘Assembly’ programlama dili, yazılım ürünlerini tersine mühendislik yaparken bilmeniz gereken en önemli şeydir. Bilmeyenler için ‘Assembly’ programlama dilini açıklamam gerekir ise, ‘Assembly’ bir programlama dilinin indiği son noktadır ve bilgisayarınızın bileşenlerine direk müdahale etmenize olanak sağlar. ‘Assembly’ programlama dilini anlayabilmek ve kodlamasını yapabilmek için işlemcinizin ve belleğinizin nasıl çalıştığını bilmeniz gerekmektedir. Derlenmiş bir kodu analiz etmek ve işlemcide gerçekleşen her operasyonu teker teker inceleyebilmek için ‘assembly’ bilmeniz şarttır.
Yazılımda uygulanan tersine mühendislik operasyonları üç farklı konuda işlenebilir:
-
Decompiling (Kaynak Koduna Dönüştürme)
-
Disassembling (Yazılımı ‘assembly’ Koduna Dönüştürme)
-
Debugging (Hata Ayıklama)
Decompiling, eğer derlenmiş kod yüksek seviye bir programlama dili (Java, C# vs.) ile kodlanmış ise tekrardan kodlarının bir kısmını geri getirmenizi sağlar. Basitçe, derleme işleminin tam tersi denilebilir. Örneğin, son zamanlarda yaygın olan Pokemon Go uygulaması Google Play Store’da yoktu ve insanlar oyunu oynayabilmek için internetten APK uzantılı dosyayı indirip, telefonlarına kurmaktaydı. Bu APK dosyasını bir Android Decompiler ile kaynak koduna dönüştürebilirsiniz ve yüksek seviye kodlarının çoğuna erişebilirsiniz.
Disassembling, eğer derlenmiş kod daha düşük seviye bir programlama dili (C vs.) ile yazılmış ise veya derlenmiş kodun hangi yüksek seviye programlama dili ile kodlandığını bilmiyorsanız disassemble işlemi ile kodu direk olarak ‘assembly’ kodlarına çevirebilirsiniz.
Debugging, bazı araçlar derlenmiş kodu sadece ‘assembly’ koduna çevirmez bununla birlikte size kodu satır satır analiz etmenize, her satırda işlemcinizde veya belleğinizde nasıl işlemler oluştuğunu gösterir. Bu sayede derlenmiş kodun nasıl çalıştığını çok daha iyi anlayabilirsiniz.
Peki, bu bahsettiğim yöntemler ile lisanssız ürün hazırlama nasıl oluyor? Tersine mühendislik yöntemleri sayesinde derlenmiş bir kodu analiz edebildiğinizden ve inceleyebildiğinizden bahsetmiştik. Bir yazılım ürünün lisans kontrolü yaptığı mekanizma da aslında ürünün içinde yazılmış bir kod betiğidir ve tersine mühendislik işlemleri uygulanarak bu mekanizma atlatılabilir. Lisans mekanizmasının bulunduğu kısım, yazılımın kod bütünlüğünü bozmadan değiştirildiğinde ve yazılım tekrar derlendiğinde ortaya lisansız, ‘kırılmış’ ürün oraya çıkmış olur. Tersine mühendislik yöntemlerinin kullanım alanı aslında sadece yazılım ürünlerinin lisans kontrolünü atlatmak değildir. Kötü amaçlı yazılımların araştırılması veya bir üründe oluşabilecek güvenlik zafiyetlerinin denemesi gibi alanlarda da tersine mühendislik yöntemleri kullanılmaktadır.
Yani, yazılım ürünlerinin lisanssız sürümlerini üretmek suç olmasına rağmen ciddi bir uzmanlık gerektirir. Eğer, yasa dışı lisanssız yazılım ürünü kullanıyor iseniz, evinizde ‘torrent’ diye tabir edilen dosyalar aracılıyla lisanssız yazılım ürünlerini bilgisayarınıza indirdiğinizde ürünü etkinleştirmek için size ne yapmanız gerektiğiniz açıklayan bir metin bulursunuz. Bence, bu metni takip ederken bize ne kadar basit görünse de aslında bunları hazırlayan insanların ciddi bir teknik altyapıya sahip olduğu ve yasa dışı olmasına rağmen durmadan devam ettiğini düşünmemiz gerekmektedir. Çünkü aslında yapılan iş ciddi bir iştir ve sanıldığının aksine hiç kolay değildir.
Görsel https://community.linuxmint.com/img/screenshots/radare2.png sitesinden alınmıştır.
Not:
Görsel http://draw.io ile
hazırlanmıştır.
Kaynaklar:
1)
http://www.vilabs.com/news-section/code-confidential/top-20-countries-software-piracy-2014