Skip navigation.

GÜRBÜZ ÇAMKERTEN GENEL KÜLTÜR ANSİKLOPEDİLERİ

WEB SİTELERİ

Program nasıl kırılır



Internet'ten indirilen ya da bilgisayar dergileri tarafından verilen çoğu programın

belirli bir kullanım süresi bulunmaktadır. Bu programlar, içeriğine göre 1 hafta ila 1 ay

arasında kısıtlı kullanım süreleri olan shareware veya limited software'lerdir. Yani

paylaşım amaçlı yazılmış ve daha sonra paylaşılan süre sonunda ya belirli bir miktar ücret

ödeyip bu yazılımın satın alınmasını ya da kullanıcının bilgisayarından silinmesini talep

etmektedirler. Bunun yanında freeware denilen, shareware programlara göre daha amatör

coder'lar (yazılımcılar) tarafından hazırlanan ve kar amacı gütmeyen yazılım çeşitleri de

mevcuttur ve bu programlar için para ödenmesi gerekmemektedir. Aslında shareware

programlar için de para ödenmeyebilir ancak bu, devletler hukukları altında korunan

progamcının haklarını ve telif ücretlerini gasp ederek yani illegal yollardan mümkün

olmaktadır [1].

Program kırmak, cracker’lık, bilgisayar programlarındaki lisans haklarının aşırıya

kaçması, BSA (Business Software Alliance)’nın aşırı baskılarıyla ve Microsoft’un tekelini

daha fazla yaymasıyla ivme kazandı. Günümüzde piyasaya yeni çıkan programların birkaç

gün içerisinde kırılıp crack patch’inin internete konulduğu görülmektedir. Program

kırabilmek için programcılıktan biraz anlamak gerekir. Özellikle dongle adı verilen

donanımla korunan programlar kırılmak isteniyorsa, Assembly dilini mutlaka bilmek

gerekmektedir [2].

Programlar için çeşitli koruma tipleri mevcuttur. Örneğin, CD sürücüde CD olup

olmadığını kontrol eden koruma tipleri, password koruma tipleri ki eğer doğru password

girilmemişse ya program register olmaz ya da çalışmaz. Son olarak da süreli programlar ki,

1

özellikle dergilerin verdiği cd'lerdeki programlar bu şekildedir. Program, süresi

dolduğunda (30 gün, 90 gün) çalışmaz. En kolay kırılan programlar, Windows altında

çalışan ve register etmek istendiğinde bir pencere içerisinde hata mesajı veren

programlardır. Çoğunlukla, programı register etmek için sizden bir user name ve password

ister fakat program satın alınmamışsa, girilen bilgiler, "invalid registeration number" gibi

ya da benzer hata mesajlarıyla geri dönecektir [3].

Bir programın kırılması, o programın yazılış amacı dışında davranmasına sebep

olmak olarak yorumlanabilir. Programlar belli bir programlama dilinde yazıldıktan sonra

derleyici denilen başka programlar ile çalıştırılabilir kod haline çevrilir. Bu çalıştırılabilir

kod, CPU nun anlayacağı dilde ve işletim sisteminin özelliklerine bağlı olarak, makine

dilinde Hexedecimal (onaltılık) bir düzende bulundurulur. Makine koduna çevrilmiş

programlar, içerisinde programcının yazmış olduğu kodu içermezler. Bu durumda

programın içeriğini, derlenmiş bir koddan açık ve net bir biçimde anlamak çok zordur.

Makine dili denilen dil, aslında rakamsal bir dildir. Bu onaltılık sayı düzeninde bulunan

kodlar, ikilik sayı sistemine (binary) dönüştürülerek CPU‘ya gönderilir. 0 ve 1 ler

(bilgisayarın işleyişinde temel olan elektrik sinyali var (1) ve elektrik sinyali yok (0) ) CPU

tarafından yorumlanarak işlenir. Makine dilininin bu şekilde zor ve anlaşılmaz oluşundan

dolayı ASSEMBLY dili geliştirilmiştir. Assembly Dili, bilgisayar dilleri içerisinde en alt

düzey programlama dilidir. Assembly ile yazılan programlar CPU’ya direkt olarak hitap

eder . Fakat bu dil ile uzun programlar yazmak oldukça zordur. Bunun yerine, diğer diller

ile yazılan programlarda o programlama dilinin yetersiz kaldığı ya da yavaş kaldığı

noktalarda daha hızlı ve direkt erişim olanağına sahip bir dil olan ASSEMBLY dili ile

prosedür veya fonksiyonlar yazılabilir. Günümüzde bu, sadece bazı aygıt sürücülerini

yazarken ya da viruslerde kullanılmaktadır [4].

2

Windows için yazılan programlar da, çeşitli programlama dilleri ya da program

geliştirme araçları ile yazılarak derlenir ve çalıştırılabilir kod haline dönüştürülür. Bu

çalıştırılabilir kodun DOS programlarından en belirgin farkı, içerisinde kullandığı işletim

sisteminin özel fonksiyonlarıdır. DOS işletim sisteminin INTERRUPT denilen bazı

