Announcements

Hello. It's been a long time. I have translated many of my latest projects and documents. I have hidden the all Turkish content except the document about the A* algorithm. I will translate it but I decided to keep it for a while because of the time issue. Also, there are a lot of old projects of mine are waiting to be translated.

Thanks.

Düzenleme(2012): Doküman yazılım güvenliği bilinci oluşturmak üzere eğitim amaçlı yazılmıştır. Hedef alınan program şahsıma aittir ve test amaçlıdır. Yazı lise yıllarıma ait olduğundan sürç-i lisan ettiysem af dilerim.


Arkadaşlar bu yazımda .net programları için reverse engineering göstereceğim. .Net programlarının yapısı farklı olduğu için diğer programlar gibi OllyDbg ile açıp Reverse Engineering ortamı sağlayamayız.Çünkü tüm .net uygulamaları derlendiklerinde MSIL adı verilen ara dile dönüştürülürler.Bu da başka başka platformlara framework yükleyince programlarımızın sorunsuz çalışabilmesi anlamına gelir.MSIL kodlarını incelemek için ILDASM kullanabiliriz. 

Günümüzde özellikle .Net dillerinden C# diline yoğun ilgi bulunmaktadır.Bir sürü ticari amaçlı veya bedava dağıtılan programlar vs. Fakat piyasada gördüğüm kadarıyla ticari program satanlar dahil çoğu kişi .Net dilleriyle yazılmış uygulamaları bekleyen tehlikeden habersiz.MSIL isimli ara dilden bahsetmiştim.Bu ara dil avantajlı olabilir.Fakat çok büyük bir zaafı vardır.Eğer yazdığımız program için özel önlemler almadıysak üst seviye dil koduna kadar programımız açılabilir.Önlem alınmazsa programcı için bir felakete dönüşebilir. 

Korunmamış bir programın başına neler geldiğini görmeniz hem de bir .net programının üstünde nasıl reverse engineering yapabileceğimizi göstermek için C#’da basit bir program yazdım.Program sabit bir anahtar kod soruyor.Doğruysa devam ediyoruz değilse hata mesajı görüyoruz. 

Örnek programı burdan indirebilirsiniz. 

Gerekenler 

Lutz Roader's .NET Reflector 
IDA Pro Advanced 5.1 (Full sürüm bulun Trial sürümde .Net programları için destek verilmiyor) 
Flex HEX yada herhangi bir HEX editör 

Programa bir ön bakış atalım.Program unlock code istiyor.Yanlışsa hata mesajını veriyor. 

 

Şimdi “Lutz Roader's .NET Reflector” isimli programımızı açalım ve yukarıdaki menüden C#’ı seçtikten sonra File->Open’dan programımızı seçelim.Programımız listenin en altına eklenecek. 

 

Resimde gördüğünüz üzere programımız listeye eklendi ve ağacı açtık.Şimdi daha alt ağaçları açarak programdaki fonksiyonların isimlerine bakarak bize gerekli olan yeri bulalım.Burada bir sürü fonksiyon var.Programda unclock code’u giriyoruz ve butona basıyoruz.Doğru girdiysek devam ediyor yanlış girdiysek hata mesajı alıyoruz.Kısacası herşey butona tıkladığımızda gerçekleşiyor.Bu yüzden button click fonksiyonunu arayacağız. 

Kısa bir araştırmadan sonra bulup üstüne çift tıklıyoruz ve korkunç manzara ile karşılaşıyoruz. 

 

Programın bütün kaynak kodları karşımızda.Resimdede gördüğünüz üzere textbox’daki değer “FireX” string’i ile karşılaştırılmış.Doğru ise “Unlocked!” mesaj penceresi çıkıyor ve program kapanıyor.Yanlış ise hata mesajı veriyor. 

“FireX” stringin’i aldıktan sonra yapılacak iş kalmıyor zaten.Bunun yerine programın seri numarasının doğru olup olmadığını kontrol eden bir fonksiyon düşünebiliriz.Buradaki kodları kopyalayıp kolayca bir keygen yapabiliriz. 

Şimdiki amacımız program üstünde reverse engineering yapmak.Butona bastığımız zaman sadece “FireX” stringinin değil, girdiğimiz tüm değerlerin kabul olmasını sağlayacağız.Bunun için IDA isimli programımızı açarak işe başlıyoruz. 

Yapacağımız adımlar karşımıza gelen mesaj penceresinde New butonuna tıklama ve karşımızdaki pencereden .Net tabını seçtikten sonra .Net Executable’ı seçmek.Oradanda dosyamızı seçiyoruz ve işlemlere devam ediyoruz. 

 

Programımız analiz edildikten sonra functions tabını seçip button1_Click fonksiyonuna tıklıyoruz.Hatırlarsanız .Net Reflectorde bu fonksiyon ismini görmüştük.Burası önemli.Örneğin programı .Net Reflectorde açtığımızda ve yaptığımız incelemeler sonucunda “regcode” fonksiyonu içerisinde programın seri nosunun hesaplandığını görürsek daha sonra düzenleme yapabilmek için IDA’da açacağımız için bu fonksiyon ismini hatırlamalıyız. 

button1_Click fonksiyonunu bulmuştuk şimdi fonksiyonu inceleyelim.Gördüğünüz üzere MSIL kodlarıyla birlikte şematik olarak karşımızda. 

 

Kodu incelediğimizde sonuca göre label’a atladığını görüyoruz. Yapmamız gereken o kısmı nop (hiçbirşey yapmadan geç) yaparak geçmek. “brtrue.s loc_361” seçiyoruz ve Hex View tabına geçiyoruz. 

 

Gördüğünüz üzere opcode’u 06 2D 14 bunu 00 00 00 yapacağız ve orası nop nop nop (üç byte yer kapladığı için) olacak.Orada 2D 14 seçili fakat soldaki 06’yıda dahil etmeliyiz 0A önceki kodun bitimini gösteriyor. Bu şekilde labela zıplama ihtimali kalmadan geçilecek.Şimdi hex editörümüzü açıp o bölgede değişiklik yapalım. 

 

Orayı bulmak için oradaki hexadecimal değerlerin olduğu satırın tamamını seçip hex editörümüzde aratalım ve doğru yerdemiyiz kontrol edelim. 

 

 

Oraya ulaştıktan sonra ve kontrol ettikten sonra değişiklikleri yapıyoruz ve kaydediyoruz.Doğru yaptıysak ne girersek girelim “Unlocked!” yazacak.