Win32 Dasm V8.93 Programının Incelenmesi


Win32Dasm programı, hem 16 hem de 32 bit çalıştırılabilir dosyaları assembler kodları haline getirebilen, bunun yanında dosyaları adım adım çalıştırarak hata ayıklama imkanını da veren Windows tabanlı bir disassembler programıdır. UR Software şirketi tarafından hazırlanmıştır. Birbirinden pek fazla farkı olmayan birçok versiyonu vardır. Bu ödevde 8.93 versiyonu incelenmiştir.

MENU KOMUTLARI

Disassembler Menüsü:

Open File To Disassemble: Var olan bir dosyayı açıp assembler kodlarına çevirir. Win32Dasm 'in tanıdığı çalıştırılabilir dosya formatları şunlardır :

·        Çalıştırılabilir dosyalar : *.exe;*.dll
·        Korumalı mod sunucu programları : *.386
·        Gerçek mod programları : *.com
·        Windows denetim masası programları : *.cpl
·        Donanım sürücü programları : *.drv
·        Font dosyaları : *.fon
·        Mpd dosyaları : *.mpd
·        Visual Basic Çalışma zamanı bileşenleri : *.ocx; *.vbx
·        Sanal Donanım sürücüleri : *.vxd
·        Sistem dosyaları : *.sys

Eğer bu formatların dışında bir dosyayı disassemble etmek istiyorsak karşımıza gelecek olan Dosya Aç diyaloğunda All Files *.* seçeneğini seçmemiz gerekir. Bu durumda Win32dasm programı bize dosyayı çevirmeye nereden başlayacağını bir diyalog ile soracaktır. Offset i 0000H olarak seçili gelen bu menude istenilen offset verilerek buradan itibaren disassemble işleminin yapılması sağlanabilir. Ancak bu durumun sağlıklı sonuçlar vermesi çok zordur. Tabii ki bir programı ya da program olduğundan şüphelendiğiniz bir dosyayı incelemek için güzel bir özelliktir. Örneğin *.obj;*.tpu;*.dcu;*.lib gibi dosyalar çalışabilen ama Win32dasm programının tanımadığı dosyalardır. Çünkü bu tarz dosyaların başlangıcındaki header denilen başlık bilgilerinin içerildiği bölümler ya yoktur ya da bu formatları yaratanlar tarafından açıklanmamıştır.

Save Disassembly Text and Create Project File: Çevrilme işlemi tamamlanmış olan bir dosyayı assembler kodları halinde uzantısı *.hpj olan bir ASCII dosyasına kaydeder. Bu komut sayesinde disassemble edilmesi çok uzun zaman alan program ya da dosyaların tekrar tekrar açılması gerektiği durumlarda zaman kaybını engelleyebiliriz. Bunun dışında şu an için diğer özel bir amacı yoktur.

Print Preview: Hemen hemen her programda bulunan baskı önizleme özelliği Win32dasm programına da eklenmiştir. Yazıcıdan çıktı almayı düşündüğünüz bir *.hpj dosyasının yazılmış halini bu komutla gelecek olan diyalog penceresinden görebilirsiniz.

Print: Bu komut *.hpj dosyasını yazıcıya gönderir. Dosyaya yazdırma, başlangıç ve bitiş sayfalarını seçme gibi iyi seçenekleri olan yazdırma diyaloğu ile dosyanızı yazıcıdan çıktı olarak alabiliriz.

Print Setup : Yazıcı ayarlarını yapabileceğimiz Printer Setup diyaloğunu gösterir.

Copy Selected Lines : Seçili olan çevrilmiş satırları diğer programlarda kullanılmak üzere Clipboard objesine kopyalar.

Select Font : Win32dasm ana penceresinde anlaşılmaz karakterler görüyorsak bunun sebebi geçerli fontun seçilmemiş olmasından kaynaklanmaktadır. Bu durumu engellemek için bu komutu kullanırız.

Save Default Font :Geçerli olan fontu başlangıç fontu olarak kaydeder. Program bir daha açıldığında yeni font geçerli olur. Bu komut demo versiyonlarda çalışmamaktadır.

Clear All Trace Marks : Bir programı debug ederken koyduğumuz izleme noktalarının hepsini birden kaldıran işlevli bir komuttur.

Disassembler Options : Bu komutu seçtiğimizde karşımıza Disassembler Options başlıklı bir diyalog gelecektir. Bu pencerede sol taraflarında onay kutusu bulunan üç seçenek vardır. Bu seçenekler :

