Tersine Mühendislik serisinin 3. bölümünde Ollydbg içerisinde intermodular nedir? Ne tür verilere ulaşabiliriz bunlara bakacağız. Yapacağımız işlemlerde dosya üzerinde herhangi bir paketleme bulunmayacak.
Konu Başlıkları
intermodular nedir?
İntermodular terim olarak geçmektedir. Asıl amacı ise program içerisinde bulunan kodların windows sisteminden çağırdığı eventleri listeler. Örneğin bir microsoft word programını düşünelim. Biz word içerisinde işlem yaparken , yazıcı işlemleri biz komut vermeden çalışmaz. Word içerisinde bulunan ama biz çağırmadan çalışmayan yazdırıcı komutu word programının içerisinde barınmaktadır. İşte bu şekilde sonradan çağırılacak olan event listemiz ollydbg içerisinde intermodular calls adıyla geçmektedir. Ollydbg programında Ctrl + N kombinasyonu ile eventleri görebiliriz. yada sağ tıklayıp “Search For -> All intermodular Calls” ile erişebiliriz.
Hedef:
İntermodular Calls ile lisans koduna erişeceğiz. Birinci derste serial kodu bulmuştuk. Ancak bulduğumuz serial kod hazır olarak program içerisinde barınıyordu. Bu kez string araması ile değil eventler yardımı ile bulacağız. Çünkü programımız içerisinde yazılmış bir serial kod yok. Dosyamız visual basic ile kodlandı. Visual basic ile kodlanan programlar çalışabilmesi için “msvbvm60.dll” adlı bir componente ihtiyaç duymaktadır. Windows kütühanesi ile olan bütün işlemlerini bu dosya üzerinden atama yaparak devam eder. Aşağıda vereceğim eventler ise bu dosya üzerinden çalışan parçacıklardır. Örneklemek gerekirse “Webdeyazilim” adlı bir metinimiz olsun. Metnin uzunluğunu bulmak için kullandığımız “Len“,”StrLen“,”Lenght” gibi kullandığımız programlama diline göre değişen fakat aynı işlemi yapan komutlar belli eventleri çağırarak hesaplamalar yapar. Çıkarmamız gerken olay ise yazdığımız her kodun aslında yüzeysel kodlar olduğu derine indikçe işlemleri yapan komutların yazdığımız sistemin tabanında olduğunu anlıyoruz.
Eventler :
__vbaVarTstEq
__vbaVarTstNe
__vbaVarCmpEq
__vbaStrCmp
__vbaStrComp
__vbaStrCompVar
__vbaStrCopy
Az önce kodların yüzeysel olduğunu ve tabanında bu işlemleri yapan eventlerin olduğunu bahsetmiştim. Bu eventler asembly dilinde belli bir yapıya sahip. Ancak bu örnek sadece vb6 dilinde yazılmış bir program için geçerli .
.text:00401961 mov edx, offset aString ; “Webdeyazilim”
.text:00401966 lea ecx, [ebp-1Ch]
.text:00401969 mov [ebp-1Ch], esi
.text:0040196C call ds:__vbaStrCopy
.text:00401972 mov eax, [ebp-1Ch]
__vbaStrCopy Eventi bir tür değer taşımaya yarıyor. Basic dilinde bir kodla buna bakalım .
Dim sabitAnahtar As String
Dim anahtar As String
sabitAnahtar = “webdeyazilim.com”
anahtar = sabitanahtar & “gelen veri”
Yazılan kodlar çalıştığında eventler gerekli ofsetlerden çağırılır. Aktarma işlemini yaparlar. Kodların ne kadar yüzeysel yapıda olduğunu buradan daha net görebiliyoruz.
Videolu Anlatım :
https://youtu.be/RzdLCOkzVKw