fonksiyonları vardır. Bu fonksiyonlar, Windows için yazılan programların içerisinde direkt

olarak yer almazlar, bunun yerine Windows işletim sisteminin hali hazırda yazılmış

fonksiyonları kullanılır [4].

Windows / System dizini altında bir çok DLL uzantılı dosya mevcuttur. Bu dosyalar,

içerisinde programların çalışırken kullandığı birçok fonksiyon ya da tanım bulundururlar.

Sözkonusu fonksiyonlar, programların kırılmasına yardımcı olacak noktalardır. Programlar

makine dilinde bulunurlar , bu kodların anlaşılabilmesi için, ASSEMBLY kodlarına

çevrilmesi gerekir. Bu iş için kullanılan programlara DISASSEMBLER denilir.

Programların ham, yani onaltılık sayı düzenindeki içeriğinin görüntülenebilmesi için de,

HEX EDITOR denilen programlar kullanılır. Bunların dışında, programların CPU daki

işlenişi sırasındaki içeriğini görüntüleyebilen ve gerçekte programlardaki hataları

ayıklamak için kullanılan DEBUGGER denilen programlar da kulanılmaktadır [4].

Bu durumda, program kırmak için gerekli olan bilgi ve dökümanlar şu şekilde

sıralanabilir:

1-ASSEMBLY dilini bilmek,

2- Windows İşletim Sistemini iyi tanımak ve fonksiyonlarını bilmek,

3-Disassembler Programı,

4-Hex Editör Programı,

3

5-Debugger Programı.

Bu tool(doküman) lardan faydalanarak, programların Serial Number (Seri Numara)

ları ya da password (şifre) leri kırılabilir; deneme sürümlerinin kısıtlanmış fonksiyonları

genişletilebilir ve Time Trial’lı (Süreli Deneme ) programların da tarih kısıtlamaları

kaldırılabilir.

Disassembler, Hex Editör ve Debugger kavramına ve bu türdeki programların

çalışmasına yabancı olanların, program kırılımına geçmeden önce 5. Bölüm'e göz atmaları

tavsiye edilir.

Assembly kodlarına uzak olanların da, program kırımına geçmeden önce EK-B'ye

bakmaları tavsiye edilir. Başlangıç için yeterli olabilecek notlar eklenmiştir.

4

1. BİR WINDOWS PROGRAMININ ŞİFRESİNİN KIRILMASI

Windows altında çalışan bir çok program, password korumalıdır. Çoğunlukla,

programı register etmek için sizden bir user name ve password ister fakat program satın

alınmamışsa ya da doğru password bilinmiyorsa, girilen bilgiler, "invalid registeration

number" gibi ya da benzer hata mesajlarıyla geri döner. Bu tür programlar, kırılımı en

kolay olan programlardır. Burada, Windows programlarının kırılımı örnek bir program

üzerinde, aşamalar halinde gösterilmiştir:

1.1. Kırılacak Program

Hedef Program : HexWorkshop

Programın Bulunabileceği Adres : www.bpsoft.com

Program ilk açıldığında ekrana, bu programın 20 gün süreli bir demo versiyon

olduğunu hatırlatan bir pencere gelecektir. Eğer bu versiyon yakın tarihte kurulmuşsa

upgrade edilmesini öneren bir başka pencere daha görülecektir. Bunun haricinde,

programın Demonstration Version diye bir menüsü olduğu görülür ve bu menüye

tıklandığında ise Serial Number soran bir pencere ile karşılaşılır. Bu durumda, burada

yapılması gereken doğru bir seri numarası ya da programa girilen seri numarasının doğru

olduğunu zannetirecek bir yöntem bulmaktır [5].

5

1.2. Kırılımı Gerçekleştirecek Program

Kırarken Kullanılan Program : Wdasm89

Wdasm89 bir disassembler’dır. Disassembler ile program kırma tekniği, hata

mesajından faydalanarak, kod içinde şifrenin bulunmasına dayanır [4].

1.3. Programın Kırılım Aşamaları

Programın kırılımı on aşamada gerçekleştirilmiştir. Bu aşamalar:

1.3.1. Programın disassemble edilmesi

Program disassemble edilerek crack işlemine başlanır. Programın disassemble işlemi

bittikten sonra ise, kullandığı Windows fonksiyonlarının incelenmesi gerekir [5].

1.3.2. Sonuca götürecek en uygun fonksiyonun bulunması

Disassembler ekranında, Functions Menüsünden, Imports‘a bakılarak sonuca

götürecek en uygun fonksiyon bulunur. HexWorkshop programının kırılımında,

User32.getwindowtexta fonksiyonundan faydalanılacaktır [5].

1.3.3. Fonksiyonun bulunduğu yerlere breakpoint konulması

Program load edilip (yüklenip) user32.GetWindowTextA fonksiyonlarının

kullanıldığı yerlere breakpoint (durak noktası) konulur [5].

1.3.4. Register menüsüne herhangi bir değer girilmesi

6