·        Enable Conditional Jump Xreferences : jxx komutları sonucunda çağrılan offsetlerin başına bu bölgenin nereden çağrıldığını açıklama bilgileri şeklinde ekleyen seçimdir.
·        Enable UnConditional Jump Xreferences : jmp komutları sonucunda çağrılan offsetlerin başına bu bölgenin nereden çağrıldığını açıklama bilgileri şeklinde ekleyen seçimdir.
·        Enable Call Xreference : Call komutları sonucunda çağrılan offsetlerin başına bu bölgenin nereden çağrıldığını açıklama bilgileri şeklinde ekleyen seçimdir.

Bu seçimlerin programın çalışmasında ya da assembler derleyicilerinde derlenmesinde etkisi yoktur. Ancak kullanıcının nerede ve niçin olduğunu kaçırmasını önlemek amacıyla konulmuş açıklama satırları zorunlu bir ihtiyaçtır. Dolayısıyla bütün bu seçimler geçerli olarak işaretlenmiş haldedir.

Exit : Win32dasm programını sonlandırır.

Project Menüsü :

Open Project File : Daha önceden disassemble edilmiş ve diske kaydedilmiş olan bir *.hpj dosyasını tekrar açar. Böylece zaman kaybını önleriz.

Debug Menüsü :

Load Process : Disassemble edilmiş bir programı adım adım çalıştırmak üzere belleğe yükler. Bu komut sayesinde yalnızca kendi başına çalışabilen programlar belleğe yüklenebilir. Diğer dosyaların debug edilebilmesi için Attach To An Active Process Seçeneği seçilmelidir. Bu komutu seçtiğimizde komut satırına parametre olarak eklenecek bilgileri isteyen bir diyalog gelir. Bu durumdayken hiçbir parametre verilmeden program yüklenebileceği gibi istenilen parametreler de verilebilir.
Parametreleri verip Load butonuna tıkladığımızda karşımıza Win32dasm ana penceresi haricinde iki adet pencere daha gelir. Bu pencerelerin hepsi etkileşimli olarak çalışır. Yani herhangi birinde yaptığımız bir işlem tüm pencereleri etkileyecektir. Sol alt tarafa yerleşen pencere statik yani değişmez bilgiler olan register, stack, flags , segment , Active Dlls, User Adress1, User Adress2 gibi çerçeveleri içerir. Programın çalışması esnasında her türlü değişikliği bu pencereden izleyebiliriz. Sağ üste açılan pencerede ise bir sonraki çalıştırılacak komutun ve program içindeki komutların karşılığı olan assembly komutları ve programı işletmek için gerekli olan komut butonları yer alır.

Attach to an Active Process : Çalışmakta olan bir programı disassemble eder ve Win32dasm programı içerisinde gösterir. Diskte sıkıştırılmış bir şekilde saklanan dosyaların disassemble edilmesi bu sayede gerçekleştirilir.

BreakPoint Toggle : Load Process komutu ile yüklenmiş olan program içerisinde durmasını istediğimiz noktalara bu komut sayesinde ulaşabiliriz. Hata ayıklama için kaybedilen zamanı en aza indirir.

Run Process : Debugger pencerelerine yüklenmiş olan geçerli programları çalışmaları bitene kadar veya konulmuş olan bir breakpoint gelene kadar çalıştırır.

Pause Process :Debugger penceresinde çalıştırılan programın işleyişini geçici olarak durdurur. Ancak bu komut Windows Mesajlarında girilmiş olan döngülerde işe yaramaz.

Goto Current Eip : Disassembly penceresinde bir sonraki komutun assembly kodunun gösterilmesini sağlar.

Single Step Thru : Call ve Rep komutları gibi bir komutla birden fazla işin yapıldığı komutların birer birer yapılmasını sağlar.

Single Step Into :

Auto Single Step Thru : Single Step Thru komutunu otomatik olarak gerçekleştirir. Bir breakpoint oluşuncaya kadar ya da API mesajlaşması gerçekleşinceye kadar programı çalıştırır.

Auto Single Step Into :

Terminate Process : Geçerli olarak debugger penceresine yüklenmiş olan işlemi bitirir ve belleği temixler.

