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. Örnek yazılımlar eski olup test amaçlı kullanılmışlardır. Yazı lise yıllarıma ait olduğundan sürç-i lisan ettiysem af dilerim.


Merhaba arkadaşlar bu yazımda Delphi ve Visual Basic programlarında işimizi kolaylaştıracak DeDe ve VB Decompiler programlarından bahsedeceğim.Reverse Engineering’de en kolay gözlem ortamı C++ ile yazılan programlarda daha sonra Delphide ve Visual Basictedir.Sebebi C++ esnek ve ileri düzey programlama ortamı sağlamak adına bazı şeyleri kullanıcıya bırakmasıdır.

Örneğin Microsoft Visual C++’da Windows arayüzlü programlar yazmak için apilerden yada MFC kütüphanesinden yararlanırız.Fakat Delphi ve Visual Basic’de form hazır bir şekilde sunulmakla birlikte bileşenlerde sürükle bırak mantığının olması işi oldukça kolaylaştırmakta kaybolan süreyi azaltmaktadır.Aslında Microsoft Visual C++ derleyiciside bir sihirbaz yardımıyla basit bir taslak form ve bazı bileşenleri programcıya sunar. 

Fakat Delphi ve Visual Basic’inkiyle karşılaştırılınca çok daha ilkel birşey karşımıza çıkar.C++ felsefesini anlatarak uzun uzadıya konuyu dağıtmamak adına asıl konumuza dönersek Delphi ve Visual Basic’de birçok şey hazır sunulduğu için bir Visual Basic’de derlenmiş programın yada Delphi’de derlenmiş programların genel yapısı çözüldüğü için bazı şeylere erişim daha kolay hale gelmiştir.C++ programlarında da resource editorlerle form özelliklerinde kısmen değişiklikler yapılabilir.Fakat daha sonra göreceğimiz üzere Delphi ve Visual Basic programlarınki kadar değil.Çünkü iş sadece form özellikleriyle bitmemektedir. 

Örneğin Visual Basic form özelliklerini ... isimle veri olarak dosyaya kaydediyorsa daha sonra o verileri değiştirerek form özellikleriyle oynayabiliriz. xxxxxx adresindeki 0 verisi ... butonunu false ediyorsa oraya 1 koyarak enable edebiliriz.Bunlar derleyici tarafından dosyaya yazıldığı için daha sonradan işlevleri anlaşılabilir.Fakat kod yapısı programcıya kaldığı için program kodlarını Delphi,Visual Basic yada herhangi bir dilde geri getirme şansımız olmaz. 

Disassemble eder ve assembly kodlarını üzerinde assembly bilgimizi kullanarak değişiklikler yapabiliriz.Fakat bir yere kadar.Çok uzun ve yorucu bir işlemdir.Orada neler gerçekleştiğini apilere bakarak aşağı yukarı anlayabiliriz.Üstüne kodda işimize yarayacak bölgeyi bulmalı ve orayı iyice analiz etmemiz gerekir.Bu yüzden derlenmiş programlar üzerinde yaptığımız değişiklikler genelde ufak tefek şeyler olur.Çünkü yerine göre bu işler saatlerimizi,günlerimizi alır. 

.Net platformu için geliştirilen programların durumu önlem alınmazsa bunlara göre çok daha vahimdir.Bu konu hakkında ayrıntılı bilgiyi .Net hakkında yazacağım dökümanımda vereceğim. 

Nag screenlerin,kod bloklarının olduğu yerleri uzun süre arayarak(programına göre değişir) vakit kaybetmek yerine bu programlarla kısa yoldan adreslerini alarak o bölgeye konumlanır ve yapacağımız şeyleri yerine getiririz. 

Delphi için DeDe,Visual Basic içinde VB Decompiler(lite sürümü bizim için yeterlidir) ve alternatif programlar yeralmaktadır.Fakat sizleri ilk olarak Delphi’de Visual Basic’de yazılan programların yapısını incelemenizi değişikler yaparak sonuçları gözlemlemenizi tavsiye ediyorum.Bunlar hakkında yeterli bilgi sahibiyseniz bu tür programları kullanmanız yararınıza olacaktır.Çünkü amacımız harcadığımız zamanı kısaltmak birilerine birşey yaptırmak değil.O zaman birilerine bağımlı kalmış oluruz ve asla ileriye gidemeyiz. 

