Tek İleti Göster
Eski 06.06.2007   #3 (permalink)
staticiation
 
Katılma Tarihi: Şub 2006
Nereden: Bursa/es-es
Yaş: 23
Mesajlar: 1,780
Varsayılan

4.3.3. Assembly kodunun incelenmesi

Bu aşamada yapılacak işlem, String Data References butonuna tıklamaktır. String Data Items adlı bir pencere açılır. Kod aşağı doğru incelenerek oyunun hata mesajı bulunmaya çalışılır. Bulunduğunda, üzerine çift tıklanır [7].
4.3.4. W32Dasm textine dönülmesi
Sonra Win32Dasm textine dönmek için pencere kapatılır. Görüldüğü gibi CD kontrol rutininde bulunulmaktadır. Burası hata mesajının bulunduğu alandır [7].
4.3.5. Call ve jump komutlarının ofsetlerinin alınması
Bu aşamada, kodda bulunan bütün call ve jump komutlarının offsetlerinin not alınması gerekir. (OPBAR’ın mevcut renginin yeşile dönüştüğünden emin olunmalıdır.) @offset’in yanındaki h uzantısız hexadecimal sayıya ihtiyaç vardır [7].
4.3.6. Hiew programına geçilmesi
Daha sonra HIEW’e geçilir. Bu program içinde aşağı yukarı hareket için kursor tuşları kullanılır. HIEW.exe çalıştırılır. HIEW dizini içinde, exe dosya ve programların bir listesi bulunur [7].
4.3.7. Hiew içinde kırılacak programın exe’sinde numaranın değiştirilmesi
Hiew dizini içindeki listeden kırılacak oyunun kaydedildiği dizine gelinerek oyunun exe’sine tıklanır. F4’ e tıklanarak - Text, Hex ve Decode – menüsüne gelinir. Bu menülerden Decode’a tıklanır. Kodların offset adreslerinin bulunduğu bir liste gelir. F5’ e basılarak Win32Dasm’da not alınan numara buraya yazılır. Sayı yazıldığında bu numaranın bulunduğu satıra gelinir ve kursor komutun üzerine konumlanır. Örneğin, ekrana E92BF9BF74 gibi 5 byte’lık bir sayı gelirse buraya F3’e bastıktan sonra 90-90-90-90-90 yazılır. F10’ a basıp çıkıldığında oyunun CD koruması kaldırılmış olur [7].


















5. HİZMET PROGRAMLARININ TANITILMASI
Bir programın kırılması için, onun disassemble edilebilmiş koduna ihtiyaç vardır. Bu iki şekilde sağlanır. Birincisi, bir disassembler kullanarak programın deadlist(çalışır vaziyette olmayan bir exe'nin içeriği) denilen assembly kodu elde edilebilir. İkinci bir yöntem ise, debugger kullanarak live(canlı, yani o anda çalışan ve cpu(işlemci)'de işlenen assembly kodu) olarak bu programın içeriğinin görüntülenmesidir. Birinci yöntem daha uzun bir süre gerektirecektir, çünkü tüm exe analiz edilip içinde geçen tüm jump ve call komutları için referans açıklamaları oluşturmak gerekir. Diğer yöntem ise daha kolaydır. Sadece o anda işlenen kodun birkaç satır öncesi ve sonrası dahil olmak üzere görüntülenir. Yeni başlayanlar için disassembler kullanmak daha kolay ve cazip gelebilir, çünkü bu yöntemde assembly kodlarının yanında daha fazla açıklama vardır ve bir altyordamın nerelerden çağrıldığı ve hangi adres ya da değişkenleri kullandığı daha açık bir şekilde görülebilir.Program kırılımında zaman önemli görülüyorsa, debugger kullanmak daha uygundur. Bunun sebebi, disassembler programının exe'yi disassemble etmek için harcadığı zamandan kurtulmuş olunması ve debugger'da breakpoint(durak noktası) konulmasının daha kolay olmasıdır. Debugger kullanılarak daha dinamik breakpoint'ler konulabilir [8].
Program kırmak için bazen diğer tool'larla birlikte Hex Editör'ler de kullanılır. Hex Editör, programın exe'sini açarak yama yapılmasına ve kodun değiştirilmesine yardımcı olur.
Burada Disassembler, Hex Editör ve Debugger kavramları, en çok kullanılan örnekleri üzerinde incelenmiştir:
5.1. Disassembler
Çalıştırılabilir(exe) programlar hafızada, makine dilinde bulunurlar , bu kodların anlaşılabilmesi için, ASSEMBLY kodlarına çevrilmesi gerekir. Bu iş için kullanılan programlara disassembler denir [4].
Burada disassembler örneği olarak W32Dasm tanıtılacaktır:

5.1.1. W32Dasm
W32Dasm disassembler’ı Dedicated Servers & Web Hosting | Managed Web Hosting Services | The Planet adresinden temin edilebilir. Kurulumu kolaydır. Kurulum tamamlandıktan sonra, W32Dasm ile bir program disassemble edileceğinde, öncelikle W32Dasm programı çalıştırılır. Disassembler editörü gelir ve disassembler menüsü yardımıyla dosya saklandığı yerden çağrılarak işleme başlanır.
5.1.1.1. Özellikleri

• W32Dasm Windows NT 4.0 ile çalıştırılabilir.

• W32Dasm Intel MMX komut setini disassemble edebilmektedir.

• 32 bit debugger’ın, kod yamalama fonksiyonu(komut assembler’ı) vardır.

• CPU kaydedicilerinin ve bayrakların değişiklik göstergeci mevcuttur.

• Referans adresine sağ tuşla çift tıklandığında bütün Call ve Jump Cross Reference adreslerine dallanabilir. Referansa dönmek için F12 kullanılır [9].
5.1.1.2. Bir programın disassemble edilmesi
W32Dasm editörü Şekil 5.1.’de görüldüğü gibidir. Disassemble edilecek program, Disassembler menüsünden “Open File to Disassemble” penceresinden seçilir. Burada örnek olarak AudioWriter programının disassemble edilişi gösterilecektir.
Şekil 5.1. W32Dasm Editöründe disassembler menüsü

Açılan pencereden AudioWriter.exe tıklanarak disassemble edilecek program seçilmiş olur.

Şekil 5.2. Disassemble edilecek programın seçilmesi

Dosya seçilip, Aç tuşuna basıldığında W32Dasm, exe kodu assembly kodlarına çevirmeye başlar. Bu işlem 5 dakika kadar kendi kendine yürütüldükten sonra kodları gösteren bir ekran gelir. Bu ekran Şekil 5.3.'te gösterilmektedir.

Şekil 5.3. AudioWriter programının disassemble edilmesi

W32Dasm ile şifre kırma tekniği, programın açılışında girilen yanlış koda karşı verdiği hata mesajına dayanır. Bu mesaj not edilerek, kod içinde bulunmaya çalışılır. Kodlar yön tuşları yardımıyla aşağıya doğru incelenebilir. Wdasm programında kodlar incelenirken, ekranın en altında bulunan status bar'da o an üzerinde bulunulan satırın ofset adresi yer alır. Programın kırılımında, jump komutları(jnb, jl, jns, jbe, jo, jmp, jne, jb gibi) şifreyi bulma konusunda yardımcı olan noktalardır. Bu komutların adresleri üzerine gelindiğinde, diğer kodlarda Şekil 5.3.'te görülen izleme bandı maviyken yeşile dönmektedir. Şekil 5.4.'te kodların üzerine gelindiğinde status bar'da meydana gelen değişiklik gösterilmiştir.

Şekil 5.4. Kodların incelenmesinde status bar ve izleme bandının kullanımı
Disassembler içinde kodlar incelenerek hata mesajının olduğu yer bulunur. Bu mesajın öncesinde çok yakın bir yerde girilen numara ile gerçek seri numarasının karşılaştırılıp dallanıldığı bölüm vardır. Jump(dallanma) komutlarını ve çağrıları(call) çok dikkatli incelemek gerekir. Jump komutu değiştirilerek programın seri numara hata vermesi engellenmiş olur.
5.2. Hex Editör
Hex Editör Programı, programcının heksadesimal yama (patch) editörüdür. Diğer bir deyişle, NotePad gibi Text Editörler’den farklı olarak temiz textler yerine formatsız ikili(binary) dosyalarla çalışan özel editörlerdir [4].
Hex Editör programına örnek olarak, HexEdit tanıtılacaktır:


5.2.1. HexEdit
HexEdit programını kullanabilmek için gerekli olan tek dosya, HE.EXE çalıştırılabilir dosyasıdır. Bu dosya path’te bulunduğunda sorun yoktur. On-line yardım alabilmek için HEXEDIT.HLP dosyası da HE.EXE ile aynı dizine kopyalanmalıdır. Otomatik yedek(backup) ler alabilmek için HEB.BAT ve MAKEBAK.EXE dosyaları path’te bulunmalıdır (HE.EXE ile aynı dizinde olmak zorunda değildir) [10].
5.2.1.1. Özellikleri
• Birlikte çalışacağı dosyalarda büyüklük sınırlaması yoktur.
• Dosya üzerinde yapılan bütün değişiklikleri kaydeder. İstenildiği kadar geri alma(UNDO) imkanı sağlar.
• Güçlü bir makinada, dosyaları tarama hızı, 10 sn/MB oranındadır.
• Hızlı ve esnek bir ‘Bul/ Bul ve Değiştir’ özelliği vardır. Büyük-küçük harf duyarlılığıyla ya da olmadan bulma ve değiştirme imkanı sağlar.
• Dosyanın her byte(F2) ve sektörüne(SF2) sıradan erişimli atlama(jump) imkanı sağlar.
• Karakter stringleri ve heksadesimal serilerde arama yapar.
• 15000 tarama eşlemesine kadar saklama imkanı vardır.
• Desimal, heksadesimal ve ikili(binary) sistemler arası dönüşüm yapabilir.
• Tanınmayan karakterler için ASCII tablosu getirebilir (Alt-A).
• İkili dosyalarda sıradan erişimli stringler için tarama yapabilir (Alt-T).
5.2.1.2. Ekran görüntüsü
HexEdit çalıştırıldığında, yama yapılmak istenen dosya belirlenerek, okunacak ve aşağıdaki ekran görüntüsü oluşacaktır:





[Editing: C:\UTIL\HE\HE.EXE]ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ[HexEdit 2.1]
Found: 127/290 Changes : 4297 Mask:Off Mode:C Page:1
Current Sector: 39(00000027) Byte: 20360(00004F88)
Total Sectors : 127(0000007F) Bytes: 65503(0000FFDF)
ÍÍÍÍ00Í01Í02Í03Í04Í05Í06Í07Í08Í09Í0AÍ0BÍ0CÍ0DÍ0EÍ0 FÍÍÍÍÍÍ0123456789ABCDEFÍÍÍÍ
00- 74 69 6F 6E 20 6F 66 20-48 45 58 45 44 49 54 2E -00- tion of HEXEDIT. -00
01- 54 58 54 20 66 6F 72 20-6D 6F 72 65 20 69 6E 66 -01- TXT for more inf -01
02- 6F 72 6D 61 74 69 6F 6E-2E 36 54 68 65 72 65 20 -02- ormation.6There -02
03- 69 73 20 6E 6F 20 64 69-66 66 65 72 65 6E 63 65 -03- is no difference -03
04- 20 62 65 74 77 65 65 6E-20 74 68 65 20 72 65 67 -04- between the reg -04
05- 69 73 74 65 72 65 64 20-61 6E 64 20 6E 6F 6E 2D -05- istered and non- -05
06- 33 72 65 67 69 73 74 65-72 65 64 20 76 65 72 73 -06- 3registered vers -06
07- 69 6F 6E 73 20 28 74 68-69 73 20 69 73 20 4E 4F -07- ions (this is NO -07
08- 54 20 43 72 69 70 70 6C-65 77 61 72 65 21 21 21 -08- T Crippleware!!! -08
09- 21 21 29 2E 0F 20 20 20-20 4D 69 6B 65 20 47 72 -09- !!). Mike Gr -09
0A- 61 68 61 6D 0D 20 20 20-20 42 6F 78 20 36 30 30 -0A- aham Box 600 -0A
0B- 33 36 18 20 20 20 20 55-20 6F 66 20 41 20 50 6F -0B- 36 U of A Po -0B
0C- 73 74 61 6C 20 4F 75 74-6C 65 74 10 20 20 20 20 -0C- stal Outlet -0C
0D- 45 64 6D 6F 6E 74 6F 6E-2C 20 41 42 13 20 20 20 -0D- Edmonton, AB -0D
0E- 20 43 61 6E 61 64 61 20-20 54 36 47 20 32 53 34 -0E- Canada T6G 2S4 -0E
0F- 3C 20 6F 72 20 63 6F 6E-74 61 63 74 20 22 6D 69 -0F- < or contact "mi -0F
ÍÍÍÍ00Í01Í02Í03Í04Í05Í06Í07Í08Í09Í0AÍ0BÍ0CÍ0DÍ0EÍ0 FÍÍÍÍÍÍ0123456789ABCDEFÍÍÍÍ
F1:Help F2/SF2:Jump F3:Search F4:Srch/Rep F8:Mask F9:Mode ESC:Exit
Alt keys: A:Ascii B:Base C:Config S:Shell X:Abort! T:Text U:Undo
Şekil.5.5. HexEdit programının ekran çıktısı
Ekran görüntüsünün en başında, yamalanacak dosyanın adı (burada HE.EXE) ve HexEdit’in versiyonu belirtilmektedir. Bir aşağı satırda bulunan ‘Found: 127/290’ ifadesi, daha önceki taramanın 290 bulguyla sonuçlandığı ve burada 127. bulguya atlanmış olduğunu ifade eder. Aynı satırdaki ‘Changes : 4297’ ifadesi de dosya üzerinde 4297 değişiklik yapıldığını gösterir. Burada Undo yapılarak orjinal dosyaya ulaşmak mümkündür. ‘Mask:Off’, text filtrelemesini ifade ederken , ‘Mode:C’ karakter düzenleme modunda olunduğunu göstermektedir [10].
5.2.1.3. Fonksiyon tuşları ve kısayollar
HexEdit programında kullanılan fonksiyon tuşları ve kısayollar aşağıdaki gibidir:

F1: Help
F2: İstenen byte’a atlama
Shift-F2: İstenen sektöre atlama
F3: Arama
F4: Bul ve Değiştir
F8: Text olmayan byte’ları maskele
F9: Modu belirle
Alt-A: ASCII Tablosu
Alt-B: Taban dönüşümü
Alt-C: Konfigürasyon
Alt-N: Sonraki bulgu
Alt-P: Önceki bulgu
Alt-S: DOS’a geçiş
Alt-T: Text taraması
Alt-U: Undo(geri alma)
Alt-X: Panic Abort (programdan hiç bir değişiklik kaydedilmeden hızlı çıkış)
Esc: Exit
Backspace: Kaydedilmemiş değişiklikleri geri al
5.3. Debugger (Hata ayıklayıcı)
Debugger bir hata ayıklama programı olup, kullanıcılara programların analiz edilmesinde, bazı kritik noktalarda durma noktaları (breakpoint) koyma ve programın çalışması sırasında istenen noktadaki kaydedici ve bellek durumlarının incelenmesini sağlarlar. Eğer program bir hata bulursa, bazı debugger programları kullanıcıya bu noktada hataları düzeltme ve programın çalıştırılmasına izin verirler. Bu özellik kaydedicilerin kapsamlarının incelenmesi ve değiştirilmesini sağlar. Bu işlemler debugger tarafından mikroişlemcideki komutların icrasıyla veya bir simulatör kontrolü veya bir emülatör altında icra edilmesiyle yapılır [11].
Debuggerlar geliştirilmeden önce, program kodu içinde değişkenlerin değerini araştırmak ve hata bulmak için programcıların aşağıdaki gibi kod parçaları kullanmaları gerekmiştir[12] .

