Adım Adım Cracking (Program Şifrelerini Kırma)

CyberLocalTake

Katılımcı Üye
7 Şub 2010
351
0
İstanbul
Cracking nedir
cracking kısa olarak program kırma da denilebilir. Program kırabilmek için
assembly dilini bilmeniz lazımdır. dongle adı verilen donanımlarla korunan programlar
için ise iyi derecede assembly dilini bilmeniz lazımdır.
Assembly nedir
Assembly bir programlama dilidir. Bu dil ilk bilgisayarcıların keşfettiği bir dildir.
İlk programcılar makine dili komutları ile programları yazmaktaydılar. Makina dili işlemciye
veri bitlerinin hexdecimal sayı sisteminde gösterilmesiyle oluşmuş bir dildir.
yani ilk programlar 0 ve 1 sayılarıyla yazılıyordu. ve bu sayılarla assembly dili geliştirildi
assembly dili ile işlemlerin ingilizce karşılıklarının kısaltmalarından oluşuyordu.
Program Nasıl Kırılır
Eğer amacınız programları ücretsiz veya sınrısız kullanmak ise bu zorlu işe
girmenize hiç gerek yok http://www.astalavista.com/ da programın crackini bulabilrisiniz.
Fakat cracker olmak istiyorsanız başlayabilirsiniz. Program kırabilmek için programcılıktan da
anlamanız gerekiyor. Programları en basitinden debug programlarıyla kırılır
bu programlarla kırmak istediğiniz programın o anda yaptığı ilşlemleri
takip edersiniz dolayısıyla şifre yanlış hatası verdiği anı takip
ettiğinizde şifre ye ulaşabilir veya şifrenin algortimasını çözebilirsiniz

Program Kırmak için gerekenler
1- Sabır
2- Assembly dilini bilmek
3- Windows u iyi derecede bilmek
3- Gerekli programlara sahip olmak

Gerekli Programlar
En önemlisi debug programı olan softice, disassembler programı Windasm, Hex editör programı Hiew (Hackers View)
bunlardan başka işinizi kolaylıştıracak ekstra programlar da var. Örneğin Visual Basic programları için
SmartCheck Delphi programları için Dede vb. Programların linklerini vermiyorum siz google de bulabilirsiniz
eğer bulamayacak kadar bilgisayarda bilgisizseniz bu iştende vazgeçmelisiniz.



SoftIce Kullanma klavuzu
alıntıdır (MEB.NET -BELİRTMEM GERKLİYDİ)


SofICE Kurulumu


SoftICE ı iyi bir şekilde kurup ayarlamazsanız gerekli verimi alamazsınız.Kurulum ekranında önemli olan 3 nokta var

Video Adapter
Mouse
Video

Ekran kartı ayarları SoftICE’ın çalışması için çok gereklidir.Bu ayarları yanlış yaparsanız SoftICE ı kullanmanız mümkün olmıyabilir.Bu ayarlara çok dikat edin.İlk olarak ekran kartnız listede varsa onu seçin.Daha sonra Test tuşu ile çalışıp çalışmadığınız kontrol edin.Eğer ekran kartınız listede yoksa yahut ilerde problem yaşarsanız ekran kartı olarak "Universal Video Driver" seçeneğini seçin.

Mouse

Mouse unuzun tipi neyse ona uygun mouseu seçin.Yanlış mouse u seçerseniz SoftICE sapıtabilir o yüzden dikkatli olun.

SoftICE’ın Ayarlanması

SofICE i iyi ayarlıyamazsanız programdan faydalanamazsınız.İlk olarak bir boot menüsü oluşturalım böylelikle windows her açıldığında bize SofICE ile açılıp açılmıycağını sorsun.Autoexec.bat ve config.sys dosyalarını aşağıdaki gibi değiştirin.

Eğer işletim sisteminiz WinME ise http://icedump.cjb.net/ adresinden wmloaderı indirin ve readme dosyası okuyun.

