Root > Documents > Web Güvenlik Açıkları > Basic Assembly
Cyber-Warrior.Org \ Doküman \ Web Güvenlik Açıkları > Basic Assembly
Madde
  Yazar : Anon
  Date : 23.11.2004 16:16:30
 
# Basic Assembly
 

Win32Dasm programi, hem 16 hem de 32 bit çalistirilabilir dosyalari assembler kodlari haline getirebilen, bunun yaninda dosyalari adim adim çalistirarak hata ayiklama imkanini da veren Windows tabanli bir disassembler programidir. UR Software sirketi tarafindan hazirlanmistir. Birbirinden pek fazla farki olmayan birçok versiyonu vardir. Bu ödevde 8.93 versiyonu incelenmistir.

MENU KOMUTLARI

Disassembler Menüsü:

Open File To Disassemble: Var olan bir dosyayi açip assembler kodlarina çevirir. Win32Dasm \’in tanidigi çalistirilabilir dosya formatlari sunlardir :

• Çalistirilabilir dosyalar : *.exe;*.dll
• Korumali mod sunucu programlari : *.386
• Gerçek mod programlari : *.com
• Windows denetim masasi programlari : *.cpl
• Donanim sürücü programlari : *.drv
• Font dosyalari : *.fon
• Mpd dosyalari : *.mpd
• Visual Basic Çalisma zamani bilesenleri : *.ocx; *.vbx
• Sanal Donanim sürücüleri : *.vxd
• Sistem dosyalari : *.sys

Eger bu formatlarin disinda bir dosyayi disassemble etmek istiyorsak karsimiza gelecek olan Dosya Aç diyalogunda All Files *.* seçenegini seçmemiz gerekir. Bu durumda Win32dasm programi bize dosyayi çevirmeye nereden baslayacagini bir diyalog ile soracaktir. Offset i 0000H olarak seçili gelen bu menude istenilen offset verilerek buradan itibaren disassemble isleminin yapilmasi saglanabilir. Ancak bu durumun saglikli sonuçlar vermesi çok zordur. Tabii ki bir programi ya da program oldugundan süphelendiginiz bir dosyayi incelemek için güzel bir özelliktir. Örnegin *.obj;*.tpu;*.dcu;*.lib gibi dosyalar çalisabilen ama Win32dasm programinin tanimadigi dosyalardir. Çünkü bu tarz dosyalarin baslangicindaki header denilen baslik bilgilerinin içerildigi bölümler ya yoktur ya da bu formatlari yaratanlar tarafindan açiklanmamistir.

Save Disassembly Text and Create Project File: Çevrilme islemi tamamlanmis olan bir dosyayi assembler kodlari halinde uzantisi *.hpj olan bir ASCII dosyasina kaydeder. Bu komut sayesinde disassemble edilmesi çok uzun zaman alan program ya da dosyalarin tekrar tekrar açilmasi gerektigi durumlarda zaman kaybini engelleyebiliriz. Bunun disinda su an için diger özel bir amaci yoktur.

Print Preview: Hemen hemen her programda bulunan baski önizleme özelligi Win32dasm programina da eklenmistir. Yazicidan çikti almayi düsündügünüz bir *.hpj dosyasinin yazilmis halini bu komutla gelecek olan diyalog penceresinden görebilirsiniz.

Print: Bu komut *.hpj dosyasini yaziciya gönderir. Dosyaya yazdirma, baslangiç ve bitis sayfalarini seçme gibi iyi seçenekleri olan yazdirma diyalogu ile dosyanizi yazicidan çikti olarak alabiliriz.

Print Setup : Yazici ayarlarini yapabilecegimiz Printer Setup diyalogunu gösterir.

Copy Selected Lines : Seçili olan çevrilmis satirlari diger programlarda kullanilmak üzere Clipboard objesine kopyalar.

Select Font : Win32dasm ana penceresinde anlasilmaz karakterler görüyorsak bunun sebebi geçerli fontun seçilmemis olmasindan kaynaklanmaktadir. Bu durumu engellemek için bu komutu kullaniriz.

Save Default Font :Geçerli olan fontu baslangiç fontu olarak kaydeder. Program bir daha açildiginda yeni font geçerli olur. Bu komut demo versiyonlarda çalismamaktadir.

Clear All Trace Marks : Bir programi debug ederken koydugumuz izleme noktalarinin hepsini birden kaldiran islevli bir komuttur.

Disassembler Options : Bu komutu seçtigimizde karsimiza Disassembler Options baslikli bir diyalog gelecektir. Bu pencerede sol taraflarinda onay kutusu bulunan üç seçenek vardir. Bu seçenekler :