/*Code*/
(...)
loop
change_a_variable;
show_value_of_variable;
end_loop
(...)
Günümüzde bir çok program ‘registration (kayıt olma)’ bug ına sahiptir. Bu bug, program çalıştırıldığında geçerli bir kod girilmesini isteyen bir ekran şeklinde belirecektir. Doğru kod girilmediğinde program çalışmayacaktır. Bu durumda, debugger’lar Code Reversing ( Kod değiştirme) işlemi için kullanılmaktadır [12].
Bir çok Reverse Engineer ( exe kodu değiştiren kişi-cracker ) tarafından tercih edilen debugger olması ve örnek program kırılımında da kullanılması sebebiyle burada Soft-ICE debugger’ından bahsedilmektedir:
5.3.1. Soft-ICE
Soft-ICE, düşük seviyeli (hardware-level) bir yazılım debug etme programıdır. Soft-ICE’ın geliştirilme sebepleri şunlardır [13]:
• Yüksek seviyeli (software-level) debugger ların gerçekleştiremediği ya da çok yavaş gerçekleştirdiği debug mekanizmalarına (düşük seviyeli breakpointler koyma, memory protection, kilitlenen programlardan çıkma vb.) 80386 sanal makine özelliği sağlar.
• Güçlü bir hata kontrolü sağamak için yeni bir debugger kullanımını öğrenmek gerekmez. Soft-ICE eski debugger larla çalışabilme imkanı verir.
• Kullanımı kolay bir ekrana sahiptir. Ekranı öncelikle diğer debugger larla beraber çalışılabilecek şekilde küçük olarak gelir. Tek başına çalıştırılmak istendiğinde ekran büyütülebilir. Her iki durumda da komutlar ekrana sığabilecek şekilde düzenlenmiştir.
5.3.1.1. Özellikleri
Soft-ICE programının sağladığı özellikler de şu şekildedir [13]:
• Hafıza okuma/yazma, port okuma/yazma, hafıza düzenlemeleri ve interruptlar esnasında gerçek zamanlı durma noktaları (breakpoint),
• Sembolik ve kaynak seviyeli debugging,
• Eski debugger larla çalışabilme özelliği,
• I/O portlarının ayarlanması, hafızada adres çakışması gibi sorunlar çıkarmadan kurulabilme imkanı,
• Kullanıcıya öğrenim kolaylığı sağlayan dinamik bir Help,
• DOS harici işletim sistemleri ve kendisini boot edebilen programlarda hata ayıklamaya izin veren soft boot (yeniden başlatma) imkanı,
• Diğer programlara ihtiyaç duymadan(stand-alone) kullanılabilme imkanı sağlar.
5.3.1.2. Kurulumu ve gerekli ayarlamaların yapılması
Soft-ICE’ın kurulumu esnasında ilk ekran ve register ekranı geçildikten sonra, debugger’ın kurulacağı dizinin belirlenmesini isteyen bir ekran gelecektir. Şekil 5.6.’da bu ekran görüntüsü görülmektedir. Burada browse düğmesi yardımıyla debugger’ın kurulması istenen dizin belirlenebilir.

Şekil 5.6. Kurulum dizininin belirlenmesi
Daha sonra ekran kullanılan ekran kartının belirlenmesi gerekecektir. Şekil 5.7.’de ekran görüntüsü görülmektedir.

Şekil 5.7. Ekran kartının belirlenmesi
Bu aşamada, kullanılan mouse’un tipi belirtilmelidir. Şekil 5.8.’de mouse tipinin belirlendiği ekran görülmektedir.

Şekil 5.8. Mouse tipinin belirlenmesi
Son olarak sistem konfigürasyonunun düzenlendiği ekran gelir. Burada ilk seçenek seçilerek kurulum işlemi tamamlanır. Şekil 5.9.’da sistem konfigürasyonunun yapıldığı ekran görüntüsü verilmiştir.
staticiation Şuanda Forumda Değil   Alıntı yaparak cevapla