Program Cracklemek
Not:Bu döküman yeni başlayanlar için hazırlanmıştır...
Program Crackleme
Asembler denilen dil aslinda rakamsal bir dildir .Bu onaltilik sayi düzeninde bulunan kodlar ikilik sayi sistemine (binary) dönüstürülerek CPU ‘ya gider 0 ve 1 ler bilgisayarin isleyisindeki temel olan elektrik sinyali var (1) elektrik sinyali yok (0) olarak CPU tarafindan yorumlanarak programlar isler.
Makine dilininin bu zor ve anlasilmaz olusundan dolayi ASSEMBLY dili gelistirilmistir. Bu dil bilgisayar dilleri içerisinde en alt düzey programlama dilidir. Bu dil ile yazilan programlar CPU ya direkt olarak hitap eder . Fakat bu dil ile uzun programlar yazmak ta oldukça zor ve gereksizdir. Bunun yerine diger diller ile yazilan programlarda o programlama dilinin yetersiz kaldigi ya da yavas kaldigi noktalarda daha hizli ve direkt erisim olanagina sahip bir dil olan ASSEMBLY ile prosedür veya fonksiyonlar yazilir. Günümüzde bu sadece bazi aygit sürücülerini yazarken yada virus lerde kullanilmaktadir.
Gelelim Windows programlarina ; Windows için yazilan programlar da çesitli programlama dilleri yada program gelistirme araçlari ile yazilarak derlenir ve çalistirilabilir kod haline dönüstürülür. Bu çalistirilabilir kodun DOS programlarinda en belirgin farki içerisinde kullandigi isletim sistemini özel fonksiyonlaridir. DOS isletim sisteminin INTERRUPT denilen bazi fonksiyonlari vardir. Bu fonksiyonlar windows için yazdiginiz programlarin içerisinde direkt olarak yer almazlar bunun yerine Windows isletim sisteminin hali hazirda yazilmis fonksiyonlari kullanilir.(Bu konu üzerinde istenirse daha ileriki yazilarimda durabilirim , ama simdilik bu kadar yeterli diyorum)
Hepimizin mutlaka dikkatini çekmistir Windows / System dizini altinda bir çok DLL uzantili dosya mevcuttur. Iste bu dosyalar içerisinde programlarin çalisirken kullandigi birçok fonksiyon yada tanim bulundururlar. Iste bu fonksiyonlar programlari kirmamiza yardimci olacak noktalardir. Daha önce de belirttigim gibi programlar makine dilinde bulunuyordu dosyalarda , öyleyse bunlari anlayabilecegimiz bir sekile sokmak için bu programlari ASSEMBLY diline çevirmemiz gerekecek. Bu is için kullanacagimiz programlara Disassembler denilir . Programlarin ham içerigini yani onaltilik sayi düzenindeki içerigini görüntüleyebilmek içinse HEX editör denilen programlara ihtiyacimiz olacak . Bunun haricinde ise bazen programlarin CPU daki isenis sirasindaki içerigini görüntüleyebilen ve aslinda programlardaki hatalari ayiklamak için kullanilan Debugger denilen programlar ise ileride çok isimize yarayacak.
Öyle ise program kirmak için gerekli olan seyleri söyle siralayabiliriz. 1-ASSEMBLY dilini bilmek 2- Windows isletim sistemini iyi tanimak ve fonksiyonlarini bilme (C++ kullananlar bu konuda pek zorluk çekmiyecektir ) 3-Iyi bir Disassembler programi 4-Hexeditör programi 5-Debugger programi 6- Sabir (en gerekli sey) . Bu saydiklarimin hepsine sahip oldugunuzda program kirmak için herseyiniz vardir anlamina geliyor.
Isterseniz küçük bir örnek ile baslayabiliriz. Bu is için oldukça kolay bir korumasi olan ve bizimde kullanacagimiz bir program olan HEXWORKSHOP ile ise baslayabiliriz. Bu program daha önce birçok kisi tarafindan ve farkli yöntemler izlenerek kirilmistir . Benim izleyecegim yötem ise bazilariniza saçma gelebilir ama unutmayiki buradaki amacim kendimi ispat etmek degil sadece ögretmektir.
Hedef Program :HexWorkshop 2.52
Nereden Bulurum :
http://www.bpsoft.com/ Kirarken Kullanilan Programlar :Wdasm89 & HexWorkshop 2.52
Öncelikle programin Demo yada deneme sürümü olmasinin bize sagladigi dezavantajlari inceliyoruz. Programi ilk açtigimizda karsimiza bu programin 20 gün süreli bir demo versiyon oldugunu hatirlatan bir pencere ile karsilasiyoruz.Eger Bu versiyonu bu yakin tarihte kurduysaniz ayrica size upgrade etmenizi öneren bir baska pencere daha çikiyor karsimiza . Bunun haricinde programin Demonstration Version diye bir menüsü oldugunu görüyoruz , buraya tikladigimizda ise bir Serial Number soran pencere ile karsilasiyoruz. Öyleyse bize burada bir dogru serial numara yada programa dogru oldugunu zannetirecek bir yöntem gerekli. Programi disassemble ederek ise basliyabiliriz. Programin disassemble islemi bittikten sonra kullandigi windows fonksiyonlarini inceleyelim functions menusunden imports ‘a baktigimizda user32.getwindowtexta fonksiyonu ise yarayabilir diyoruz ve ilk denememizi bu fonksiyon ile yapiyoruz . Programi load edip user32.GetWindowTextA fonksiyonlarinin kullanildigi yerlere durak noktasi koyuyoruz. Assagi yukari 7- 8 arasi durak noktasi koyduktan sonra programi çalsitirip Demonstration Version menüsünü tiklayip Serial Number olarak herhangi bir no giriyoruz.Ben 99999999 girdim ve register tusuna bastiginizda HOP Wdasm içinde buluyoruz kendimizi yani ise yaradi !! . Daha sonra F8 tusu ile hatali Serial Number girdigimize dair ekran çikana kadar devam ediyoruz ilerlemeye. Bu noktaya gelene kadar islenen kodlari iyi takip edin çünkü en son islenen Dallanma komutunun yeri çok önemli yani (je , Jne , Jz , jnz , Ja , Jb gibi ) . En nihayetinde hata ekrani çiktiginda OK ye basip islemi tekrar yapalim ve her islenen kosullu dallanma komutuna bir durak noktasi daha koyalim.
:0043178B E8E8DC0100 call 0044F478 à Serial Number in ekrandan okunmasi
: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
: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 à Girilen Serial Nuber Yanlis ise dallanma olur
:004317E9 8B8DFCFEFFFF mov ecx, dword ptr [ebp+FFFFFEFC]
:004317EF 83C164 add ecx, 00000064
:004317F2 E8991BFDFF call 00403390
:004317F7 50 push eax
Yukarida görülen kod üzerinde daha fazla da çalisabilirir ama ben buna su an gerek duymuyorum ,çünkü bu program girilen numarayi dogru kabul ettikten sonra çalistigi dizinde bir dosya olusturuyor. REG uzantisi olan bu dosya var olunca yada içerisinde belli bir imza olunca girilen serial numaranin dogru olup olmadigini bir daha hiç kontrol etmiyor ve böylece sonsuza dek Full version olarrak çalisiyor .Anlasildigi gibi bu JE 00431862 komutunu JNE 00431862 yada tamamini NOP komutuna çevirirsek bu program girecegimiz herhangi bir kodu kabul edicek ve Crackimiz tamamlanmis olucaktir.Wdasm programindan aradigimiz byte larin 30BE3h adresinde yer aldigini görüyoruz . Hexworkshop programinin kendisini kullanip Hworks32.exe dosyasini açip 30BE3h adrsine gidiyoruz 0F8479000000 byte larini 909090909090 byte lari ile degistirip baska bir isimle kaydediyoruz. Çünkü ayni isimle o an hafiza da olan bir dosyayi kayit edemeyiz . Daha sonra HexWorkshop programindan çikip orijinal dosyanin adini baska bir isimle kaydedip kirilmis dosyayi orijinal adiyla kaydedersek program hazir olur. Geriye çalistirip herhangi bir Serial Number kodu yazip Register etmek kaliyor.
ASSEMBER HAKKINDA BİLGİ
Assembler programlama dili, çoğu zaman özel alanlarda geliştirilen programlarda kullanılan alt düzel bir Programlama dili olarak tanımlanır. Bu dilin komutları, bilgisayarın doğrudan işlettiği makine dili komutlarının birebir karşı lığıdır. Bu nedenle bu dil için makine dili de denilebilir.
Her ne kadar uzman programcıların özel alanlarda kullandığı bir dil olarak tanımlansa da, programcılar istedikleri takdirde her türlü uygulamayı bu dil ile geliştirebilirler yada kullandıkları üst düzey dil altından çağırabilecekler i procedurler yazabilirler. Çünkü hemen hemen her dilde assembler için destek bulunmaktadır.
Dilin en büyük avantajı CPU çevrebirimlerinin ve ana belleğin çok iyi bir şekilde kontrolünü sağlamasıdır. Ayrıca işletim sistem fonksiyonlarını da çok kolaylıkla kullanmak mümkündür. Assembler program dili derleyicisi kullanılan ko mutların birebir makine dili karşılıklarını üretir. Bu nedenle bu dil ile oluşturulan programlar olabilecek en kısa programlar olurlar.
Bir assembler programı çalışabilir bir programın tüm kesimlerinin tam olarak tanıtılması ile oluşturulabilir. Bu nedenle bir assembler programda minimum üç ana kesim bulunmalıdır.
1 - STACK Segment
2 - DATA Segment
3 - CODE Segment
Basit bir assembler programı;
STACK SEGMENT PARA ‘STACK’
DB 64 DUP (‘STACK’)
STACK ENDS
DATA SEGMENT PARA ‘DATA’
MESAJ DB ‘BU BİR ASSEMBLER PROGRAMIDIR $’
DATA ENDS
CODE SEGMENT PARA ‘CODE’
ANA PROC FAR
ASSUME CS;CODE, DS;DATA, ES;DATA, SS;STACK
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA DX,MESAJ
MOV AH,09
INT 21H
RET
ANA ENDP
CODE ENDS
END
1. BİLGİNİN TEMSİLİ
Elektronik bilgi işlem makinalarında bilgiler elektriksel uyarımlarla temsil edilirler. Bu uyarımların ifadesi 1 ve 0’lardan oluşan rakamlarla temsil edilirler. Bu uyarımları BIT adı verilir. Açıktır ki bir BIT ile 0 ve 1 gibi iki b ilginin temsili sözkonusudur. Ancak günlük hayatta kullandığımız bilgiler 2 adet değildir. Bu nedenle BIT’ler guruplanarak kullanılırlar. En küçük BIT gurubu 8 bitten oluşan guruptur ki bu guruba BYTE adı verilir. Bir byte ile +127 ile -127 arasındaki rak amlar ile harflerin temsili mümkün olur. Bir byte ile temsil edilen harfler için kullanılan en yaygın stantdart ASCII(American Standard Code for Infırmation Interchange) standartdır.