Bu yazımda olanları daha iyi gözlemleyebilmek amacıyla shareware Delphide ve Visual Basic’de yazılmış iki program buldum.Sizde download sitelerinde shareware kategorisinde programlar aratıp kırmayı deneyebilirsiniz.En büyük haz bu iş için yazılmış olan crackmeleri kırarak değil.Gerçek programları kırarak alınmaktadır.Piyasada büyüklü,küçüklü birçok program mevcut alın uğraşın biraz (: 

Gerekenler 

Ollydbg 
DeDe 
VB Decompiler Lite 
Peid (Packer,derleyici türünü öğrenmek için vs) 

Aspack ile packlenmiş olan programı unpack etmek için unpacking dökümanımı okuyabilir (unpacking’i öğrenmeniz açısından tavsiye edilir) yada nasıl manual unpack edileceğini bilmiyorsanız hazırcılık yaparak stripper 2.07 sürümü ile unpack edebilir yada benim unpack ederek paylaştığım exe ile değiştirebilirsiniz. 

Örnek programlar 

Absolute GIF Optimizer 1.01 

http://www.pcbit.com/ftp/gifoptsetup101.exe 

Unpack Edilmiş exe 

Burdan indirebilirsiniz. 

Acme Photo ScreenSaver Maker 1.90 

http://www.acme-photo-screensaver-maker.com/download/apssme.zip 

Öncelikle peid ile dosyayı seçerek packlenmişmi veya derleyicisi nedir vs hakkında bilgi alalım.Programı açıp “...” olan butona basıp dosyayı seçmeniz yeterli.Eğer peid o packer hakkında bilgi alabileceği signature’ı tanıyorsa gösterecektir.Tanımıyorsa ikinci alternatif olarak RDG Packer Detector kullanabilirsiniz.O da tanımıyorsa iş size kalacağı için uzayacak. 

Şimdi ilk olarak Delphide yazılmış olan “Absolute GIF Optimizer 1.01” programına ve DeDe’ye gözatalım.Program register edilebilir şekilde.Fakat DeDe’nin kullanım mantığını göstermek amacıyla register etmeyince karşımıza çıkan nag screen’i kaldıracağız.Programın register edilme kısmını olly ile kendimizde halledebiliriz.Programın register kısmının kırılması zor değil. 

Öncelikle DeDe’yi açıyoruz ve resimdeki butona basarak programı seçerek process butonuna basıyoruz. 

 

İşlem başarılıysa “...target is fully loaded” ve “dump successfull” mesaj pencereleri gelecek.Process butonuna bastıktan sonra işlemin süresi programa göre değişebilir bekleyiniz.En sonda daha ayrıntılı analiz yapılmasını isteyip istemediğimizi soracak bunları no diyerek geçebiliriz.Gerek yok. 

Herşey tamamlandıysa üsteki tabları gezerek biraz gözatalım.Form,prosedür isimleri,unitler,classlar,assembly kod blokları vs birçok şey derli toplu bir şekilde sizi karşılayacak.Buraları inceleyerek programı register formunu ve register butonuna basınca hangi kodların çalıştırıldığını görebilirsiniz. 

Şimdi bizim için gerekli olan şeyi yapıyoruz ve forms tabını seçiyoruz.Burada formların isimlerine ve form özelliklerini inceleyerek bize gerekli olanı buluyoruz.Biz nag screeni arıyoruz. Nag screende gördüğümüz kadarıyla başlığı about ve üstünde şirketin internet adresi vs yazmakta.Resimdede gördüğünüz üzere bilgiler tutuyor aradığımız form o. 

 

Daha sonra procedures bölümüne geçiyoruz ve classnamede TAboutBox’ı göreceğiz zaten onu seçiyoruz. 

 

Resimde görüldüğü üzere events bölümünde FormCreate var.Bizim için nag screen’in yaratıldığı yer önemli o yüzden onun adresi olan RVA’sını 48C0C0 değerini alıyoruz. 

Bu kadarı bizim için yeterli. DeDe ile işimiz bitti.Şimdi OllyDbg’a geçiyoruz ve programımızı açtıktan sonra assembly kodlarının olduğu bölümde sağ tıklayıp goto->expression’a not aldığımız adresimizi giriyoruz ve okleyerek gidiyoruz. 

O noktaya ulaşıyoruz ve deneme amacıyla bir breakpoint koyuyoruz ve programı çalıştırıyoruz.Eğer program tam nag screen çıkacakken durmuşsa doğru yoldayız.Alttaki resimdeki kod blogunu görene kadar çalıştıra basıyoruz. 

 

Şimdi breakpoint ile program durakladı.Şimdi yapmamız gereken buraya nerden geldiğimizi öğrenmek ve bir üst konuma çıkmak.Onun için sağ alt köşedeki stack penceresine bakıyoruz.Orada en üstte return to xxxxxx göreceksiniz.Demekki o adresten buraya gelmişiz ona resimdeki şekilde sağ tıklıyoruz ve follow in disassembler dedikten sonra oraya gidiyoruz.Buradaki system stack penceresinden bu tür işlemleri kontrol edebiliriz. 

 

Resimdede gördüğünüz üzere oraya ulaştık orada gördüğünüz call’a breakpoint koyunca nag screen çıkacakken programın duraklamasından doğru olduğunu anlıyoruz.Hemen üstünde je şartlı zıplama noktasını görüyoruz ve orayı incelediğimizde eğer oradan zıplarsak nag screen’i atladığımızı ve program akışına devam ettiğimizi görüyoruz. 

 

Bu sebeple onu şarta göre değilde sürekli zıplaması için je’yi jmp olarak değiştiriyoruz.Bunu yapmak için koda tıklıyoruz ve çıkan pencerede je’nin yerine jmp yazıyoruz adreslere dokunmadan ve assemble tuşuna basıyoruz. 

Bunu yaptıktan sonra o kodun üstünde sağ tıklayıp copy to executable->selection dedikten sonra karşımıza çıkan pencerede sağ tıklayıp save file diyoruz ve kaydediyoruz.İşlemleri doğru yaptıysak program sorunsuzca nag screen olmadan çalışacak. 


Şimdi sıra VB Decompilera geldi. 

“Acme Photo ScreenSaver Maker” isimli programımızı VB Decompiler ile “...” butonuna tıklayarak seçtikten sonra decompile sorulan mesaj penceresine yes diyerek decompile ediyoruz.İşlem biraz sürebilir.Bitince decompile ok mesaj penceresi çıkacak. 

Bu programda yapacağımız register işlemlerinin gerçekleştiği yeri bulmak.Aslında bunu Olly ilede yapabiliriz.Fakat yeri geldiğinde VB Decompiler işimize çok yarayacak o yüzden mantığını öğrenmemiz lazım. 

Register bölümüne bakınca aboutbox altında aynı form üstünde belirdiğini görüyoruz.O yüzden VB decompiler’da frmabout isimli formu seçiyoruz ve yine register formunda yazanlarla oradakileri karşılaştırıyoruz doğru yere baktığımıza emin olmak için. 

 

Doğru yerdeysek alttaki code bölümünden frmaboutu buluyoruz ağacı açarak inceliyoruz.Hepsine teker teker gözatıyoruz ve karşımıza resimde gördüğünüz üzere aradığımız şey çıkıyor. 

 

Solunda yazan RVA adresini alıyor (493B19) ve Olly’e geçiyoruz.Asm kodlarının olduğu bölümde sağ tıklıyoruz ve goto->expression’a adresi yazıp oraya konumlanıyoruz. 

 

Bundan sonra yapacağımız üstteki zıplama noktalarına bakmak olacak.Biraz üstlerde programın register edilip edilmediğinde rol oynayan iki önemli zıplama noktası olacak.Bunların yerlerini breakpointler koyarak kendiniz bulabilirsiz.Zıplamanız gerekiyorsa jmp geçmeniz gerekiyorsa nop koyarsanız program kırılmış olacaktır.Bu yazımda DeDe ve VB Decompilerın kullanımlarını konu aldığım için onları uzun uzun anlatmıyorum.