Daha sonra program çalıştırılarak Demonstration Version menüsü açılır ve buraya

Serial Number olarak herhangi bir numara girilir. Burada seri numarası olarak 99999999

girildiği varsayılacaktır [5].

1.3.5. Wdasm programına girilmesi

Seri numarası girme işlemi sonucunda REGISTER tuşuna basıldığında Wdasm

programının içine otomatik olarak girilecektir. Bu durum crack işleminde doğru yolda

olunduğunu gösterir. Daha sonra F8 tuşu ile hatalı Serial Number girildiğine dair ekran

çıkana kadar ilerlemeye devam edilir. Bu noktaya gelinceye kadar işlenen kodlar iyi takip

edilmelidir çünkü en son işlenen Dallanma Komutunun (je , Jne , Jz , jnz , Ja , Jb gibi ) yeri

oldukça önemlidir [5].

1.3.6. Hata ekranının bulunması

Hata ekranı çıktığında OK tuşuna basılarak işlem tekrarlanır ve her işlenen koşullu

dallanma komutuna bir durak noktası konulur.

:0043178B E8E8DC0100 call 0044F478 ; Seri Numarası’nın

ekrandan okunması

:00431790 8B8DFCFEFFFF mov ecx, dword ptr [ebp+FFFFFEFC]

:00431796 83C164 add ecx, 00000064

:00431799 E8F21BFDFF call 00403390

:0043179E 50 push eax

:0043179F 8D45DC lea eax, dword ptr [ebp-24]

:004317A2 50 push eax

:004317A3 E8E8B90000 call 0043D190

:004317A8 83C408 add esp, 00000008

:004317AB 680C534800 push 0048530C

:004317B0 8D45DC lea eax, dword ptr [ebp-24]

:004317B3 50 push eax

7

:004317B4 E867CE0000 call 0043E620

:004317B9 83C408 add esp, 00000008

:004317BC 85C0 test eax, eax

:004317BE 0F8414000000 je 004317D8

:004317C4 8D45DC lea eax, dword ptr [ebp-24]

:004317C7 50 push eax

:004317C8 E893970000 call 0043AF60

:004317CD 83C404 add esp, 00000004

:004317D0 8945EC mov dword ptr [ebp-14], eax

:004317D3 E907000000 jmp 004317DF

:004317DF 837DEC00 cmp dword ptr [ebp-14], 00000000

:004317E3 0F8479000000 je 00431862 ;Seri Numarası yanlış ise ?

dallanma olur

:004317E9 8B8DFCFEFFFF mov ecx, dword ptr [ebp+FFFFFEFC]

:004317EF 83C164 add ecx, 00000064

:004317F2 E8991BFDFF call 00403390

:004317F7 50 push eax

Crack işlemine tabi tutulan HexWorkshop Programında, girilen numara doğru kabul

edildikten sonra çalıştığı dizinde bir dosya oluşturulur. REG uzantılı olan bu dosya

oluşturulduğunda ya da içerisinde belli bir imza olduğunda, girilen seri numarasının doğru

olup olmadığı bir daha kontrol edilmez ve sonsuza dek Full Version olarak çalışır [5].

1.3.7. Kodun değiştirilmesi

Programın girilen herhangi bir kodu kabul etmesi için yapılması gereken işlem,

Koşullu Dallanma ( Conditional Jump) komutunun durumunu değiştirmektir. Koddan da

görüldüğü üzere, 004317E3 satırında seri numarasının 00431862’den farklı olması

durumunda hata verecektir. Ancak JE 00431862 komutu JNE 00431862 komutuna ya da

tamamı NOP komutuna çevrildiğinde, program girilecek herhangi bir kodu kabul edecektir

ve Crack işlemi tamamlanmış olacaktır [5].

8

1.3.8. Kırılacak programın exe’sinde kodun değiştirilmesi

Wdasm programından aranılan byteların 30BE3h adresinde yer aldığı

görülmektedir. HexWorkshop programının kendisini kullanarak Hworks32.exe dosyası

açılarak 30BE3h adresine gidilir ve 0F8479000000 byteları 909090909090 byteları ile

değiştirilerek başka bir isimle kaydedilir. Çünkü aynı isimle o an hafızada olan bir dosya

kayıt edilemez [5].

1.3.9. Programın son halinin kaydedilmesi

Daha sonra HexWorkshop programından çıkılarak orijinal dosyanın adı başka bir

isimle kaydedilip, kırılmış dosya orijinal adıyla kaydedilerek program hazır hale getirilir

[5].

1.3.10. Programın register edilmesi

Daha sonra yapılması gereken, programı çalıştırıp herhangi bir Seri Numarası

yazarak kayıtlı hale getirmektir.

9

2. PROGRAMLARIN DENEME SÜRÜMLERİNDEN FONKSİYON

KISITLAMASININ KALDIRILMASI

Program koruma tiplerinden bir tanesi de, programın bazı fonksiyonlarının

kısıtlanmasına dayanır. Satın alınmadığı müddetçe bu tür programların en önemli

