Ana sayfa PROGRAMLAMA Tersine Mühendislik 6

Tersine Mühendislik 6 [IDA Pro Kullanımı]

0

Tersine mühendislik serisinin 6. bölümünde IDA PRO nasıl kullanılır? Hedef programın lisans fonksiyonları nelerdir? Bu verilerin nerede nasıl oluştuğunu inceleyeceğiz.

IDA PRO Nedir?

IDA PRO, Hex-Rays Firması tarafından geliştirilen bir disassembler aracıdır. Windows kütüphanesine doğrudan bağlı dosyaları analiz etmekte kullanılır. Ağaçlandırma özelliği sayesinde karmaşık kodları daha anlaşılabilir hale getirir ve sizlere fonksiyonlar arası geçişlerin kontrollerin detaylı olarak görünümünü sağlar.

Ağaçlandırma özelliğini en iyi kullanan yazılım IDA diyebilirim. Aracın temel kullanım amacı aslında geniştir. Malware analizlerinde ve tersine mühendislik alanında sıkça kullanılan bu araç küçük değişikler ile patch işlemi yapmanızı sağlar. Exe dosyaları ve DLL dosyaları üzerindede rahatça işlem yapılabilir.

IDA PRO Patch İşlemi :

Kullanılan Araçlar :

Derste kullanacağımız araçları edindiğinizi varsayıyorum. Hedef programımızı hem patch edeceğiz hem ida pro hakkında genel ve giriş düzeyinde bir bilgi edineceğiz.

Adım 1 : Hedef Programı Tanımak

Hedef programımızın arayüzünde incelemeler yapıyoruz ve bir tür hata mesajı aramamız gerekiyor. Resimdeki gibi bir key deniyoruz programımıza.

Rasgele bir key salladığımızda bize “Bad boy” şeklinde bir uyarı veriyor bunu bir yere not alalım bize gerek olacak.

Adım 2 : Programın Yazıldığı Dil

Hedef programda herhangi bir  koruma (obfuscate / pack) işlemi olup olmadığını kontrol etmek. Obfuscator ve paketlemeler hakkında bilgi sahibi değilseniz, tersine mühendislik 1. bölümüne göz atabilirsiniz burada detaylı olarak obfuscatorler hakkında bilgi vermiştik.

DIE bize programın hangi dilde yazılıdığını ve üzerindeki paketlemelerin neler olduğunu gösteriyor. Compiler yazan bölüm bize MASM32 ile derlendiğini söylüyor. Eğer herhangi bir paketleme olsaydı bize Protector şeklinde bir satır daha sunacaktı.

 

Adım 3 : IDA Pro Genel Bilgiler

IDA Pro 7.0 x86 sürümünü açıyorum.

IDA PRO Genel Görünümü Bu Şekildedir.

IDA açıldıktan sonra programımızı seçip başlatıyoruz ve böyle bir ekran ile karşılacağız. Fonksiyonlar alanında program içerisinde kullanılmış olan isimleri görüyoruz. Bold ve kırmızı renkli alanlar sistemden çağırılan apilerdir. Bu fonksiyonlar içerisinden sistemdeki dll dosyalarına ulaşır ve belirli parametre göndererek veya alarak iletişim kurar.

Windows işletim sistemimizde bulunan dll dosyaları (örnek : kernelbase.dll )içerisinden kullanılan bazı apiler ve anlamlarına bakalım. Eğer önceden bu apileri kullanmışsanız , nerede arama yapacağınızı daha iyi anlamış olacaksınız. Sadece temel ve basit olan bir kaç tanesini öğrenelim ne işe yarıyorlar? Resimde kullanılanlara bakarsak ; lstrlen, lstrcmpA,ExitProcess , IsDebuggerPresent apilerine erişilmiş ve işlem yapılmış hemen anlamlarına bakalım.

lstrlenKelimenin toplam uzunluğunu alır ve integer değer olarak dönderir. Örnek: int uzunluk= strlen(“webdeyazilim”); buradaki kodda uzunluk değerimiz 12 olarak dönecek “webdeyazilim” kelimesi 12 harften oluşuyor.

lstrcmpA Karşılaştırma yapmaya yarar. 2 farklı değeri karşılaştırır. Programa girmiş olduğumuz 123 değerini orjinal lisans kodu ile karşılaştırma yapar.

ExitProcess : Programın kapatılmasını sağlar.

IsDebuggerPresent Programın debug edip edilmediğine bakar. Ollydbg içerisinde programı açıyorsak buradaki kısım debug edildiğine dair bir değer döndürür. Bu kısımı video ile daha net bir şekilde anlattım.

