Yazılım’ı Kırmak

Bilgisayarın, ülkemize ilk geldiği günden itibaren gelişim gösteren sektördür yazılım. Zamanında iş veya günlük hayatta ‘keşke bir makina olsa ve bütün bu problemleri otomatik halledebilseydi’ dediğimiz çoğu işi bilgisayar yazılımları sayesinde bugün halletmekteyiz. Bizim hayatımızdaki rutin ve profesyonel problemlerdeki kurtarıcımızdır yazılım ürünleri. Örnek olarak, birkaç yıl içinde, klişeleşmiş bir laf olan ‘Eyvah! Eve gitmem lazım ocakta yemeğim kalmış.’ cümlesini IoT (Internet of Things) teknolojisini kullanan yazılımlara sahip Akıllı Ev’ler sayesinde tarihe gömmüş olacağız. Ne yazık ki, yazılımların bu ve bunun gibi kolaylıkları sağlamasına rağmen ücret ödemek şu an bile çoğu kullanıcı için ‘gereksiz’ olarak görülmektedir. Yazılım ürünlerinin yıllardır aşamadığı en büyük problemlerden biridir bu. Yazılım, ‘El ile tutulur’, somut bir ürün olmadığı için yazılıma verilen para genellikle kullanıcılar tarafından ziyan olarak görülmüştür. Bu yüzden korsan yazılım doğmuştur. Ülkemizde, bilgisayar kullanan kişilerin çok büyük bir çoğunluğu korsan yazılım kullanmayı, ücretli ve lisanslı yazılım kullanmaya tercih etmektedir. VI Labs firmasının Kasım 2014 tarihine göre yaptığı korsan yazılım kullanan ülkeler analizinde Türkiye onuncu sırada yer almaktadır. En çok rağbet alan korsan yazılımlar ise genellikle oyunlar, ofis uygulamaları, işletim sistemleri ve profesyonel yazılımlardır. Hatta siz şu anda farkında olmasanız bile korsan yazılım kullanıyor olabilirsiniz. Peki, ülkece bu kadar yaygın kullandığımız bu korsan yazılımlar nasıl yapılıyor diye hiç düşünmüş müydünüz? Otomotiv ve makine sektöründe de kullanılan bir teknik olan Tersine Mühendislik tekniği sayesinde lisanslı yazılımların korsan kopyaları üretilebilmektedir. Tersine mühendislik işlemlerinden geçirilen yazılım ürünlerinin lisans kontrol mekanizması devre dışı kalmaktadır ve bu sayede ‘yazılıma para ödemekten kurtulmuş’ oluruz.



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

Bunları da sevebilirsiniz

Bir cevap yazın