fonksiyonları kullanılamaz. Bu tür korumaya bir örnek verilecek olursa, Acrobat Reader

programının freeware(ücretsiz) sürümleri kolaylıkla bulunmasına rağmen, programın

bünyesinde bulunan Acrobat Writer kısmına ulaşmak için programın satın alınması gerekir.

Aşağıda da bu koruma tipine örnek teşkil edecek şekilde, internetten sayfa ve site

indirilmesine yardımcı olan Teleport programındaki kısıtlamanın kaldırılması aşamalar

halinde gösterilmiştir:

2.1. Kırılacak Program

Hedef Program : Teleport Pro

Program açıldığında Serial Number(seri numarası) sormak gibi rahatsız edici

herhangi bir ekran gelmemektedir ancak bir siteyi indirirken en fazla elli dosyanın

indirilmesine izin vermektedir.

2.2. Kırılımı Gerçekleştirecek Program

10

Kırılımında Kullanılacak Araçlar : Soft-ICE

Kırılımda kullanılan Soft-ICE programı, en çok kullanılan debugger’dır.

Debugger’lar programların breakpointler (durma noktaları) ile durdurularak kodlarının

incelenmesini ve hataların düzeltilmesini sağlarlar.

2.3. Programın Kırılım Aşamaları

Programın kırılımı, sekiz aşamada gerçekleşmiştir. Bu aşamalar:

2.3.1. Programın register bilgilerinin öğrenilmesi

İlk olarak yapılacak iş, help dosyasında register kısmını okumaktır. Bu, programın

nasıl kayıtlı hale getirileceği konusunda az da olsa bir bilgi verecektir. Klasik olarak, help

kısmında about ya da register diye bir kısım olup olmadığına bakılır. Bu program itibariyle

register diye bir kısım olduğu görülür. Bu kısma tıkladığında ekrana Name, Company ve

Code dan oluşan bir pencere gelir. Makineye daha önceden kurulmuş olan Soft-ICE

Programına girilir. Program, breakpointler ile durdurulur. En fazla kullanılan breakpointler,

bpxgetwindowtexta ve bpxgetdlgitemtexta’dır. Bu fonksiyonların sonundaki a karakterleri,

32 bit programlar için kullanılacağını göstermektedir [4].

2.3.2. Register ekranında istenen bölümlere herhangi bir değer girilmesi

Register ekranında, name kısmına Hilal Akarkamçı, company kısmına Gazi

Universitesi, Serial kısmına da 7777777 diye herhangi bir serial yazılsın.

2.3.3. Soft-ICE’ta breakpoint konulması

11

Enter tuşuna basılmadan önce Ctrl+D ile Soft-ICE 'a geçip breakpoint konulmalıdır.

Soft-ICE ta iken bpx getwindowtexta yazıp entere basılır ve sonra x ile yeniden

Windows’a dönülür [4].

2.3.4. Girilen bilgilerin onaylanması

Enter'a basıldığında yeniden Soft-ICE ekranına gelindiği görülür, çünkü program

getwindowtexta ile yazılanları okumaya çalışır ve Soft-ICE da bu komutu görünce durur

[4].

2.3.5. Girilen değerlerin okutulması

Kayıt ekranında üç tane girdi olduğu için program bunları teker teker okuyacak ve

kendi gerçek seri numarası ile verilen seri numarasını karşılaştıracaktır. Bu nedenle, Soft-

ICE’ta iken x yazılıp enter’a basılacaktır. Sonra bir kez daha x yazıp entere basılacak,

böylelikle girilen isim ve şirket kısımları programa okutulmuş olur. Bundan sonra program

artık registerlar aracılığıyla bu bilgileri değişik hesaplardan geçirecek ve kodu

hesaplayarak sonradan girilen kod ile karşılaştıracaktır. Soft-ICE’ta şu şekilde bir ekran

çıkacaktır [4] :

USER32!GetWindowTextA

BFF51804 B1B2 MOV CL,B2

BFF51806 55 PUSH EBP

2.3.6. Gerçek seri numarasının bulunması

Burada iken bc 0 ile koyulan breakpoint temizlenir. Şimdi bu kod takip edilerek

gerçek serial bulunmaya çalışılır. Kodları adım adım izlemek için F10 tuşuna basılır. Alt

12

tarafta o an hangi exe veya dll’nin çalıştığı yazmaktadır. Hala Teleport Pro verilen bilgileri

okuduğundan şu noktaya gelinceye kadar F10 a basılır [4].

* Reference To: USER32.GetWindowTextA, Ord:013Fh

:0044A950 FF15C0434600 Call dword ptr [004643C0]

:0044A956 8B4D10 mov ecx, dword ptr [ebp+10]

:0044A959 6AFF push FFFFFFFF

:0044A95B E83793FFFF Call 00443C97

:0044A960 EB0B jmp 0044A96D

00444A95B deki çağrı (call) nın F8 ile içine girilebilir ancak çağrıların ardından

conditional jump yani "je" "jne" gibi kodlar yoksa bu çağrılar F10 ile izlenebilir. F10 ile