Programımızın döndürdüğü “Bad boy” mesajını yukarıda görmüştük yanlış bir lisans kodu girildiğinde buton üzerindeki yazı değişiyordu. Şimdi bu kelimeyi ida içerisinde arayalım ve hangi fonksiyon içerisinde olduğunu bulalım. Programda herhangi bir paketleme olmadığı için bu string bilgileri açık olarak yazmakta. Eğer derleme şekli farklı olsaydı bu stringleri göremeyip diğer yollara başvurmamız gerekebilirdi. Başlangıç seviyesinde olduğumuz için belirli bir basitlikte gidiyoruz. Devam ediyoruz.

Ida içerisinde text aramak için bu kısımı seçiyoruz.

Bu kısımdan sonra açılan pencere ayarlarım bu şekilde olacak :

Text arama kutusu için ayarlar

Aramanın ardından bizi özel bir pencereye alacak ve sonuçları listeleyecek. Bizim için önemli olan fonksiyon içerisinde bir text verisini bulmak olacak. Birden fazla sonuç olabilir. Belki yüzlerce yerde bu text verisini görebilirsiniz. Önemli olan fonksiyonun işleyişini bakarak doğru yerde olup olmadığımızı kontol etmek.

Arama sonrasında çıkan sonuçlar

DialogFunc içerisinde “Bad boy” yazısının geçtiğini görüyoruz. Detaylı bir şekilde görmek için çift tıklayarak fonksiyona gidiyorum.

Graph görünüm penceresi

IDA programın fonksiyon akışını resimde görüldüğü gibi ağaçlandırma sistemiyle görselleştirecek. Arattığımız mesaj fonksiyon içerisindeki akış şeması bu şekildeymiş. İyi ve kötü mesajdan önce görmüş olduğunuz üst kısımda kanallar ikiye ayrılıyor. Bu kısım aslında bir tür karar verme kısmı. Blokların üst kısmında kodların yapmış olduğu işlemler sonucunda bizi iyi veya kötü mesaja atacak ayrılma bölümü var . Şimdi bu bölümü incelediğimizde direk olarak “Good job” bölümüne atlama yapabiliriz. Yani girdiğimiz serial doğru veya yanlış sonuç ne olursa olsun bizi iyi mesaja göndermesi için bir atlama yapalım. Bu düzenlemeyi Olly kullanarak veya Ida içerisinden yapabiliriz. Ben genelde Ollydbg kullanarak yapıyorum. Konu sonunda videolu anlatım ile her ikisininde nasıl yapıldığını gösterdim.

Ida ile değiştirelim ilk önce :

karar noktasını değiştirmek için assemble bölümünü buluyoruz.

Karar noktasına tıkladıktan sonra yani “jnz short good” tıklıyorum ve Assemble diyorum. Ben bloklara isim verdiğim için bende good ve bad şeklinde blok isimleri değiştirilmiş durumda. Videoda bu kısımın nasıl değiştirildiğini detaylı olarak gösterdim.

İşlem bittikten sonra Edit > Patch Program > Apply patches to input file.. kısmından .exe uzantılı dosyamızı kaydediyoruz. Artık hedef programımız hangi veriyi alırsa alsın bizi olumlu mesaja yönlendirecek.

Ollydbg kullanarak aynı adrese “0x401142” değerine giderek aynı bölüme ulaşabiliriz. “0x” adresini yazdıktan sonra karar verme bloğunun üzerinde “loc_401142” şeklinde bir değer mevcut. Değerin sadece sayısal kısmının ilk başına “0x” koyarak Ollydbg karşılığını bulabiliyoruz.

Ollydbg ile IDA adresini bulma

IDA içerisinde yapmış olduğumuz aynı işlemi burada BP(Break Point) koyduğum adresten sonra ilk sıçrama adresini NOP olarak değiştirdim ve olumlu mesaj adresine atlattım. Fonksiyon akışına göre yazılan şifre doğru ise atlama olmayacak. Yazılan şifre yanlış ise atlama olacak. IDA içerisinde akış bilgisini öğrenip burada işlem yaptık. Dilerseniz direk Ollydbg ilede Graph özelliğini kullanrak aynı görselleştirmeye ulaşmak mümkündür. Ancak IDA kadar detaylı değildir.

Ollydbg graph özelliğinde bulunan ağaçlandırma

Bulduğumuz adrese gidip “G” tuşuna basarak yada fareden sağ tk.> Graph sekmesinden bu bölüme ulaşabiliyoruz.

BİR CEVAP BIRAK

Lütfen bir yorum yazın!
Lütfen Adınızı Girin!