• Enable Conditional Jump Xreferences : jxx komutlari sonucunda çagrilan offsetlerin basina bu bölgenin nereden çagrildigini açiklama bilgileri seklinde ekleyen seçimdir.
• Enable UnConditional Jump Xreferences : jmp komutlari sonucunda çagrilan offsetlerin basina bu bölgenin nereden çagrildigini açiklama bilgileri seklinde ekleyen seçimdir.
• Enable Call Xreference : Call komutlari sonucunda çagrilan offsetlerin basina bu bölgenin nereden çagrildigini açiklama bilgileri seklinde ekleyen seçimdir.

Bu seçimlerin programin çalismasinda ya da assembler derleyicilerinde derlenmesinde etkisi yoktur. Ancak kullanicinin nerede ve niçin oldugunu kaçirmasini önlemek amaciyla konulmus açiklama satirlari zorunlu bir ihtiyaçtir. Dolayisiyla bütün bu seçimler geçerli olarak isaretlenmis haldedir.

Exit : Win32dasm programini sonlandirir.

Project Menüsü :

Open Project File : Daha önceden disassemble edilmis ve diske kaydedilmis olan bir *.hpj dosyasini tekrar açar. Böylece zaman kaybini önleriz.

Debug Menüsü :

Load Process : Disassemble edilmis bir programi adim adim çalistirmak üzere bellege yükler. Bu komut sayesinde yalnizca kendi basina çalisabilen programlar bellege yüklenebilir. Diger dosyalarin debug edilebilmesi için Attach To An Active Process Seçenegi seçilmelidir. Bu komutu seçtigimizde komut satirina parametre olarak eklenecek bilgileri isteyen bir diyalog gelir. Bu durumdayken hiçbir parametre verilmeden program yüklenebilecegi gibi istenilen parametreler de verilebilir.
Parametreleri verip Load butonuna tikladigimizda karsimiza Win32dasm ana penceresi haricinde iki adet pencere daha gelir. Bu pencerelerin hepsi etkilesimli olarak çalisir. Yani herhangi birinde yaptigimiz bir islem tüm pencereleri etkileyecektir. Sol alt tarafa yerlesen pencere statik yani degismez bilgiler olan register, stack, flags , segment , Active Dlls, User Adress1, User Adress2 gibi çerçeveleri içerir. Programin çalismasi esnasinda her türlü degisikligi bu pencereden izleyebiliriz. Sag üste açilan pencerede ise bir sonraki çalistirilacak komutun ve program içindeki komutlarin karsiligi olan assembly komutlari ve programi isletmek için gerekli olan komut butonlari yer alir.

Attach to an Active Process : Çalismakta olan bir programi disassemble eder ve Win32dasm programi içerisinde gösterir. Diskte sikistirilmis bir sekilde saklanan dosyalarin disassemble edilmesi bu sayede gerçeklestirilir.

BreakPoint Toggle : Load Process komutu ile yüklenmis olan program içerisinde durmasini istedigimiz noktalara bu komut sayesinde ulasabiliriz. Hata ayiklama için kaybedilen zamani en aza indirir.

Run Process : Debugger pencerelerine yüklenmis olan geçerli programlari çalismalari bitene kadar veya konulmus olan bir breakpoint gelene kadar çalistirir.

Pause Process :Debugger penceresinde çalistirilan programin isleyisini geçici olarak durdurur. Ancak bu komut Windows Mesajlarinda girilmis olan döngülerde ise yaramaz.

Goto Current Eip : Disassembly penceresinde bir sonraki komutun assembly kodunun gösterilmesini saglar.

Single Step Thru : Call ve Rep komutlari gibi bir komutla birden fazla isin yapildigi komutlarin birer birer yapilmasini saglar.

Single Step Into :

Auto Single Step Thru : Single Step Thru komutunu otomatik olarak gerçeklestirir. Bir breakpoint olusuncaya kadar ya da API mesajlasmasi gerçeklesinceye kadar programi çalistirir.

Auto Single Step Into :

Terminate Process : Geçerli olarak debugger penceresine yüklenmis olan islemi bitirir ve bellegi temixler.

Debugger Options : Bu komut seçildiginde asagidaki seçimlerin bulundugu bir diyalog gelir:
• Enable Command Line on Load
• Debug only This Process
• Display Program Generated Exceptions
• Enable Break on Create Process
• Enable Break on Exit Process
• Enable Break on Load Dll
• Enable Break on UnLoad Dll
• Enable Break on Create Thread
• Enable Break on Exit Thread.

Search Menüsü :