kod izlendiğinde şu noktaya gelinir [4] :

.................

0042472D C6415C01 mov [ecx+5C], 01

:00424731 E958FFFFFF jmp 0042468E

:00424736 B8981F4600 mov eax, 00461F98

:0042473B E8B0610000 call 0042A8F0

:00424740 51 push ecx

:00424741 51 push ecx

:00424742 53 push ebx

:00424743 56 push esi

:00424744 57 push edi

:00424745 8BF9 mov edi, ecx

:00424747 6A01 push 00000001

:00424749 E8F1DE0100 call 0044263F

:0042474E 33DB xor ebx, ebx

:00424750 6A0A push 0000000A

:00424752 53 push ebx

:00424753 FFB7DD000000 push dword ptr [edi+000000DD]

;Seriali edi+dd ye tek tek yaz

:00424759 E852700000 call 0042B7B0

13

:0042475E 8B0D9C1A4800 mov ecx, dword ptr [00481A9C]

:00424764 83C40C add esp, 0000000C

:00424767 8945EC mov dword ptr [ebp-14], eax

:0042476A 3899CD020000 cmp byte ptr [ecx+000002CD], bl

:00424770 0F841B020000 je 00424991

.....

Bu noktada yani xx:00424753 de iken d edi+dd yazılırsa data penceresinde EC 25

A3 00 görülür. Eğer d A325EC yazılırsa data penceresinde sonradan girilen '7777777'

şeklindeki kod görülür. Dword ptr, programın verilen Serial’ı byte byte alarak belirtilen

belleğe yerleştirmesi anlamındadır. Bu yüzden testen işlem yapılarak girilen koda ulaşıldı.

Kod izlenmeye devam edildiğinde şu noktaya gelinir [4] :

....

* Possible StringData Ref from Data Obj ->"User"

:00424778 BED0B74700 mov esi, 0047B7D0

:0042477D 0F840B010000 je 0042488E

:00424783 FFB7D5000000 push dword ptr

[edi+000000D5] ;Kullanıcı ismini belleğe yerleştir

:00424789 E894090000 call 00425122

:0042478E 3945EC cmp dword ptr [ebp-14]

; Eax ile gerçek kodu karşılaştır

:00424791 59 pop ecx

:00424792 753A jne 004247CE

;Kod doğru değil

:00424794 8D4DF0 lea ecx, dword ptr[ebp-10];Kod doğru

:00424797 E8B2EF0100 call 0044374E

14

* Possible Reference to String Resource ID=07076: "Thank you! Your copy of

Teleport Pro is now registered",

2.3.7. Programın register edilmesi

Bu noktada yapılması gereken tek işlem :0042478E yi F10 ile geçtikten sonra (yani

program o bölgeyi çalıştırdıktan sonra) ? eax yazmaktır. Bu yazıldığında 1458171568

görülür. Bu, gerçek seri numarasıdır. Soft-ICE tan çıkıldıktan sonra, Name= Hilal

Akarkamçı Company =Gazi Universitesi Serial = 1458171568 yazıp program kayıtlanır.

Bu işlemlerin gerçekleştirilmesi için Soft-ICE konusunda bilgi sahibi olmak

gerekmektedir.

2.3.8. Programın seri numarasının hesaplanışı

Programın serial’ının nasıl hesaplandığını görmek için 00424789 deki call a F8 ile

girilebilir. Hesaplama şu şekilde gerçekleşmektedir. İlk başta isim en az 5 karakter mi diye

bakılıp, daha sonra boydan 4 çıkartılır ve 4. karakterden sonraki her karakter 5DFEE4A4H

ile xor edilip toplanır. Assembly de yazılacak olursa, kod şu şekilde olur [4,5] :

mov edi, offset szName ; İsmi edi ye yolla

push edi

call lstrlen ; Listele

cmp eax, 5 ; 5 ten düşükse işlemi durdur.

jl ExitProc0

add eax, -4 ; 4 çıkart

xor ebx, ebx ; ebx i sıfırla

lea edi, szName ; İsmi al

mov esi, 5DFEE4A4H ; Numarayı esi ye yolla

Hesapla:

15

cmp ebx, eax ; Sona gelindi mi ?

jae Goster

xor esi, [edi+ebx] ; Değilse Xor la

inc ebx ; Ebx i artır

jmp Hesapla

Goster:

mov eax,esi ; Serial eax 'ta

3. TIME TRIAL’LI PROGRAMLARDAN ZAMAN KISITLAMASININ

KALDIRILMASI

Süreli programlar, program kodunda kullanım süresinin kısıtlanması sayesinde,

belirtilen süre dolduğunda (30 gün, 90 gün) çalışmayan programlardır. Özellikle dergilerin

verdiği CD'lerdeki programlar bu şekildedir. Bu tür bir korumanın konulmasındaki amaç,

ticaridir ve programın bu süre içinde tanıtılması ve satın alınmasını amaçlar. Burada,

zaman kısıtlamasının kaldırılması örnek bir program üzerinde bilinmesi gereken yöntemler

