spacer.png, 0 kB
Bilgi için: bilgi at bilgiguvenligi gov tr   

 

spacer.png, 0 kB
spacer.png, 0 kB
Reverse Engineering (Tersine Mühendislik) Giriş Yazdır E-posta
Veysel Hataş, TÜBİTAK BİLGEM   
12.10.2013

Tersine mühendislik kavramı farklı disiplinlerde kullanılan genel bir terimdir. Wikipedia tanımı ile RE; “Bir aygıtın, objenin veya sistemin; yapısının, işlevinin veya çalışmasının, çıkarımcı bir akıl yürütme analiziyle keşfedilmesi işlemidir. Makine veya mekanik alet, elektronik komponent, yazılım programı gibi parçalarına ayrılması ve çalışma prensiplerinin detaylı şekilde analizini içerir.” IT sektöründe program ve kodların analizinde, sızma testlerinde (penetration test) gibi kullanım alanları vardır. Bu giriş niteliğinde olan yazıda temel bir problemin çözümüne giden adımlar sırası ile işlenecektir.

Ubicrypt Summer School, Ruhr Üniversitesi’nin düzenlediği 1 haftalık Reverse Engineering etkinliğidir. Bu etkinlikte eğitmenler, x86 assembly konusunu kavramak adına yaz okulu kaydı öncesi ufak bir ödev eklemişler. Bu örnek IDA PRO yardımı ile çözülmeye çalışılacaktır.

Öncelikle challengess2013.bin uygulaması uzantısı .exe yapılarak, IDA PRO uygulamasının üzerine sürükleyip bırakılır. Karşımıza gelen ekranda kernel_options_1 > use_flirt_signature üzerindeki çentik kaldırılarak OK'e tuşuna basılarak devam edilir.

image1.png

IDA içerisinde debugger olarak Win32 debugger seçilmelidir. Debug işlemini başlatılmadan önce aşağıdaki assembly çıktısının ilk pencesine bakıldığında challenge değeri girmesi istendiği ve ardından call instruction ile scanf fonksiyonu çağırıldığı görülür. Giriş yaptıktan sonra değer str buffer’ına alınıp strlen fonksiyonu ile uzunluğu eax register’ına alınıyor, akabinde cmp ve jb instruction’larıyla girilen değerin 6 karakterden büyük olmasına bakılıyor. Eğer “>=6” ise sağdaki kutudan yola devam ediliyor.

image2.png

Debugger’ı başlatmadan önce, pencerede resimde görülen yere break point koyulur.

image3.png

Program debug ile başlatıldığında challenge değeri girildikten sonra %u-%u-%u-%u şeklinde bir değer girilmesi istenecektir.

F9 ile debug işlemi başlatılır. Program challenge değeri girilmesini beklemektedir. 6 karakterden büyük bir değer girilmesi gerekir. Dikkat edilmesi gereken şey, buraya girilen değer str buffer’ına alınıyor olduğudur. Bu buffer’ın sınır değeri kontrol edilmediği için challenge çözümünde, buffer overflow yöntemi ile program manipüle edilebilir. 33 tane 0 girildiğinde 004030D1 register değerini sıfır yapıp "Congratulations, you made it!" yazısı görülür. str buffer’a alınan değerdeki  karakterlerin ASCII karşılığı hex değerleri, çözüm değerinin oluşturulmasında (bazı hesaplamalarda) kullanılır. Yani girilen challenge değerine göre cevap değişmektedir.

Challenge ve solution olarak aşağıdaki değerler girilerek, enter’a basıldığında akış, breakpoint noktasında durur. Yaz okulu yetkilileri farklı cevaplar çıkmasın diye challenge olarak “ReverseEngineering” girilmesini  istemişler, bu makalede challenge değeri “abcdefgh” girilecektir.

image4.png

dword_4030A1 adresine çift tıklandığında, girilen solution ve challenge ‘in hex değerlerinin nerelerde olduğu görülmektedir. Bu değerler birazdan gösterilecek bazı hesaplamalar ile çözüm oluşturulup girilen solution ile kaşılaştırılacaktır.

image5.png

Step over (F7) ile bir alt penceredeki jnz instruction’a kadar adım adım ilerlenir. Bu pencere şifrenin ilk hanesi ile  girilen challenge’ın ilk hanesinin karlılaştırmasını yapmaktadır. Bu aşamada EAX register’ındaki değere bakılarak gerçek şifrenin ilk hanesinin 12Bh (decimal karşılığı 299) değeri olduğu görülür. Kalan haneleri bulmak için F9’a iki kere basılılarak resetlenir. Challenge değeri aynı değer (abcdefgh) girilir. Şifre ise 11-22-33-44 yerine 299-22-33-44 olarak girilir. Aynı adımlar tekrarlandığında sırasıyla şifrenin diğer haneleri de aşağıdaki gibi keşfedilmiş olur (Fakat her şifrede farklı aritmetik işlemler yapılması gerekir).

image6.png

Şifrenin adım adım bulunması;

7.png
image8.png

Farklı tersine mühendislik konuları anlatımı öncesi bu makale giriş niteliğinde olan bir yazıdır.


Favori olarak ekle (0) | Görüntüleme sayısı: 11766

Bu yazıya ilk yorumu yazın

Sadece kayıtlı kullanıcılar yorum yazabilir.
Lütfen sisteme giriş yapın veya kayıt olun.

 
spacer.png, 0 kB
spacer.png, 0 kB
Copyright 2017 TÜBİTAK-BİLGEM. Sitenin teknik altyapısında Joomla kullanılmıştır. Yazar ve site referans gösterilmeden alıntı yapılamaz. Görüşleriniz
spacer.png, 0 kB