Find Text : Verilen sekildeki bir texti disassemble edilmis text içinde arar. Bulunca kirmizi ile isaretleyerek kullaniciya gösterir. Programin tipine göre 32 bit ya da 16 bit seklinde gösterimleri saglar.

Find Next : En son yapilan aramayi kalinan yerden tekrarlar. Çogu programda da oldugu gibi F3 tusu bu islevin kisayoludur.

Goto Menüsü :

Goto Code Start : Programin disassemle edilmeye baslandigi noktaya gider. Sonraki çalistirilacak komutu burasi olarak ayarlar. F7 tusu bu islevin kisayoludur.

Goto Program Entry Point : Windows tarafindan programin isletilmeye baslanacagi adres olan programin giris noktasi genelde programin son kisminda olur. Yani bütün  segmentler tanimlandiktan sonra hangi kod segmentinin programin ana procedürü oldugunun söylendigi yerdir. Program buradan itibaren çalismaya baslar.

Goto Page : Bu islev direkt olarak disassemble edilen programla ilgili degildir. Assemble kodlarinin saklandigi text alani mantiksal olarak sayfalara bölünmüstür. Kullanici gitmek istedigi sayfayi ilgili dialog kutusuna girince o sayfanin basina yönlenecektir.

Goto Code Location : Disassemble textinin birinci kod segmentine yönlendirilmesini saglar.

Execute Text Menüsü :

Execute Jump : Disassembly edilmis text içerisinde o anda üzerinde bulunulan satirda kosulsuz bir dallanma var ise bu komut ile dallanmanin yapildigi offsette yer alan assembly kodlari karsimiza gelir. Sag ok tusu bu fonksiyonun kisayol tusudur.

Return From Last Jump : Eger bulunulan satira gelmek için Execute Jump komutunu kullanilmis ise veya bulunulan satiri programin diger bir prosedürü çagiriyor ise çagirma islemini gerçeklestiren offsetteki assembly kodlari gösterilir. Bu fonksiyonun kisayol tusu sol ok tusudur.

Execute Call : Bulunulan satirdaki call komutunun çagirdigi offseti gösterir.

Return From Call : Call ile gelinmis bir noktadan çagrinin yapildigi offsete geri dönülür.

Functions Menüsü :

Imports : Disassemble edilmis olan programin kullandigi harici fonksiyonlari listeler. En çok kullanilan fonksiyonlar "user.exe" "kernel.dll" "gdi.dll" dosyalarinin fonksiyonlaridir. Bunun haricindeki dosyalardan yapilan çagrilar programa göre degisir.

Exports : Bu özellik sadece *.dll dosyalari içindir. *.dll dosyalari içindeki diger programlarin da kullanabilmesi için hazirlanan fonksiyonlar belli bir index numarasina göre siralanmis haldedir. Bu komut ile sadece görülmesine izin verilmis fonksiyonlar incelenebilir. *.dll dosyalarinin kendi çalismalari için hazirlanmis olan fonksiyonlar bu komutla görüntülenemez.

Hex Data Menüsü :

Hex Display of Data Object/Segments : Programin verilerinin yer aldigi data segmentini ve kullanilan objelerin geçerli bilgilerini içeren object segmentini hexadecimal formatta gösterir.

Hex Display of Code Data : Programin çalisan kisiminin yer aldigi kod segmentlerini hexadecimal formda gösterir.

Refs Menüsü :

Menu Reference : Disassembly edilen program içinde varsa menulerin isimlerini ve ID numaralarini liste kutusu seklinde gösterir.

Dialog Reference : Program içindeki dialog pencerelerinin isimlerini ve handle larini listeler.

String Data Reference :  Program içindeki hata mesajlarini , kullanilan objelerin degerlerini ve hatta string tipindeki degiskenlerin içerigini gösterir. Ingilizce karakterler disindaki harfleri tanimamasi nedeniyle pek islevsel degildir. Çünkü kullanilan string degiskenlerinin degeri (özellikle sifreler) çok farkli karakterlerden olusabilir.

Help Menüsü :

Contents : Win32dasm8.hlp dosyasinin içindeki yardim basliklarini gösterir.

Context Help  : Bu komut seçildiginde Win32dasm ana penceresi üzerinde aktif olan herhangi bir nesneye tiklandiginda o nesnenin isleviyle ilgili kisa bir bilgi verilir.

burda bahsettigimiz konular temel giristi diger derslere biraz daha ayrintiya girip anlatacagiz.
binler muhabbetle...

   
   
Cyber-Warrior TIM All Legal and illegal Rights Reserved.\CWDoktoray 2001©