ve tüm aşamalarıyla birlikte gösterilmektedir:

3.1. Call Flow Yaklaşımı:

Herhangi bir program çalıştırıldığında, bir seri fonksiyon, prosedür ve

açıklamalardan geçer. Call Flow denilen olgu ise bir programın çalıştırılmasından sonra

16

izlediği yolun bir listesi ya da diyagramına verilen addır. Bu yol, programın çalıştırıldığı

zamandaki koşullar nedeniyle farklılıklar gösterebilir. Aşağıda verilen 6 basamak

incelenmelidir [6] :

1.) GetSystemTime. (Sistem zamanını kontrol eder).

2.) Installed. (Programın ne zaman yüklendiğini kontrol eder).

3.) Expired. (Deneme süresinin bittiğini belirten bir mesajı gösterir).

4.) DaysLeft. ("Programı denemek için % gününüz kaldı" mesajını gösterir).

5.) Halt. (Programdan çıkar).

6.) Main. (Ana program).

Bu prosedürler kullanılarak, Time Trial (zamana bağlı demo) korumalı bir programın

asm kodu aşağıdaki gibi olacaktır:

00000001 : Call GetSystemTime.

00000002 : Call Installed.

00000003 : if (GetSystemTime - Installed) eğer 30 günden

fazlaysa...

00000004 : Call Expired,

00000005 : Jmp Halt.

00000006 : 30 günden fazla değilse...

00000007 : Call DaysLeft,

00000008 : Jmp Main.

Gerçek bir kodu incelediğimizde işe şuna benzer:

Call 041829B0 (GetSystemTime)

Call 0492832C (Installed)

17

Cmp Ax,Bx (if koşulu)

JL 04927435 (ax ve bx değerlerine göre Jump ya da No Jump)

Call 04348234 (Expired=deneme süresi sona erdi)

Jmp 0432833C (Halt=programdan çık)

---JL Address---

Call 04583BC0 (Kalan gün mesajı)

Jmp 042392BC (Ana Program)

Yukarıdaki kod incelenecek olursa, programın çalışma şekli JL emrinden önceki ax

ve bx değerlerine dayanmaktadır. Buradaki problem ise büyük bir kodun disassemble

edilişinden sonra patchlemek için doğru yeri bulmanın zor olmasıdır, çünkü bu tür

kodlarda bir çok cmp / jl veya cmp / jne oluşumları bulunmaktadır [6].

3.1.1. Yama yapılacak doğru yeri bulmak:

Yukarıdaki kodu kullanarak ortaya 2 farklı program yolu çıkartılabilir. Hala 30

günlük deneme süresi içindeyken, programın takip ettiği yol şuna benzeyecektir:

GetSystemTime

Installed

Cmp ax,bx

JL (Jump)

DaysLeft

Main.

Deneme süresi sona erdiğinde ise kod şuna benzeyecektir:

GetSystemTime

Installed

Cmp ax,bx

JL ( No Jump )

18

Expired

Halt.

Bu iki listeye bakılırsa, JL komutuna kadar herşeyin aynı olduğu görülür; ama JL

de ilk liste atlamayı yaparken 2. liste bizi programın sonuna getirmektedir. JL komutu ax

ve bx değerlerine bağlı durumdadır. Zamana bağlı program kilidini kaldırmak içinse

yapılması gereken ya ax ve bx in değerlerini değiştirerek (doğru yöntem) sürekli bir

deneme süresine sahip olmak ya da JL komutunu Jmp komutu ile değiştirip programın ilk

call flow’daki gibi çalışmasını sağlamak olacaktır [6].

3.1.2. Crack işlemi için ihtiyaç duyulacak dökümanlar:

- Soft-ICE (Symbol Loader ı ile birlikte)

- Bir Hex Editörü. (örn: Ultra Edit)

- Bir Text Editörü. (örn: Notepad)

(Disassembler’a ihtiyaç duyulmamaktadır.)

3.1.3. Crack işleminin aşamaları

Önce, Soft-ICE’la birlikte install edilmiş olan symbol loader yüklenir. Bu görev

çubuğundaki klasörden açılabilir. Symbol Loader'daki file menüsüne gidip `open module`

a tıklanır. Buradan da kırılmak istenen programın ana çalıştırma dosyasına tıklanır (örn:

mirc için mirc32.exe). Bu işlem tamamlandıktan sonra `Module` menüsüne gidilerek

"Load Module" a tıklanır. Normalde bu bir hata mesajıyla gelecektir, `Yes` e tıklayıp

yüklemeye devam edilir. Şimdi Soft-ICE, Symbol Loader nedeniyle araya girecek ve

aşağıdakine benzer birçok satır görüntülenecektir.

FFFF INVALID

FFFF INVALID

19

FFFF INVALID

FFFF INVALID

FFFF INVALID

.

Bu bir hata değildir. Soft-ICE, sadece hafızadaki henüz çözemediği bir bölümü

göstermektedir. Şimdi Soft-ICE, yapılmak istenen işleme göre ayarlanmalıdır [6].