Debugger Options : Bu komut seçildiğinde aşağıdaki seçimlerin bulunduğu 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 şekildeki bir texti disassemble edilmiş text içinde arar. Bulunca kırmızı ile işaretleyerek kullanıcıya gösterir. Programın tipine göre 32 bit ya da 16 bit şeklinde gösterimleri sağlar.

Find Next : En son yapılan aramayı kalınan yerden tekrarlar. Çoğu programda da olduğu gibi F3 tuşu bu işlevin kısayoludur.

Goto Menüsü :

Goto Code Start : Programın disassemle edilmeye başlandığı noktaya gider. Sonraki çalıştırılacak komutu burası olarak ayarlar. F7 tuşu bu işlevin kısayoludur.

Goto Program Entry Point : Windows tarafından programın işletilmeye başlanacağı adres olan programın giriş noktası genelde programın son kısmında olur. Yani bütün  segmentler tanımlandıktan sonra hangi kod segmentinin programın ana procedürü olduğunun söylendiği yerdir. Program buradan itibaren çalışmaya başlar.

Goto Page : Bu işlev direkt olarak disassemble edilen programla ilgili değildir. Assemble kodlarının saklandığı text alanı mantıksal olarak sayfalara bölünmüştür. Kullanıcı gitmek istediği sayfayı ilgili dialog kutusuna girince o sayfanın başına yönlenecektir.

Goto Code Location : Disassemble textinin birinci kod segmentine yönlendirilmesini sağlar.

Execute Text Menüsü :

Execute Jump : Disassembly edilmiş text içerisinde o anda üzerinde bulunulan satırda koşulsuz bir dallanma var ise bu komut ile dallanmanın yapıldığı offsette yer alan assembly kodları karşımıza gelir. Sağ ok tuşu bu fonksiyonun kısayol tuşudur.

Return From Last Jump : Eğer bulunulan satıra gelmek için Execute Jump komutunu kullanılmış ise veya bulunulan satırı programın diğer bir prosedürü çağırıyor ise çağırma işlemini gerçekleştiren offsetteki assembly kodları gösterilir. Bu fonksiyonun kısayol tuşu sol ok tuşudur.

Execute Call : Bulunulan satırdaki call komutunun çağırdığı offseti gösterir.

Return From Call : Call ile gelinmiş bir noktadan çağrının yapıldığı offsete geri dönülür.

Functions Menüsü :

Imports : Disassemble edilmiş olan programın kullandığı harici fonksiyonları listeler. En çok kullanılan fonksiyonlar "user.exe" "kernel.dll" "gdi.dll" dosyalarının fonksiyonlarıdır. Bunun haricindeki dosyalardan yapılan çağrılar programa göre değişir.

Exports : Bu özellik sadece *.dll dosyaları içindir. *.dll dosyaları içindeki diğer programların da kullanabilmesi için hazırlanan fonksiyonlar belli bir index numarasına göre sıralanmış haldedir. Bu komut ile sadece görülmesine izin verilmiş fonksiyonlar incelenebilir. *.dll dosyalarının kendi çalışmaları için hazırlanmış olan fonksiyonlar bu komutla görüntülenemez.

Hex Data Menüsü :

Hex Display of Data Object/Segments : Programın verilerinin yer aldığı data segmentini ve kullanılan objelerin geçerli bilgilerini içeren object segmentini hexadecimal formatta gösterir.

Hex Display of Code Data : Programın çalışan kısımının yer aldığı kod segmentlerini hexadecimal formda gösterir.

Refs Menüsü :

Menu Reference : Disassembly edilen program içinde varsa menulerin isimlerini ve ID numaralarını liste kutusu şeklinde gösterir.

Dialog Reference : Program içindeki dialog pencerelerinin isimlerini ve handle larını listeler.

String Data Reference :  Program içindeki hata mesajlarını , kullanılan objelerin değerlerini ve hatta string tipindeki değişkenlerin içeriğini gösterir. İngilizce karakterler dışındaki harfleri tanımaması nedeniyle pek işlevsel değildir. Çünkü kullanılan string değişkenlerinin değeri (özellikle şifreler) çok farklı karakterlerden oluşabilir.

Help Menüsü :

Contents : Win32dasm8.hlp dosyasının içindeki yardım başlıklarını gösterir.

Context Help  : Bu komut seçildiğinde Win32dasm ana penceresi üzerinde aktif olan herhangi bir nesneye tıklandığında o nesnenin işleviyle ilgili kısa bir bilgi verilir.

Yorum Gönder

xxxxxx