Autoexec.bat dosya örneği.
!!!!Sizin autoexec.bat dosyanızın sonuna bu satırları ekleyin.Eğer başa eklerseniz sorun yapar.!!!

Rem -----Buradan itibaren kopyalayın-------
goto %config%
REM Load SoftICE - SoftICE in kurulu oldugu yer onemli !!
:SICE
C:\PROGRA~1\NUMEGA\SOFTIC~1\WINICE.EXE
REM SoftICE olmadan baslangic
:NORM
Rem ----Buradan kesin------
Config.sys dosya örneği.
!!!!Sizin config.sys dosyanızın sonuna bu satırları ekleyin.Eğer başa eklerseniz sorun yapar.!!!

Rem -----Buradan itibaren kopyalayın-------
REM Menüyü olustur.
[MENU]
MENUITEM NORM,Windows 98
MENUITEM SICE,SoftICE ile Windows 98
MENUDEFAULT NORM,5
[NORM]
[SICE]
Rem ----Buradan kesin------

Benim kullandığım winice.dat dosyasını download edin ve SoftICE ın kurulu olduğu klasöre kopyalayın.Winice.dat ’a yaptığınız her değişikliğin etkili olabilmesi için yeniden windowsun başlatılması lazım.Bu yüzden programı kurduktan sonra winice.datı değiştirip öyle restart atın


SoftICE Komutları


SoftICE kurmamıza rağmen etkili bir şekilde kullanmayı öğrenmek o kadar kolay değildir.Kullana kullana sizde bir şeyler öğreneceksiniz.Fakat burada SoftICE ’ın nasıl kullanıldığına dair bir kaç örnek verelim

SoftICE a geçmek için Ctrl ve D tuşuna aynı anda basın.Bu bütün programları durduracak ve sizi SoftICE ekranına ***ürecetir.
SoftICE a geçince bir kaç pencere ve değişik bilgiler göreceksiniz.Alttaki pencere bizim komutları yazdığımız input penceresi.Bazı komutalar şöyle..
x = SoftICE dan çık.
bpx = SoftICE a belli api kodlarında dur emri
bpm = SoftICE a belli bellek bölgelerinde dur emri
bpr = Belli hafıza bölegelerinde dur emri
d = Belleği ve orada yazan değerleri göster
e = Bellekteki değerleri değiştirir
cls = Input penceresini temizle.
s 0 l ffffffff ’text’= Hafızada text yazısını arar


Örnek vermek gerekirse
bpx getdlgitemtexta SoftICE a bu api kodunu görünce dur komutunu verir
bpm 0157:0009AC2D SoftICE a o belleğe erişildiği zaman dur komutunu verir.
bpr 0157:00643345 0157:00643345 iki yer arasında bir yere erişildiği zaman dur komutunu verir
d 00456787 o bölgedeki bellekteki değerleri gösterir.
d eax eax registerinin belirttiği yerdeki belleği gösterir.