3.1.3.1. Kod penceresinin kapatılması.

Soft-ICE'ta "wc" yazılır. Bu komut kod penceresini kontrol eder. Kod penceresinin

gözükmesi istenmediğinden, bu şekilde kapatılır. Bu aynı zamanda mouse kullanılarak da

yapılabilir. Kapatılmak istenen pencerenin üst köşesine mouse ile tıklayıp sürüklenebildiği

kadar yukarıya sürüklendiğinde, bu pencere kapanacaktır [6].

3.1.3.2. GeTSystemTime için breakpoint konulması.

GetSystemTime (O anki tarih ve saati göstermek için kullanılan birçok api

komutundan birisidir.) için bir breakpoint konulmalıdır. Bu, komut penceresinde "Bpx

GetSystemTime" yazılarak sağlanır. Bu arada, GetSystemTime sadece fonksiyonun

adresini belirtir. Fonksiyonun adresi bilinse, "Bpx 004283CD" gibi bir satır da

yazılabilirdi. Bu durumda bpx komutuna bir offset de eklenebildiği görülüyor; örn: "Bpx

GetSystemTime +4" teki gibi. Bu komut, fonksiyonun başlangıcından 4 offset sonra Soft-

ICE’ın devreye gireceğini gösterir [6].

3.1.3.3. Programın yüklenmeye devam edilmesi.

Soft-ICE'ta breakpoint (BPX GetSystemTime) ayarlandığına göre programın

yüklenmesine ve çalışmasına devam etmek için izin verme zamanı geldi. Yapılması

20

gereken CTRL+D tuşlarına basmaktır. Program yüklenmeye ve çalışmaya devam ederken

'GetSystemTime' komutunu işleyecektir. Bu olduğunda, Soft-ICE belirecek ve programı

fonksiyonun başında durduracaktır. Komut penceresinde ise 'BPX due to

KERNEL32!GetSystemTime' yazısı görülecektir. Burası olayın kaydedilmeye başlanması

gereken yerdir [6].

3.1.3.4. Fonksiyondan çıkılması.

Şimdi 'GetSystemTime' fonksiyonunun başlangıcında bulunuluyor. Bu fonksiyon

atlamalıdır ki tüm fonksiyon işlendikten hemen sonra yer alan asm komutuna varılsın.

('GetSystemTime' fonksiyonu Windows System dizininde bulunan Kernel32.dll'nin bir

parçasıdır). Bu fonksiyon bilgisayarın o anki durumundan bağımsız olarak her zaman aynı

komutları işleyecektir, bu yüzden bu komutların kaydedilmesine gerek yoktur.

Fonksiyondan hemen sonraki asm komutuna atlamak için yapılması gereken "F11" tuşuna

bir kez basmak olacaktır.Bu noktadan sonra yapılacak işlemlerde dikkatli olmak

gerekmektedir[6].

3.1.3.5. Nag ekranına kadar tüm komutların kaydedilmesi.

Bu noktada yapılan herşeyin kaydedilmesi gerekmektedir. Yapılması gereken;

`Programı kullanabilmek için % gününüz kaldı` text’ini içeren Nag Ekranı çıkana kadar

F10 tuşuna basarak kodun içinde adım adım ilerlemektir. Dikkat edilirse, komut

penceresinde işlenen tüm kodun belireceği görülür. Tüm bu bilgiler Soft-ICE Buffer'ında

kaydedilmektedir [6].

3.1.3.6. Log dosyasının kaydedilmesi.

21

Nag ekranı çıktığında, ilk log dosyasını kaydetmenin zamanı gelmiştir. Yapılması

gereken hala yüklü olan Soft-ICE Symbol Loader’a giderek File menüsünden `Save Soft-

ICE history as...` e tıklamaktır. Şimdi bu dosya, asa1.txt diye kaydedilecektir. Bu dosya bir

text editörle açılacak olursa, komut penceresindeki tüm olanların kaydedilmiş oldukları

görülecektir [6].

Bu, ilk “ Call Flow ” dosyasıdır.

3.1.3.7. Tarihi ileriye alıp tüm işlemlerin tekrarlanması

Şimdi yapılması gereken 2. bir call flow logu hazırlamaktır, ancak bu sefer sistemin

tarihi ileriye alınmalıdır ki, "Deneme Süreniz Sona Erdi." mesajı görülebilsin. Bu,

programımızın 'GetSystemTime' fonksiyonundan sonra fakat Nag ekranı çıkmadan önce

farklı bir yol izlemesine neden olacaktır [6].

3.1.3.8. İki Log dosyasının karşılaştırılması.

Tüm adımlar tekrarlandıktan ve 2. log dosyası (örn:asa2.txt) kaydedildikten sonra iki

log dosyasını karşılaştırmak gerekir. Burada iyi korunulduğu söylenen bir Microsoft

programını kullanarak ortaya çıkan 2 tane örnek log dosyası üzerinde açıklama yapılacaktır

[6].

Bu iki log dosyası, Ek-A'ya konulmuştur.

