Mühendislerin bazen bir ürünü analiz etmek için tersini düşünmesi gerekir. Örneğin, bir makine mühendisi, tasarımına ve fiziksel özelliklerine dayanarak bir ürünün üretimi hakkında sonuçlar çıkarabilir. Hatta tam olarak anlarlarsa, aynı ürünü bile üretebilirler.
Tersine mühendisliği matematiksel denklemlerin ispatlarına da benzetebilirsiniz. Peki tersine mühendislik nasıl kullanılır?
Tersine Mühendislik Nedir?
Tersine mühendislik, bir sistemi yeniden üretmek veya iyileştirmek amacıyla analiz etme sürecidir. Tersine mühendisliğin çalışma alanlarına bakarsanız birçok farklı amaç için kullanabileceğinizi görebilirsiniz. Siber güvenlik açısından bakacak olursak tersine mühendislik yöntemleri ile aşağıdaki işlemleri gerçekleştirmek mümkündür:
- Açık kaynaklı olmayan yazılımların kaynak analizi
- Güvenlik açığı analizi
- Kötü amaçlı yazılım analizi
- Çatlama ve Yama
Tersine mühendisliğin günümüzde bilgisayar oyunlarında bile kullanıldığını görebilirsiniz. Örneğin, geliştiriciler genellikle tersine mühendislik yöntemlerini kullanarak yazılım modları oluştururlar.
Tersine mühendislik alanında statik ve dinamik olmak üzere iki farklı analiz yöntemi vardır. Bir programı gerçekten çalıştırmadan analiz ettiğinizde statik analiz gerçekleştirirsiniz. Dinamik analiz yöntemi ise, programın davranışını ve kullandığı verileri gözlemlemek için programı çalıştırmanızı gerektirir.
Ancak tersine mühendislik için analiz yapmadan önce bilmeniz gereken bazı önemli terimler vardır. bilgisayar mimarisi nasıl çalışır.
Bilgisayar Mimarisinin Başlıca Bölümleri
Bilgisayar mimarisini anlamadığınız sürece tersine mühendislik pratik olarak imkansızdır. Dört ana bölümü incelemeniz gerekir:
- Giriş: Veri girmek için bir dizi yöntem.
- İşlemci: CPU gelen verileri işler ve sahiplerine iletir. Merkezi işlem birimidir.
- Hafıza: İşlem sırasında verileri geçici olarak tutan alan.
- Çıktı: Son kullanıcının gördüğü sonuç.
Tüm bu ana konuları klavyenizde A harfine bastığınızda olduğu gibi bir örnekle aklınızda tutabilirsiniz. Bastığınızda, bir giriş olayı gerçekleşir. Bu aşamadan sonra, CPU verileri işler ve depolamak için bellekte küçük bir alan kullanır. Son olarak ekranınızda A harfini görerek işlemi çıktı ile sonlandırmış olacaksınız.
CPU'nun Derinliklerine Dalın
Tersine mühendislik konusunda gerçekten uzman olmak ve bu konunun derinliklerine inmek istiyorsanız, donanım, düşük seviyeli diller ve özellikle CPU hakkında ayrıntılı bilgiye sahip olmanız gerekir. CPU hakkında bilmeniz gereken temel konular şunlardır:
- Kontrol ünitesi: Verilerin CPU'da işlenmesinden ve ilgili alanlara aktarılmasından sorumludur. Bu birimi bir yönlendirme kontrol mekanizması olarak düşünebilirsiniz.
- ALÜ: Bu, Aritmetik Mantık Birimi anlamına gelir. Bazı aritmetik ve mantıksal işlemlerin gerçekleştiği yer burasıdır. Matematiğin derinliklerine inerseniz, temel dört işlemin temelde toplama işleminin varyasyonları olduğunu göreceksiniz. Dolayısıyla ALU toplamaya dayalıdır. Örneğin, üçten ikiyi çıkarmak, eksi ikiyi üçe eklemekle aynıdır.
- kayıtlar: Bunlar, işlenmiş verileri tutan CPU içindeki alanlardır. Bir programlama dilinde farklı değişken türleri olduğu gibi, farklı kayıt türleri vardır. Bir kayıt, kendisine atanan verilerin türünü ve niteliklerini korumaktan sorumludur.
- Sinyaller: CPU'nun aynı anda birçok farklı işlemi gerçekleştirmesini istiyorsanız, bunları düzenlemek için bir yöntem gereklidir. Bunu yapan elemanlara sinyal denir. Her işlem, başka bir işleme müdahale etmemesini sağlayan sinyallere göre hareket eder.
- Otobüs: Verilerin bir birimden diğerine geçmek için kullandığı yol. Adın ulaşımı nasıl önerdiğine dikkat edin.
Tersine Mühendislikte Sıklıkla Duyacağınız Kavramlar
Kayıt kavramının yanı sıra CPU'nun verileri nasıl işlediğini ve bellekte depoladığını anlamak, tersine mühendislik yaparken çok yararlı olabilir. Özellikle hafıza kavramını daha iyi anlamak için aşağıdaki şemayı kullanabilirsiniz:
Son olarak, tersine mühendislik analizi için kayıtlar hakkında bazı temel kavramları bilmeniz gerekir. En çok odaklanacağınız konulardan biridir. İşte size en özlü şekilde işinize yarayacak veriler, işaretçiler ve dizin kayıtları hakkında bazı açıklamalar:
- 1. EAX: Akümülatör Kaydı anlamına gelir. Burada genellikle aritmetik işlemler kategorisine giren verileri kaydeder.
- 2. EBX: Temel Kayıt anlamına gelir. Dolaylı adreslemede rol oynar.
- 3. EDX: Veri Kaydı anlamına gelir. EDX diğer kayıtlara yardımcı olur.
- 4. EIP: Talimat İşaretçisi anlamına gelir. Çalıştırılacak etki alanının adresini tutar.
- 5. ESP: Baz adresi tutar.
- 6. ESI: Kaynak dizin bilgisini tutar.
- 7. EDI: Hedef dizin bilgisini tutar.
Nüanslarını anlamak için tüm bunları ayrı ayrı araştırmalısınız. Ancak temellere bakarsanız ve iş mantığını anlamaya çalışırsanız, hangi işlemci mimarisiyle çalışırsanız çalışın, tersine mühendislik için kod analizi oldukça kolay olacaktır.
Tersine mühendislik genellikle makine koduyla başlar. Montaja aşina iseniz veya bir hakimiyetiniz varsa, yukarıdaki terimlerin çoğunu anlayabilirsiniz. 32 bit veya 64 bit işlemci mimarileri. Montajı sıfırdan öğrenmek istiyorsanız, tersine mühendislikte son derece faydalı olacaktır.
Bütün bunlarla ne yapacaksın?
İyi bir tersine mühendislik bilgisine sahipseniz, hangi işletim sistemi veya işlemci mimarisi ile çalışıyor olursanız olun kod analizi yapabilirsiniz. Örneğin bir çok programın veya bilgisayar oyununun crackli halini bulmak mümkündür. Bu tamamen illegal bir yöntemdir.
Ancak, etik bir siber güvenlik uzmanı olacaksanız, bu crackli programların neden cracklendiğini anlamak için tersine mühendislik kullanmanız gerekir. Tersine mühendislikte ilerlemek istiyorsanız veya yeni başlıyorsanız, donanım ve makine kodu arasındaki ilişkiyi öğrenmeye çalışmanız iyi bir seçim olacaktır.