Birde input penceresinde kullandığımız komutalardan da bahsedelim.
bl = O andaki breakpointleri gösterir((00) BPX #0028:09876543 C=01 gibi)
bc = O anda konulmuş break pointleri temizler (bc 1 bir nolu breakpointi siler.)
bd = Break pointi kapatir(bd 0 0 nolu breakpointi kapatır)
be = Break pointi açar (be 0, kapatılan 0 nolu breakpointi açar)
? = Belli bir register veya sayının değerini gösterir.( ? 23 # gibi)




SoftICE Problemleri

Bu problemlerin %90 ı winice.dat dosyasını düzenlemediğiniz için olmaktadır.

Uyarı: Problemlerinize geçmeden önce lütfen winice.dat dosyasını download edip SoftICE ı kurduğunuz klasöre kopyalayın.

1. SoftICE a geçiyorum breakpoint koyunca symbol not defined diyor.
- Breakpoint koyduğunuz dll winice.dat dosyasında bulunmuyor demektir.Kernel32.dll user32.dll vs yi winice.dat dosyasında bulun ve o satırın en başındaki ; i kaldırın.

2. Bazen SoftICE a kendiliğinden geçiyor ve bir daha geriye dönemiyorum.
- R tuşuna basın ve daha sonra faults off yazın.


3. Ctrl+D kombinasyonunu Alt+Z şeklinde nasıl değiştirebilirim;
- winice.dat dosyasının INIT kısmını şu şekilde değiştirin

INIT="code on; altscr off; lines 60; wc 32; wd 8; faults off;ALTKEY ALT Z;X;"

4. Ekran boyutunu nasıl değiştirebilirim.
- wc,wd lines değerlerini değiştirerek bunu yapabilirsiniz.

5. SoftICE bir sürü loading unloading vs mesajları gösteriyor bunu nasıl kapatabilirim
- winice.dat ı açın ve VERBOSE=OFF satırını ekleyin.Yahut loader32.exe yi açın.Edit/SoftICE initializing settings den "Disable diagnostic messages" ı seçin.

6. Init kısmına eklediğim komutlar çalışmıyor.
- Init kısmına eklenen komutlar ; ile birbirinden ayrılmalı ve en sonunda X; olmalıdır.X komutu SoftICE dan çık demek oldupundan eğer X; den sonra komut eklerseniz bunlar çalışmıycaktır.Kısacası init kısmı şöyle olmalıdır. INIT="command1;command2;...;commandn;X;"

7. Bazen SoftICE girdiğim zaman mouse deli gibi oynamaya başlıyor.Hiç bir şey yapamıyorum.Bu olay bazen SoftICE dan çıktığım zamanda oluyor.
- Bu olay mouse işlem yaparken SoftICE a geçildiği zaman oluyor.Bu yüzden mouse un senkronizasyonu bozuluyor.Bunu düzeltemek için bir kaç kez Ctrl+M tuşuna basın.Bir kaç kez bastıktan sonra mouse eski haline dönecektir. Eğer bu olay windows ort***** geçtiğinizde olursa Ctrl+Alt+Del tuşlarına bir kez tıklayın Task Manager geldiğinde hemen Esc ile çıkın.Buda mouse u eski haline getirecektir.

8. Bir program HKLM\Software\DandikSoft\Serial diye bir keyi okuyor.Ben bpx regqueryvalueexa şeklinde breakpoint koyuyorum ama SoftICE yüzlerce kez duruyor.Sadece belli keye ulaşıldığı zaman nasıl durdurabilirim.
- Bu soruyu biraz açıklı***** cevap vermek istiyorum bunu iyi anlarsanız çok işinize yarar.Şimdi ilk olarak RegqueryValueexa fonkisyonu ne işe yarar ve hangi parametreler yollanır ona bir bakalım.win32.hlp dosyasını açıyoruz ve şunu görüyoruz

LONG RegQueryValueEx(

HKEY hKey, // çağrılacak keyin handle ı
LPTSTR lpszValueName, // alınıcak değerinin isminin olduğu adres
LPDWORD lpdwReserved, // saklı
LPDWORD lpdwType, // değer tipinin adresi
LPBYTE lpbData, // fonksiyon sonucunun adresi
LPDWORD lpcbData // fonksiyon sonuc adresinin büyüklüğü
);

Bu fonksiyon stdcall şeklinde bir fonksiyon yani parametreler en sondan başla***** push ediliyor.Siz bu breakpointi koyup SoftICE geçtiğiniz zaman ESP şu şekilde olacaktır

...
[ESP+18h] - lpcbData
[ESP+14h] - lpData << Buraya fonksiyonun sonucu geliyor.
[ESP+10h] - lpType
[ESP+0Ch] - lpReserved
[ESP+08h] - lpValueName << Alınıcak olan değerin ismi.
[ESP+04h] - hKey
[ESP+00h] - return EIP << Call’ın yapıldığı adres.




Yani SoftICE durduğu zaman biz dd esp+14 yazarsak fonksiyonun sonucunun nereye yazıldığını görürüz.Yahut dd esp+8 yazarsak hangi anahtarın çağrıldığını bulabiliriz.Şimdi bizim istediğimiz sadece bir keyden okunduğu zaman durdurmak.Aşağıdaki breakpoint işimiz görecektir.

BPX RegQueryValueExA IF *(ESP-> == ’Seri’ DO "D ESP->14;"

Eğer program Seri ile başlayan bir keyden bir şey okursa dur.İsterseniz bu nasıl oluyor bir bakalım

*(ESP-> demek esp+8 in gösterdiği yerdeki içerik demek.Bildiğiniz üzere push edilenler dword olduğu için yani 4 byte biz sadece 4 haneyi okuyabiliyoruz.Eğer esp+8 in gösterdiği yerde Seri yazıyorsa,

Do d esp->14 de esp+14 bölgesi yani sonucun alındığı bölgeyi göster demek.Bu şekilde yazmak uzun olabilir o yüzden macro ile bu işi halletmek en güzeli.Bu makroyu winice.dat dosyasına ekliyebilirsiniz eğer ekli değilse

MACRO bpreg="bpx regqueryvalueexa if*(esp->==’%1’ do \"d esp->14\""

%1 demek macroya gönderilen parametre demek \ işaretlerini eklememizin sebebi SoftICE, " işaretlerini macro bitişi kabul ettiği için biz \ işareti ile " ları yok saydırıyoruz.

eğer Serial keyine ulaşıldığında durmasını istiyorsanız SoftICE da iken artık sadece şunu yazmanız yeterli olucak

bpreg Seri

Dikkat edin sadece ve sadece ilk dört karakteri giriyorsunuz.

Bu şekilde macroları geliştirebilirsiniz.Mesela bunu getwindowtexta veya getdlgıtemtexta ya uygulayıp sadece sizin isminiz istendiğinde SoftICE a geçmek vs .Unutmamanız gerek fonksiyona gönderilen parametreler ve bunları ESP de göründüğü durum.Her bir parametre bir dword da oluyor.Yani sadece ilk dworda erişme şansımız var.

Umarım bu ipuçları size faydalı olur.
Winice.dat dosyasını adidascrack.sitemynet.com/winice.zip burdan indirebilirsiniz (eğer indirmede sorun yaşarsanız http://www.mynet.com/ a
girip adres satırını adidascrack.sitemynet.com/winice.zip yazın.



Hiew Kullanmak Klavuzu



F1 Dosya hakkında bilgiler verir
F2 Marj ayarlaması yapar/ayarı kaldırır
F3 Dosyayı A/H/T moduna dönüştürür
F4 Modu belirler
F5 Verilen adrese gider (A/H modu için)
F6 Linefeed, satır ayarlaması yapar.
F7 A/H/T modunda arama yapar, E modunda crypt eder.
F8 A/H modunda header, T modunda XLAT, E modunda XOR
F9 A/H/T modda dosya açar, E modda dosyayı günceller
F10 A/H/T modunda programdan çıkar
Alt-P Ekranı bir dosya olarak saklar.
Alt-R Dosyayı yeniden yükler.
Ctrl-F3 Bul/değiştir
Ctrl-F7 Aynı kritere göre sonrakini ara
Ctrl-F8 Önceki dosyaya geçer
Ctrl-F9 Sonraki dosyaya geçer
+ Satır işaretler (Bookmark)
Alt-(1.. İşaretlenen satıra gider
Alt-- Geçerli bookmarkı siler



Assembly Dili Hakkında Bilgi
Korumalı Mesaj:

Assembly Dili Hakkında Biraz Bilgi

Kullanılan belli başlı assembly komutlarını basitçe açıklamaya çalıştım, bunları bilmeden hareket edemeyiz.


mov komutu;

Bu komut registerlere değer atamak için kullanılır.

mov eax, 8 ,bu komuttan sonra eax=8 olacaktır.

mov eax, ebx ,ebx eax’e kopyalanır.


cmp komutu;

Karşılaştırma komutudur. Arkasından da sonuca göre ya devam edilir, yada başka bir kısma atlanır. Burayı atlamak için ise je, jz komutları kullanılmaktadır.

cmp eax, ecx ,burada sadece eax, ecx ile karşılaştırılmaktadır. Herhangi bir dallanma yok.


jmp komutu;

Şartsız dallanma komutudur. Program başka bir satıra yönlendirilir.

jmp 00415265 ,ile program bu 415265 adresine yönlendirilir.


je komutu;

Karşılaştırma sonucu eşit ise belirtilen adrese zıplanır. Öncesinde ise genelde yukarıda gösterilen cmp ile iki değer karşılaştırılmıştır.

cmp eax, ecx

je 00415265 ,eax değeri ile ecx değeri birbirine eşit ise 415265 adresine zıplanır, değilse program olduğu yerden devam edecektir.


jne komutu;

Karşılatırma sonucu eşit değil ise belirtilen adrese zıplanır.

cmp eax, ecx
jne 00415265 ,eax değeri ecx değerine eşit değil ise 415265 adresine zıplanır.


call- ret komutları;

call komutunun kullanıldığı yerde program belirtilen adrese gider ve burası procedur diye adlandırılır.Buradaki komut dizisi işlenir ve ret komutunun kullanıldığı yerde program tekrar döner, call komut satırının altındaki adresten devam eder.

call 00415265 , program 00415265 adresine gider, bu procedur işlenir ve tekrar döner.


add komutu;

Toplama komutudur.

add eax, 5 ,eax değeri eax+5 olacaktır.

add eax, ebx ,eax yerine ebx değeride eklenerek eax’e yazılır.


inc komutu;

Devamındaki registerin değerini 1 arttırır.

inc eax ,eax değeri bu komut sonrası eax+1 olacaktır.


dec komutu;

Devamındaki registerin değerini 1 azaltır.

dec eax ,eax değeri bu komut sonrası eax-1 olacaktır.


push-pop komutları;

Bazı değerler tekrar lazım olacaklar ise bunları stack’ a atabiliriz, yani bir süre saklayabiliriz. Bunun için push komutunu kullanırız, tekrar çağırmak için ise pop komutunu kullanırız.

push eax ,eax yığına atılır,

pop eax , eax tekrar çağırılır.


Breakpointler

bpx getdlgitemtexta : Sizin girdiğiniz değerler kontrol edilecekse kullanılabilir,

bpx getwindowtexta : Yukarıdaki breakpointin alternatifi,

bpx hmemcpy : Visual basic ile yazılmış programlarda yukarıdakiler işe yaramaz, böyle zamanlarda kullanılır,

bpx messageboxa : Programların verdiği bazı hata mesajlarını yada nag ekranlarını bununla yakalayabiliriz,

bpx getsystemtime : Zaman kontrolü yapıldığı durumlarda kullanılır,

bpx getlocaltime : Zaman kontrolü için diğer alternatif,

bpx createfilea : Dosya kontrolü yapıldığında crc sınamalarında kullanılabilir, Softice kontrolu içinde kullanılmaktadır.

bpx readfilea : Dosya kontrolü için diğer alternatif.

bpx regqueryvalueexa : Register kontrolü için kullanılmaktadır.



İlk Programın kırılması


İlk Program Kırma

Şimdi Yeni Başlayanlar için basit bir crack ı anlatalım.

programı adidascrack.sitemynet.com/1.zip den indirin


Artık crackme’yi kırmaya başlayabiliriz. Programı açtık, sallama seriali girdik,
Ctrl-D yaptık ve SoftIce açıldı. Şimidi breakpoint koyalım (GetDlgItemTextA) ve softice’dan
çıkalım(X yazıp enterlayabilirsiniz.).Ve PassMe’de Chack diyelim. Hooop SoftIce geldi.

winice.dat dosyasını softice yi kurduğunuz klasöre kopyalamazsanız softice
brakpointeri koyarken hata alırsınız.

Bir kere F11’e basın ve calldan çıkıp aşağıya gelin:

017F:00401056 FF15701D4000 CALL [USER32!GetDlgItemTextA]
017F:0040105C 3C08 CMP AL,08 <------- 8 karakterlik bir serial girip girmediğinizi kontrol eder.
017F:0040105E 7590 JNZ 00400FF0
017F:00401060 BFC2114000 MOV EDI,004011C2 <-- yazıyı EDI’ye taşır
017F:00401065 33C9 XOR ECX,ECX
017F:00401067 33D2 XOR EDX,EDX
017F:00401069 33F6 XOR ESI,ESI
017F:0040106B 8A0F MOV CL,[EDI] <------ ilk karakteri CL’nin içine taşır
017F:0040106D 8A5701 MOV DL,[EDI+01] <--- ikinci karakteri ’nin içine taşırn DL
017F:00401070 80FA00 CMP DL,00 <--------- yazının ulaşıp ulaşmadığını kontrol eder
017F:00401073 7409 JZ 0040107E <------ evetse, jump(atla)
017F:00401075 01D1 ADD ECX,EDX
017F:00401077 01CE ADD ESI,ECX
017F:00401079 83C702 ADD EDI,02
017F:0040107C EBED JMP 0040106B
017F:0040107E 01CE ADD ESI,ECX


Şimdi 00401056 daki olayı anlamış olmanız lazım. Çünkü burada yazdığımız serialin 8 karakter
olup olmadığını kontro edecek. Program ilk 4haneyi son 4 haneye ekliyor.
Tabiki bu HEX’de oluyor. Hex’de 1 = 31, 2 = 32, 3=33 gibi. Şimdi kodları F10 ile
trace edip şağıya gelince daha iyi anlayacaksınız.

EAX=34333231 EBX=0063FC34 ECX=38373635 EDX=00000000 ESI=455B455B
EDI=00401300 EBP=0063FBE0 ESP=0063FBE0 EIP=0040109E o d I s Z a P c
CS=0167 DS=016F SS=016F ES=016F FS=12E7 GS=0000
ÄÄÄÄÄPASSME!+12F4ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ byteÄÄÄÄÄÄÄÄÄÄÄÄÄÄPROTÄÄÄ(0)ÄÄ
016F:004012F4 00 00 00 00 00 00 00 00-00 00 00 00 31 32 33 34 ............1234
016F:00401304 35 36 37 38 00 00 00 00-00 00 00 00 00 00 00 00 5678............
016F:00401314 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
016F:00401324 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄPROT32Ä
0167:00401092 BF00134000 MOV EDI,00401300
0167:00401097 33C0 XOR EAX,EAX
0167:00401099 8B07 MOV EAX,[EDI]
0167:0040109B 8B4F04 MOV ECX,[EDI+04]
0167:0040109B 8B4F04 MOV ECX,[EDI+04]
0167:0040109E 01C8 ADD EAX,ECX -->EAX ECX’e Eklenmiş
0167:004010A0 3BC6 CMP EAX,ESI
0167:004010A2 7402 JZ 004010A6 ;Good cracker
0167:004010A4 EB2E JMP 004010D4 ;Bad cracker


ECX registeri "5678" (35363738) değerini tutuyor. Satır 0167:0040109E ’da EAX ECX ’e
eklenmiş. Ve sonra ESI (455B455B) değerinde bunlar karşılaştırılır.
Eğer eşitseler: satır 004010A6 ’a atlar Bu iyi birşey çünkü Crackme’yi kırdın.
Ama eğer eşit değilse yeniden dene..
Yazar bu programında değişik bir algoritma kullanmış ve ilk dört karakter ile
son dört karakteri yer değiştirmiş, bu nedenle bie den fazla serialimiz oluyor.
Şunları deneyin:
pass1:-!-!.$.$
pass2:-$-$.!.!
pass3:-$-!.!.$
pass4:-#-#."."
pass5:."."-#-#
pass6:-#."."-#
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.