3.1.3.9. İki log dosyasının farklılaştığı ilk noktanın bulunması.

Dikkat edilirse her iki log dosyası da 015F:3000ADC1 adresine kadar aynıdır. İlk

dosyada, bu adresteki komut atlama yapmıyor, fakat ikinci dosyada aynı komut atlamayı

22

yaptırıyor. Bu, o noktadaki EAX in değerinin sistem zamanına bağlı olarak aldığı

değişiklikten kaynaklanıyor. Aşağıdaki kod satırları incelenmelidir:

LEA EAX,[ESI-01] Bu komut, ESI-01’deki byte’a bakıp değeri EAX’e koyuyor.

CMP EAX,05 Bu komut, EAX’teki değerin 5’e eşit olup olmadığına bakıyor.

JA 3000AE00 Eğer değer 5'ten büyükse 300AE00 adresine atla komutu.

3.1.3.10. Dosyada değişiklikler yapılması.

JA komutunun atlama yapmaması için dosya değiştirilmelidir. Bu bir çok yolla

yapılabilir:

Basit ve ucuz olan yol; 015F:3000ADC1 adresindeki `77 3D` değerlerini `90 90`

olarak değiştirerek "JA 3000AE00" komutunu nop lamaktır (No Operation). Bu yol çoğu

zaman işe yarasa da, doğru yol 3 byte uzunluğunda olan 'LEA EAX,[ESI-01]', yine 3 byte

uzunluğunda olan 'CMP EAX,05' ve 2 byte uzunluğunda olan `JA` (3 asm kodu için

toplam 8 byte etti) komutlarını; 5 byte uzunluğundaki 'MOV EAX,00000005' ve birer byte

uzunluklarındaki 3 `NOP` komutuyla değiştirmek olacaktır. Bu, EAX kaydının herzaman

doğru değere sahip olmasını ve aynı sayıda byte'ın değiştirilmiş olmasınısağlayacaktır [6].

3.1.3.11. Programı yamalamak (Patching olayı).

Artık yapılması gereken, programı istenilen bir Hex editörüne yükleyerek log

dosyasında LEA, CMP ve JA komutları için bulunan byte gurubunu arayıp yamamak

olacaktır.

Bu örnek için;

'8D46FF83F805773D' yi 'B805000000909090' ile değiştirir.

23

B805000000 = MOV EAX,05

90 = NOP

"Call Flow Metodu" olarak anılan bu cracking yönteminin, 2 ayrı yol izlenen bir çok

olayda da kullanılabilme imkanı vardır.

Örnek :

- CRC rutinlerini kırmak için (Program modifiye edilmiş/edilmemiş) ;

- Dongle korumasının (Dongle plugged in/not plugged in) kaldırılması ;

- Üç deneme ve password soru alanının dışındasın (Sizin bir fonksiyonu sadece belli bir

sayıda kullanabilmenizi sağlayan programlar) şeklindeki kısıtlamaların kaldırılması için

kullanılır. [5,6]

24

4. CD KORUMASININ KALDIRILMASI

Programlardaki koruma tiplerinden bir tanesi de, CD sürücüde CD olup olmadığını

kontrol eden koruma tipleridir. Bu koruma, genelde oyun programlarında kullanılır.

Program bilgisayara install edilmesine(yüklemesine) rağmen, her kullanımda CD ister. Bu

tür korumaları kaldırılmasının aşamaları, örnek bir program üzerinde gösterilmektedir:

4.1. Kırılacak Program

Hedef Program: Herhangi bir oyun programı.

4.2. Kırılımı Gerçekleştirecek Program

Kırılımında Kullanılacak Araçlar: W32Dasm ve HIEW

4.3. Programın Kırılım Aşamaları

Programın kırılımı, yedi aşamada gerçekleşmiştir. Bu aşamalar:

4.3.1. Programı CD’siz çalıştırarak hata mesajının alınması

Öncelikle, kırılacak oyun programı CD takılmadan çalıştırılır. Bu durumda, oyun

çalışmayıp, ekrana hata mesajı veren bir pencere çıkacaktır. Programın kırılmasında bu

hata mesajından faydalanılacaktır, bu nedenle hatırlanması gerekmektedir [7].

4.3.2. W32Dasm programında kırılacak programın çağrılması

25

Daha sonra, W32Dasm disassembler’ı çalıştırılır. Disassembler ekranı açıldığında,

Toolbar üzerinde sol tarafta bulunan ilk küçük butona basılır ya da menülerden - Open File

to Disassemble – bölümüne gelinir. Açılan menüde kırılmak istenen exe program seçilir.

Disassemble işlemi yaklaşık 5 dakika sürecektir. Bu işlem tamamlandığında ekrana

programın assembly kodu gelecektir [7].

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

26

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

27

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 <

Komik HaberlerYERYUVARI TARİHİ BOYUNCA, CANLILAR ALEMİNDEKİ DEĞİŞİM VE DÖNÜŞÜMLER

Write a comment

You must be logged in to write a comment. If you're not a registered member, please sign up.