Şimdi Ara

Windows'ta Program Kırma-açıklama

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
18
Cevap
1
Favori
6.408
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Windows'ta Program Kırma

    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 içerisinde CPU nun anlayacağı dilde ve işletim sisteminin özelliklerine bağlı olarak makine dili olarak Hexedecimal (onaltılık) bir düzende bulunur.Makine koduna çevrilmiş programlar içerisinde programcının yazmış olduğu kodu barındırmazlar. Öyle ise 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 gider 0 ve 1 ler bilgisayarın işleyişindeki temel olan elektrik sinyalı var (1) elektrik sinyali yok (0) olarak CPU tarafından yorumlanarak programlar işler. Makine dilininin bu zor ve anlaşılmaz oluşundan dolayı ASSEMBLY dili geliştirilmiştir. Bu dil bilgisayar dilleri içerisinde en alt düzey programlama dilidir. Bu dil ile yazılan programlar CPU ya direkt olarak hitap eder . Fakat bu dil ile uzun programlar yazmak ta oldukça zor ve gereksizdir. 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 ile prosedür veya fonksiyonlar yazılır. Günümüzde bu sadece bazı aygıt sürücülerini yazarken yada virus lerde kullanılmaktadır.

    Gelelim Windows programlarına ; Windows için yazılan programlar da çeşitli programlama dilleri yada 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ında en belirgin farkı içerisinde kullandığı işletim sistemini özel fonksiyonlarıdır. DOS işletim sisteminin INTERRUPT denilen bazı fonksiyonları vardır. Bu fonksiyonlar windows için yazdıgınız programların içerisinde direkt olarak yer almazlar bunun yerine Windows işletim sisteminin hali hazırda yazılmış fonksiyonları kullanılır.(Bu konu üzerinde istenirse daha ileriki yazılarımda durabilirim , ama şimdilik bu kadar yeterli diyorum)

    Hepimizin mutlaka dikkatini çekmiştir Windows / System dizini altında bir çok DLL uzantılı dosya mevcuttur. İşte bu dosyalar içerisinde programların çalışırken kullandığı birçok fonksiyon yada tanım bulundururlar. İşte bu fonksiyonlar programları kırmamıza yardımcı olacak noktalardır. Daha önce de belirttiğim gibi programlar makine dilinde bulunuyordu dosyalarda , öyleyse bunları anlayabileceğimiz bir şekile sokmak için bu programları ASSEMBLY diline çevirmemiz gerekecek. Bu iş için kullanacağımız programlara Disassembler denilir . Programların ham içeriğini yani onaltılık sayı düzenindeki içeriğini görüntüleyebilmek içinse HEX editör denilen programlara ihtiyacımız olacak . Bunun haricinde ise bazen programların CPU daki işeniş sırasındaki içeriğini görüntüleyebilen ve aslında programlardaki hataları ayıklamak için kullanılan Debugger denilen programlar ise ileride çok işimize yarayacak.

    Öyle ise program kırmak için gerekli olan şeyleri şöyle sıralayabiliriz. 1-ASSEMBLY dilini bilmek 2- Windows işletim sistemini iyi tanımak ve fonksiyonlarını bilme (C++ kullananlar bu konuda pek zorluk çekmiyecektir ) 3-İyi bir Disassembler programı 4-Hexeditör programı 5-Debugger programı 6- Sabır (en gerekli şey) . Bu saydıklarımın hepsine sahip olduğunuzda program kırmak için herşeyiniz vardır anlamına geliyor.

    İsterseniz küçük bir örnek ile başlayabiliriz. Bu iş için oldukça kolay bir koruması olan ve bizimde kullanacağımız bir program olan HEXWORKSHOP ile işe başlayabiliriz. Bu program daha önce birçok kişi tarafından ve farklı yöntemler izlenerek kırılmıştır . Benim izleyeceğim yötem ise bazılarınıza saçma gelebilir ama unutmayıki buradaki amacım kendimi ispat etmek değil sadece öğretmektir.

    Hedef Program :HexWorkshop 2.52

    Nereden Bulurum :www.bpsoft.com

    Kırarken Kullanılan Programlar :Wdasm89 & HexWorkshop 2.52

    Öncelikle programın Demo yada deneme sürümü olmasının bize sağladığı dezavantajları inceliyoruz. Programı ilk açtığımızda karşımıza bu programın 20 gün süreli bir demo versiyon olduğunu hatırlatan bir pencere ile karşılaşıyoruz.Eğer Bu versiyonu bu yakın tarihte kurduysanız ayrıca size upgrade etmenizi öneren bir başka pencere daha çıkıyor karşımıza . Bunun haricinde programın Demonstration Version diye bir menüsü olduğunu görüyoruz , buraya tıkladığımızda ise bir Serial Number soran pencere ile karşılaşıyoruz. Öyleyse bize burada bir doğru serial numara yada programa doğru olduğunu zannetirecek bir yöntem gerekli. Programı disassemble ederek işe başlıyabiliriz. Programın disassemble işlemi bittikten sonra kullandığı windows fonksiyonlarını inceleyelim functions menusunden imports ‘a baktığımızda user32.getwindowtexta fonksiyonu işe yarayabilir diyoruz ve ilk denememizi bu fonksiyon ile yapıyoruz . Programı load edip user32.GetWindowTextA fonksiyonlarının kullanıldığı yerlere durak noktası koyuyoruz. Aşşağı yukarı 7- 8 arası durak noktası koyduktan sonra programı çalşıtırıp Demonstration Version menüsünü tıklayıp Serial Number olarak herhangi bir no giriyoruz.Ben 99999999 girdim ve register tuşuna bastığınızda HOP Wdasm içinde buluyoruz kendimizi yani işe yaradı !! . Daha sonra F8 tuşu ile hatalı Serial Number girdiğimize dair ekran çıkana kadar devam ediyoruz ilerlemeye. Bu noktaya gelene kadar işlenen kodları iyi takip edin çünkü en son işlenen Dallanma komutunun yeri çok önemli yani (je , Jne , Jz , jnz , Ja , Jb gibi ) . En nihayetinde hata ekranı çıktığında OK ye basıp işlemi tekrar yapalım ve her işlenen koşullu dallanma komutuna bir durak noktası daha koyalım.

    :0043178B E8E8DC0100 call 0044F478 à Serial Number ı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
    :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 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

    Yukarıda görülen kod üzerinde daha fazla da çalışabilirir ama ben buna şu an gerek duymuyorum ,çünkü bu program girilen numarayı dogru kabul ettikten sonra çalıştığı dizinde bir dosya oluşturuyor. REG uzantısı olan bu dosya var olunca yada içerisinde belli bir imza olunca girilen serial numaranın doğru olup olmadığını bir daha hiç kontrol etmiyor ve böylece sonsuza dek Full version olarrak çalışıyor .Anlaşıldığı gibi bu JE 00431862 komutunu JNE 00431862 yada tamamını NOP komutuna çevirirsek bu program gireceğimiz herhangi bir kodu kabul edicek ve Crackimiz tamamlanmış olucaktır.Wdasm programından aradığımız byte ların 30BE3h adresinde yer aldığını görüyoruz . Hexworkshop programının kendisini kullanıp Hworks32.exe dosyasını açıp 30BE3h adrsine gidiyoruz 0F8479000000 byte larını 909090909090 byte ları ile değiştirip başka bir isimle kaydediyoruz. Çünkü aynı isimle o an hafıza da olan bir dosyayı kayıt edemeyiz . Daha sonra HexWorkshop programından çıkıp orijinal dosyanın adını başka bir isimle kaydedip kırılmış dosyayı orijinal adıyla kaydedersek program hazır olur. Geriye çalıştırıp herhangi bir Serial Number kodu yazıp Register etmek kalıyor. Bu aylık bu kadar , önümüzdeki ay yeni konular ve daha ileri tekniklerle birlikte olmak üzere Hoşçakalın.

    Herhangi bir konudaki düşünce ve önerilerinizi mail adresime gönderebilirsiniz.

    <img src='http://www.hayalevi.com/wallpapers/orta/0986_orta.jpg' border=0>







  • Hex Editörü olarak ReHacker i da kullanabilirsiniz bunun yanında.Aslında Cracking için Assembly (.asm) bilginiz olmalidir <img src=icon_smile.gif border=0 align=middle>

    boraciner (Murat) arkadaşimiz register olayini anlatmiş bende size bari Assembly programlama dili hakkında 1 az da ben bilgi vereyim <img src=icon_smile.gif border=0 align=middle> Yalniz bu Cracking Register olayi kesinlikle Legal değildir bunuda başdan anlatayim da :-) Benim verdiğim assembly programlama dili hakkında bilginiz olmasi içindir <img src=icon_smile.gif border=0 align=middle>

    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.

    2- VERİ TİPLERİ

    Bir programlama dilinin temel özelliklerinden birisi dilin içinde kullanılacak olan veri tipleridir. Burada assembler dilinde kullanılan en basit veri tiplerinden bahsedilecektir.

    Assembler programlama dilinde kullanılacak olan bilgilerin uzunlugu bilgisayarın mikroişlemcisine baglıdır. 8088 mikroişlemci için en fazla 16 bit uzunlugunda bir veri temsil edilebilir. 80286, 80386 ve 80486 mikroişlemcileri daha g elişmiş oldukları için kullandıkları bilgi uzunlugu daha fazla olabilir.




    2.1 BYTE

    Byte 8 bitten oluşan bir bilgi birimidir. Assembler’da byte ile hem nümerik hemde alfanümerik bilgileri temsil etmek mümkündür.

    Gerek BYTE gerekse diger veri tiplerinde sayılar işaretli ve işaretsiz olarak iki ana guruba ayrılırlar. İşaretsiz sayılar tüm veri alanını bir bütün olarak degerlendirildiği bir durumu ifade eder. Sayıların işaretli veya işaretsiz olması makine açısından izafi bir durumdur.

    1 0 0 0 0 0 0 1 İşaretsiz 129 sayısını temsil eder.

    1 0 0 0 0 0 0 1 İşaretli -1 sayısını temsil eder.



    Negatif sayılarda en duyarlı bit 1 olur.

    Byte iki ana kısımdan oluşur. Her kısıma NIBBLE adı verilir. Her NIBBLE bir hexadecimal sayıyı temsil eder.

    1 0 0 0 0 0 0 1

    ----------- -------------

    2.NIBBLE 1.NIBBLE


    2.2 WORD

    2 Adet Byte ile oluşturulmuş bir yapıdır. 8088 ve diğer mikroişlemciler 16 bit uzunluğundaki bu yapıyı desteklerler. Word yapısını bir bütün olarak işleyebileceğiniz gibi yüksek byte (HB) veya Low byte (LB) olarak da işleyebilirsini z.




    2.3 DOUBLEWORD

    İki word uzunluğunda yani 32 bit uzunluğunda bir yapıdır. Gerek adreslemede gerekse büyük sayıların saklanmasında kullanılır.


    2.4 QUADWORD

    64 Bit uzunluğunda bir yapıdır. 4 word’un birleştirilmesi ile oluşturulur.

    8088 Mikroişlemcisi olan bir makinada direkt mikroişlemcinin desteklediği BYTE ve WORD kavramları kullanılabilir. 80286, 80386 ve üzeri mikroişlemcilerde BYTE ve WORD kavramlarının dışında DOUBLEWORD ve QUADWORD kavramları da kulla nılabilir. 8088 mikroişlemcilerde WORD’den daha uzun sabit ve değişkenler de kullanılabilir. Ancak bu kullanım direkt mikroişlemci destegi dışında yazılım desteği ile olur.

    3- MİKROİŞLEMCİ TASARIMI

    Bir mikroişlemci,kendisine bağlı çevre birimlerle haberleşebilmek, yürütmekte olduğu programları kontrol edebilmek için REGİSTER adı verilen, kendi iç yapısında fiziksel olarak bulunan RAM elemanlarını kullanır. REGİSTERLER bir mikroişlemcinin en temel bileşenlerinden biridir. İntel 80xxx serisi mikroişlemcilerde uzunlukları değişmekle beraber aşağıdaki registerler bulunur.

    Genel Amaclı Registerler

    AX Ah-Al Accumulator

    BX Bh-Bl Base

    CX Ch-Cl Counter

    DX Dh-Dl Data



    Segment Registerleri

    CS Code Segment

    DS Data Segment

    SS Stack Segment

    ES Extra Segment



    Offset Registerleri

    IP Instraction Pointer

    SP Stack Pointer

    BP Base Pointer

    SI Stack Information

    DI Data Information



    Flag Registerleri

    Flag






    3.1 Genel Amaçlı Registerler

    AX,BX,CX,DX registerleri genel amaçlı registerlerdir. Mikroişlemci programları çalıştırırken verileri ana bellek ile iç bellek arasında sürekli olarak taşır. Genel amaçlı registerler bu taşıma sırasında aracılık ederler. Aynı zaman da matematiksel işlemlerde giriş ve çıkış noktaları olarak kullanılırlar. X

    Bu registerlerin tamamı 16 bit uzunluğunda olup, 2 byte’tan oluşurlar. Byte’lar bir bütün olarak kullanılabileceği gibi ayrı ayrı da kullanılabilirler.

    3.1.1 AX YAZMACI

    Programlarda en çok kullanılan yazmaçlardan biridir. Accumulator’ün kısaltılması sonunda oluşan AX yazmacı bütün giriş ve çıkış işlemlerinde ve bazı aritmetik işlemlerde kullanılır.

    AX

    --------------------------------------------------------

    AH AL



    3.1.2 BX YAZMACI

    BX Registeri Base register olarak da bilinir. RAM ve IO işlemlerinde adreslemede kullanılır. Register adresleme işlemlerinde daha çok offset degerlerini tutar. Ayrıca hesaplama işlemlerinde de kullanılır.

    BX

    --------------------------------------------------------

    BH BL



    3.1.3 CX YAZMACI

    CX Registeri Counter registeridir. Döngü işlemlerinde ve kaydırma işlemlerinde sayaç olarak kullanılır.

    CX

    --------------------------------------------------------

    CH CL



    3.1.4 DX YAZMACI

    Register bazı giriş çıkış işlemlerinde ve matematiksel işlemlerde kullanılır.Daha çok çarpma ve bölme işlemlerinde büyük sayıları saklamak için AX registerinin bir parçasıymış gibi kullanılır.



    DX

    --------------------------------------------------------

    DH DL




    3.2 Segment Registerleri

    3.3 Pointer ve Index Registerleri

    3.4 PSW Registeri

    4. BELLEK , SEGMENT, OFFSET

    5. DEBUG PROGRAMI

    Debug programı exe veya com tipli, diger bir deyişle makine dili formatlı program dosyalarının çalıştırılması, bu programların bellek yerleşimlerinin, cpu üzerindeki etkilerinin ve verilerinin incelenmesi, değiştirilmesi vs. amacıyla ku llanılan bir programdır.

    Debug programı ile bir makine dili programı bellege yükleyebilir, bu programı step step çalıştırabileceğiniz gibi programın belli bir kısmını çalıştırabilirsiniz veya programın makine dili kodları üzerinde değişiklik yapabilir, programa yeni kodlar ekleyebilir veya çıkarabilirsiniz. Yada herhangi bir programı assembly kullanarak veya makine dili kullanarak yeniden oluşturabilirsiniz.




    5.1 Debug Komutları.

    Debug programı dos işletim sisteminin bir parçasıdır. Bu nedenle dos versionları arasında komutlarda veya komut özelliklerinde değişiklikler olabilmektedir. Burada programın tüm komutlarını anlatmak yerine program yazmayı veya incelemeyi sağlayacak olan komutlar üzerinde durulacaktır.



    A Assemble Assembly programlarının yazılmasını saglar.

    G Go Bellekte yüklü olan bir programın çalıştırılmasını sağlar.

    L Load Diskten belleğe bir proğramın yüklenmesini sağlar.

    N Name Bellekteki program için isim seçmeyi sağlar.

    Q Quit Programdan çıkarak işletim sistemine dönmeyi sağlar.

    R Register Register degerlerini görme ve değiştirme.

    T Trace Bellekteki bir veya daha fazla komutun çalıştırılmasını sağlar.

    U Unassembly Assembly kodlarının makine dili karşılıklarını almanızı sağlar.

    W Write Bellekteki proğramın diske yazılmasını sağlar.



    Program sistem komut satırından debug yazılarak çalıştırılabilir. Program çalıştırılırken eger bir program bellege yüklenecekse bu program ismi komut satırından verilebilir. Program çalıştığında ekranın sol tarafında ( - ) işareti belirecektir. Bu prompt debug programının komut almaya hazır olduğunu gösterir.


    5.1.1 A Assembly Komutu

    A Komutu assembly program yazmak için kullanılır. Bu komutun kullanılış şekli;








    -- A [segment:offset]

    şeklindedir.

    Komutun parametresi olan adres, yazılacak programın bellegin neresinden itibaren yerleşeceğini gösterir. Parametre seçimliktir. Eğer verilmeyecek olur ise mevcut CS ve IP üzerindeki değerler komutun parametresi olarak varsayılır. Komuttan sonra hiç bir parametre vermeyeceğiniz gibi sadece offset adresi de verebilirsiniz. Eğer komuttan sonra sadece tek bir sayı verilmişse verilen değer offset olarak algılanır ve IP registerine bu deger verilerek programın default segment ve belirlenen offset üzerinde n yazılması sağlanır.

    Komutun çalıştırılması ile, default veya belirlenen segment ve offset adresi yeni bir satır başına yazılarak bu adresin yanında komut girişi için beklenir. Her komut girilip enter tuşuna basıldığında debug ilk önce girilen komutu yorumlar ve girile n komut doğru ise segment ve offset adresleri yazılan komut uzunluğu kadar artırılarak yeni komut girişi için beklemeye başlar. Eğer girilen komut hatalı ise hata yeri gösterilerek komutun tekrar girilmesi için aynı segmet ve offset adreslerinde beklenir. Eğer herhangi bir satırda komut girilmeyerek enter tuşuna basılırsa debug komut satırına geri döner. Örnek;

    C>Debug

    - A

    2054:0100 Push Ds

    2054:0101 Mov Ax,B800

    2054:0104 Mov Ds,Ax

    2054:0106 Mov Si,0000

    2054:0109 Mov Word [Si],7941

    2054:010C Pop Ds

    2054:010D Int 20

    2054:010F

    - G



    Program yazılırken en son girilen komutun offset adresi default offset olarak alınır. A komutundan çıktıktan sonra tekrar aynı komut kullanılırsa default segmentin son kalınan offseti ekrana getirilir. Eğer programa ek yapılacaksa bu yöntem kullanı labilir. Ancak herhangi bir komut değiştirilecekse komuta girilirken değiştirilecek satırın segment ve offset adresi verilerek girilmelidir.

    A komutu ile girilen komutlar belleğe peşpeşe yerleştirilirler. Bu nedenle yazılmış bir proğramın değiştirilmesi oldukça zordur. Eğer değiştireceğiniz komut uzunluğu daha önce yazdığınız komut uzunluğu ile aynı ise problemsiz bir değişim sözkonusu olabilir. Ancak yazacağınız komut eskisinden uzun ise M komutu ile ramde yer açmak gerekir.




    5.1.2. G Go Komutu

    Go komutu hafızadaki bir programın icra ettirilmesi amacı ile kullanılır. Komutun formatı;



    - G Adres

    şeklindedir.

    Komuttan sonra verilen Adres parametresi seçimliktir. Adres verilmez ise program CS;IP ikilisindeki değerler default olarak alınarak çalıştırılır. Verilen adres her zaman programın başlatılacağı adres olarak alınır. Bu değer sadece offset olarak ve rilebileceği gibi segmet ve offest olarak da verilebilir.

    Hafızadaki herhangi bir program RET yada INT 20 komutlarından biri ile bitmelidir. G komutu bu iki assembler komutundan birini icra ettirdiğinde PROGRAM TERMINATED NORMALLY deyimi ile sona erer. Bahsedilen komutlar program icrasını sona erdirerek k omut satırına dönmeyi sağlar. Herhangi bir program bu iki komuttan biri ile sona ermiyor ise makinanız denetimsiz komutlar yüzünden kilitlenecek yada istem dışı davranacaktır.

    Herhangi bir proğramı birden fazla sayıda çalıştıracaksanız ikinci ve sonraki çalıştırmalarda CS:IP ikilisinin değerlerinden emin olmalısınız. CS:IP ikilisine istediğiniz herhangi bir değeri R komutu ile atayabilirsiniz.


    5.1.3 L Load Komutu

    L Komutu disk üzerindeki herhangi bir programın belleğe yüklenmesi için kullanılır. Komutun herhangi bir parametresi yoktur. Komut N komutu ile ismi belirlenmiş bulunan programı belleğe yükler.




    5.1.4 N Name Komutu

    N Komutu, L veya W komutu için dosya ismi seçmekte kullanılır. Komutun kullanım şekli;



    - N Dosya Adı

    şeklindedir.

    Name komutu Load ve Write komutlarından önce kullanılarak diskten çağrılacak yada diske yazılacak dosyanın adını belirlemekte kullanılır.




    5.1.4 Q Quit Komutu

    Komut debug programını sonlandırır.




    5.1.5 R Register Komutu

    Komut CPU registerlerinin değerlerini görmek yada değiştirmek için kullanılır. R komutunun kullanım biçimi aşağıda verilmiştir.



    - R Register Adı

    Komut registerlerin kullanımı ile ilgili olmak üzere 3 ayrı görevi yerine getirir.



    R : Komut tek başına kullanılırsa CPU registerlerinin o anki tüm degerleri gösterilir. Registerlerin yanısıra komut Flag registerinin degerlerini de temsili olarak gösterecektir. Komutun kullanımı sonunda CS:IP ile işaret edilen komut da ekranda göste rilecektir. R komutunun kullanımı sonunda aşağıdakine benzer bir görüntü alıncaktır.




    - R

    AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

    DS=2054 ES=2054 SS=2054 CS=2054 IP =0100 NV UP EI PL NZ NA PO NC

    2054:0100 IE PUSH DS

    NV UP EI PL NZ NA PO NC değerleri dışındaki tüm reğişterler daha önceki bölümlerde anlatılmıştı. Yukarıdaki değerler Flag registerinin temsili gösterimidir. Bu registerin alabileceği değerler aşağıda gösterilmiştir.




    FLAGLAR

    Overflow

    Direction

    Interrupt

    Sign

    Zero

    Auxiliary Carry

    Parity

    Carry
    BIT SET (1)

    OV

    DN

    EI

    NG
    ZR

    AC

    PE

    CY
    BIT RESET (0)

    NV

    UP

    DI
    PL
    NZ
    NA
    PO

    NC








    R komutundan sonra parametre olarak F harfi kullanılırsa program flagların değiştirilmesi için mevcut flagları ekrana getirir ve istediğiniz flagları değiştirmeniz için bekler. Bu durumda istediğiniz herhangi bir flagi set yada reset edebilirsiniz.




    - R F

    NV UP EI PL NZ NA PO NC - ZRUP

    -

    Yukarıdaki örnekte Zero flagı SET, direction flagı RESET edilmektedir.

    R komutu ile sadece flagların değil tüm registerlerin degerleri değiştirilebilir. Bunun için R komutundan sonra değiştirilmesi istenen registerin isminin yazılması gerekir. Bu işlem gerçekleştiğinde registerin mevcut degeri ekrana yazılır ve ( : ) iş areti konularak registerin yeni degeri sorulur. Bu işaretin yanına deger 4 digit hexadecimal olarak verilmelidir. Eger bir deger verilmeyip enter tuşuna basılırsa registerin içeriği değiştirilmeyecektir.




    5.1.6 T Trace Komutu

    Trace komutu hafızada bulunan bir programın satırlarının tek tek veya belli bir kısmının çalıştırılması için kullanılır. Komutun kullanımı aşağıda verilmiştir.



    - T=Adres Değer



    Komutun parametreleri seçimliktir. Ilk parametre Adres parametresidir ki bu parametre kullanılacaksa komuttan sonra = işaretinin kullanımı zorunludur. Adres parametresi icra ettirilecek ilk komutun adresi olarak alınır.

    Değer parametresi kaç adet komutun peşpeşe icra ettirileceğini gösterir. Eğer kullanılmamış ise bu değer 1 olarak alınır. Eğer herhangi bir parametre kullanılmaz ise komut CS:IP ile adreslenen yerden başlayarak 1 komut icra ettirilir ve komutun icr asından sonra registerlerin değeri ve işlenecek olan komut ekranda görüntülenir.




    5.1.7 U Unassembly Komutu

    U Komutu bellekteki programın makine dili ve assembly karşılıklarını ekranda listelemek için kullanılır. Komutun kullanım şekli aşağıda verilmiştir.



    - U Adres1 Adres2



    Parametre olarak verilen Adres1 listelenmek istenen programın başlangıç adresini gösterir. Bu adres segment ve offset olarak verilebilir. Bu adres verilirken herhangi bir komutu bölmemesine özen göstermek gerekir. Aksi halde ekrana getirilecek list e anlamsız bir liste olacaktır.

    Ikinci verilen parametre listelemenin sonunu belirler. Burada verilecek adres offset niteliğinde olmalıdır. Segment Adres1’de belirtilen segment adresi olarak alınacaktır.



    Örnek 1



    U 101 106



    2054:0101 B800B0 MOV AX,B000

    2054:0104 8ED8 MOV DS,AX

    2054:0106 BE0000 MOV SI,0000



    Örnek 2



    U 102 106



    2054:0102 00B08ED8 ADD [BX+SI+D88E],DH

    2054:0106 BE0000 MOV SI,0000




    5.1.8 W Write Komutu

    Bellekteki herhangi bir proğramın bir blok şeklinde diske proğram olarak yazılmasını sağlar. Komutun kullanım şekli;

    W Adres

    şeklindedir.

    Komuttan sonra verilen adres diske kaydedilecek proğramın başlangıç adresidir. Eğer bu parametre verilmezse 0100 offseti default olarak kabul edilir. Diske yazılacak programın uzunluğu BX:CX register çiftinden alınır.

    Komut kullanılmadan önce N komutu ile diske yazılacak programın ismi belirlenmelidir. Aksi halde diske yazma işlemi default deger üzerinden yapılacaktır.



    Örnek;



    N Deneme.com

    R BX

    : 0000

    R CX

    : 0010

    W

    Writing 0010 Bytes

    -



    6. ASSEBLER PROGRAM YAPISI ve ILGILI KOMUTLAR

    Bir program belleği parçalara bölerek (segmentleyerek) kullanır. Assembler programlarda da yapı itibariyle bellegin segmentlere ayrılması ve ayrılan her bölümün ayrı ayrı tanımlanarak kullanılması esastır. Bu nedenle bir assembler programında genel itibariyle bölüm tanımları programın yapısını oluşturur. Genellikle bir proğramda geçici verilerin saklandığı stack, kalıcı verileri saklamak için data ve program kodlarının saklandığı code segment bölümleri yer alır. Bir assembler programının örnek yapı sı aşağıda verilmiştir.



    STK SEGMENT PARA ‘STK’

    Tanimlar

    Tanimlar

    STK ENDS



    DAT SEGMENT PARA ‘STK’

    Tanimlar

    Tanimlar

    DAT ENDS



    COD SEGMENT PARA ‘COD’

    ANA PROC NEAR

    ASSUME SS:STK, DS:DAT, CS:COD

    ....

    ....

    ANA ENDP

    COD ENDS

    END






    6.1 Segment Komutu

    Segment komutu programın kullandığı segment kesimlerini tanımlamak için kullanılır. Program içinde tanımlanan herhangi bir segment segment registerleri tarafından takip edilir. Tanımlanan herhangi bir segmentin hangi register tarafından takip edil ecegi ASSUME deyimi ile tanımlanır. Komutun kullanım şekli;



    isim SEGMENT tip ‘sınıf’



    şeklindedir.

    Komut bir isim ile başlar. Tanımlanan isim degişken olabilme kurallarına uygun herhangi bir harf dizisidir. Tanımlanan isim program içinde yapılacak atamalarda vb. işlemlerde kullanılabilir.

    Tip segmentin adreslenebilme tipini belirler. Bu deyim ile kullanılabilecek tip çeşitleri;

    PAGE 256 Byte ve katlarıyla adreslenebilen segment

    PARA 16 Byte ve katlarıyla adreslenebilen segment

    WORD Word ve katlarıyla adreslenebilen segment

    BYTE Byte ve katlarıyla adreslenebilen segment



    Segment anahtar cümlesi ile başlayan bir segment ENDS cümlesi ile son bulmak zorundadır.



    Örnek



    STK SEGMENT PARA ‘STK’

    Tanimlar

    Tanimlar

    STK ENDS



    STK SEGMENT PAGE ‘STK’

    Tanimlar

    Tanimlar

    STK ENDS






    6.2 Assume Komutu

    Mikroişlemciler program içinde bellek kesimlerini takip edebilmek için en az 3 adet segment registeri kullanır. Bu registerler CS, DS, SS registerleridir. CS registeri program kodlarını takip etmek için, DS registeri program içinde sabit olarak kul lanılan verileri saklamak için, SS registeri ise program içinde kullanılan geçici verileri saklamak için kullanılır.

    Program içinde belirlenen segmet kesimlerinden hangisinin hangi register ile takip edilecegi assembler derleyicisine Assume deyimi ile bildirilir. Komutun kullanım şekli,



    Assume register : segment , register : segment , ........ şeklindedir.



    Örnek:



    STK SEGMENT PARA ‘STK’

    Tanımlar

    Tanımlar

    STK ENDS



    DATA SEGMENT PARA ‘DAT’

    Tanımlar

    Tanımlar

    DATA ENDS



    CODE SEGMENT PARA ‘CODE’

    BASLA PROC FAR

    ASSUME DS:DATA, SS:STK, CS:CODE


    6.3 Proc Komutu

    Proc komutu Code segment içindeki bir işlem blogunun tanımlanmasını sağlar. Tanımlanan bloklar bir procedure davranabilirler ve diger bloklar tarafından CALL komutu ile çağrılabilirler. Her assembler programı içinde en az 1 işlem blogunun olması zo runludur. İlk çalışacak olan blok segment başlanğıcındaki bloktur. Bu bloktan diger bloklar çağrılabilir. Eger assembler program üst düzey dillerden çağrılacak bir program ise ilk çalışacak blok çağrılan blok olacağından segment başında olma zorunluluğu y oktur. Komutun kullanılış şekli;



    isim PROC tip



    şeklindedir.



    İsim, degişken olabilme kurallarına uymak koşulu ile istenen herhangi bir harf dizisi olabilir. PROC deyiminden sonra gelen tip FAR veya NEAR olabilir. Bu deyimler ilerideki bölümlerde detaylı olarak anlatılacaktır. ilk çalışacak bölümün FAR, dige r bölümlerin NEAR olabileceğinin bilinmesi bu bölüm için yeterlidir.

    Proc deyimi ile başlayan herhangi bir program blogu ENDP deyimi ile sonlandırılmalıdır.



    Örnek:



    STK SEGMENT PARA ‘STK’

    Tanımlar

    STK ENDS



    DATA SEGMENT PARA ‘DAT’

    Tanımlar

    DATA ENDS



    CODE SEGMENT PARA ‘CODE’

    BASLA PROC FAR

    ASSUME DS:DATA, SS:STK, CS:CODE

    Push DS

    Push SS

    Mov Ax, 15h

    .

    .

    CALL ATLA1

    BASLA ENDP



    ATLA1 PROC FAR

    .


    RET

    ATLA1 ENDP

    ENDS

    END


    6.4 Call/Ret Komutu

    Call komutu herhangi bir işlem blogu içinden bir başka işlem blogunu çagırmak için kullanılır. Komut aynı segment içindeki(Near) işlem bloklarını çağırabileceği gibi farklı segment içindeki(Far) işlem bloklarını da çağırabilir. Komutun kullanılış ş ekli;



    CALL Çağrılan Blok Adı

    Call komutunun işlenmesi sırasında mikroişlemci çağrılan bloga gitmeden önce code segment içinde bulunduğu adresi stack segment içine saklar ve çağrılan yere dallanır. Çağrılan blok içinde işlemler sona erdikten sonra stack segmente saklanan adrese tekrar geri dönülür. Çağrılan blok içindeki işlemlerin bittiği RET komutu ile belirlenir.

    Ret komutu genel olarak parametresiz kullanılır ve stack segment içindeki bilginin CS:IP ikilisine aktarılmasını sağlar.





    7. DEGİŞKEN VE SABİT TANIMLAMA

    Assembler program içinde herhangi bir segment kesiminde degişken tanımlaması yapılabilir. Değişken ve sabit tanımlamaları;



    DB

    DW

    DD

    DQ

    DT

    DUP

    Komutları ile yapılır.


    7.1 DB Deyimi

    Byte tipi bir degişkenin veya sabitin tanımlanmasını sağlar. Tanımlama byte tipinde bir alan olabileceği gibi dizi şeklinde bir alan da olabilir. Tanımlanan alan(ların) 8 bit olması nedeni ile bu alana 0 ile FF arasında herhangi bir deger atanabili r. Deyimin kullanılış şekli;

    degişken DB ilk deger

    Tüm değişken veya sabit tanımlama deyimleri ile tanımlanan alanlara ilk deger atama işlemleri tanımlama anında gerçekleştirilir. Eğer tanımlanan alana deger atanmayacak ise ilk deger olarak ? atanmalıdır. Aşağıdaki atamalar geçerli atamalardır.



    SAYI DB 30 ;ilk değeri 30 olan SAYI sabit/değişkeni

    SAY DB 0AH ;ilk değeri 10 olan SAY sabit/değişkeni

    ABC DB ‘ADI SOYADI’ ;ilk değeri ADI SOYADI olan karakter dizisi

    DIZI DB 0,1,2,3,4,5,6,7 ;değerleri 0,1,2,3,4,5,6,7 olan byte dizisi



    ilk değer ataması sırasında bir dizi oluşturulacak ve dizinin içine belirli bir değer/değerler atanacaksa DUP deyimi kullanılır.



    ABC DB 10 DUP (?) ;içerikleri olmayan 10 byte’lık bir dizi

    ABC DB 50 DUP (0AH) ;İçerikleri 10 olan 50 byte’lık bir dizi

    ABC DB 25 DUP (0,1) ;içerikleri 0,1,0,1.... olan 25 byte’lık bir dizi




    7.2 DW Deyimi

    iki byte’lık bir sabit/değişken tanımlamasının yapılmasını sağlar. Deyimin kullanılış şekli;



    degişken DW ilk değer

    şeklindedir.



    MESAJ DW 1210H

    SAYI1 DW ?

    SAYI2 DW 10 DUP(0)

    SAYI3 DW 0,0AABH,CCCAH




    7.3 DD Deyimi

    Dört byte’lık bir sabit/değişken tanımlamasının yapılmasını sağlar. Deyimin kullanılış şekli;



    degişken DD ilk değer

    şeklindedir.



    MESAJ DD 12100000H

    SAYI1 DD ?

    SAYI2 DD 10 DUP(0)

    SAYI3 DD 0,0AABC12H,0H




    7.4 DQ Deyimi

    64 bitlik, Sekiz byte’lık bir sabit/değişken tanımlamasının yapılmasını sağlar. Deyimin kullanılış şekli;



    degişken DQ ilk değer

    şeklindedir.



    MESAJ DQ 12100000H

    SAYI1 DQ ?

    SAYI2 DQ 10 DUP(0)

    SAYI3 DQ 0,0AABC12H,0H




    7.5 DT Deyimi

    Seksen bit 10 byte’lık bir sabit/değişken tanımlamasının yapılmasını sağlar. Deyimin kullanılış şekli;

    degişken DT ilk değer

    şeklindedir.



    MESAJ DT 12100000H

    SAYI1 DT ?

    SAYI2 DT 10 DUP(0)

    Şimdilik bu kadar <img src=icon_smile.gif border=0 align=middle> Murat arkadaşimiz 2.yazisini yazdiğinda bende yararli bir document hazirlayip yazarim <img src=icon_smile.gif border=0 align=middle>
    Kolay gelsin

    Flamingo S.R.L
    www.flamingo.ro
    "MagicDeath is Back"




  • Başka adreste açıklanan program crackleme ve serial bulma bilgilerini burada açıklama gerek yok.Eğer cracklemeyi biliyorum diyorsan sana bir program hazırlayıp göndereyim onda bulunan şifreyi bana bul.Okey mi?
  • <BLOCKQUOTE id=quote<font size=1 face='Verdana, Arial, Helvetica' id=quote>quote:<hr height=1 noshade id=quote>
    Başka adreste açıklanan program crackleme ve serial bulma bilgilerini burada açıklama gerek yok.Eğer cracklemeyi biliyorum diyorsan sana bir program hazırlayıp göndereyim onda bulunan şifreyi bana bul.Okey mi?


    <hr height=1 noshade id=quote></BLOCKQUOTE id=quote></font id=quote><font face='Verdana, Arial, Helvetica' size=2 id=quote>

    Kim ? Benim yazdığım arkadaşimdan istek üzerine aldiğim bir document idi.Yararlanin diye yazdik isterseniz silelim ?

    +

    boraciner arkadaş ada söylüyorsan da kimse burda bişeyler kanıtlamak zorunda değil.
    Yararlı bir bilgi olsun diye yazmiş.Yararlanip & Yararlanmamak size kalmiş.

    Flamingo S.R.L
    www.flamingo.ro
    "MagicDeath is Back"




  • hayır hayır sakın silme!

    inandığınız gibi yaşamazsanız, yaşadığınız gibi inanırsınız (ş.şamil)
  • incsoft, mail ile gonderiver rica etsem <img src=icon_smile_cool.gif border=0 align=middle> bosbos oturmak yaramiyor gobek yapmaya basladik :))) aslina bakarsan o isle aykac kardesimiz daha iyi hasir nesir.. neyse sen gonder bana ben zaten ona havale edecegim...
    <img src='http://geocities.com/sahraaa2002/bluesongbyy.gif' border=0>
  • DOSTLAR BURADA İRDELENEN KONU SERİAL İ OLMADAN Bİ PROGRAMA GİRİŞ OLAYIMI...YANİ Bİ NEVİ KENDİ CRACK İNİ KENDİN YARAT İŞİMİDİR?ANLAYAMADIMDA?
    <img src='http://www.andromeda.com.tr/logos/donen_logo.gif' border=0>
  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • HANİ O TÜR BİŞİSE DENYIL DAĞDELEN İN Bİ ESERİ VAR ELİMDE DE:
    Code Cracking e giriş

    Piyasadaki Programları kırmak içinhttp://astalavista.box.sk/ den yada benzeri sitelerden crack ler indirerek programlari çalışır hale getirmeyi yada Nag Screenlerden kurtulmayı biliyorsunuzdur.
    (Bilmiyosanız zaten bu sayfada size göre bişi yok)

    Peki bu programların nasıl yapıldığını merak etmedinizmi hiç?
    Aslında düşünüldüğü kadar zor bir iş diyildir... Biraz deneyiminiz varsa 5 dakkanızı harcayıp istediğiniz programı internetten crack indirmeden kendiniz kırabilirsiniz.

    Öncelikle biraz programlama ve ASM Bilgisine ihtiyacınız var, Eğer assemble size birşey ifade etmiyorsa caninizi sikmayin Holy babaniz size anlatir bişiler... Eğer iyi düzeyde Programlama bilginiz varsa, Programcıların Kolayca kırılmayan programlar yazmaları için dikkat etmeleri gereken noktalari da burda açıklicam... şimdilik assemblein Maiknenizin anladığı dil olduğunu söyliyelim.

    Öncelikle şunu söylemeliyim ki Her programı kıran kesin bi yönetm yoktur, Biraz kafayı yormaniz gerekio... elinizdeki Programları cracklemek için aşşağıdaki programlara ihtiyacınız olacak..

    Programın adı Açıklama
    Hex Workshop Çok kullanışlı bir Hex editor.
    W32Dasm 32 Bit Disassembler, Exenin kodlarini birazcik daha anlaşılır bi hale sokup bize faydalı oluyor.
    RegMon Registry Monitor,Programı kullanmakta olduğunuz zaman içinde Windows Registrysine eklenen yada değiştirilen herşeyi size rapor eder.
    FileMon File Monitor, Hangi dosyanın neresinde ne değişiklik yapıldığını bildirir
    Numega Softice Debugging Programı ama Dos tabanlı olduğu için Windows Milennium ve sonrasında çalışmıyor, onun için açıklamasına girmicem

    İşterseniz öncelikle bu iş için en çok işinize yariycak program olan Hex Workshopu kendisini kullanarak cracklemekle başlıyalım :)

    Registration Key isteyen Programları kırma:
    (Hex Workshopu kullanarak Hex Workshopu crackliyoruz :) ehue

    Mesela Kimi program düzgün çalışması için size Registration key sorar...
    Alın işte Hex Workshop V2.50 böyle bi program :)

    Başlıyoruz.. Öncelikle programı açın... help de registration u gördünüz mü? sizden bi registration key istio... sallayın bişiler... Tutmadı dimi? Eğer çok ballı biri diyilseniz hayatınız boyunca denesenizde tutturamazsınız. Makine Salladığınız kod üstünde işlem yapar, programın güvenliği açısından verdiğiniz user name e göre şifrenizde değişik olmak zorundadır çünkü...

    ana mantık en basite indirgenmiş olarak şudur...

    eğer girilen usename ve şifre algoritmaya uyuyorsa... Bu adam bu programı istediği gibi kullanabilir.
    eğer girilen usename ve şifre algoritmaya uymuyorsa... Siktirip gitsin, bedawa dağıtmıyoruz...

    Algoritmayı çözmek gerçekten zordur, onun yerine biz ana mantığı tersine çevirmeye çalışıcaz..
    yani program koduyla oynayarak adamın yanlış şifre girmesi halinde programa doğru şifre girilmiş muamelesi yaptırmaya çalışıcaz... bu durumda makine, mantık olarak doğru username ve şifre girilirsede yanlis sifre muamaelesi uyguliycak :) ama söylediğim gibi sallıyarak doğru şifre girmek imkansiz gibi bişi zaten.

    Herneyse Şifreyi kafadan attınız... size bi hata mesajı geldi.. error mesaj penceresinin başlığına bakın ne yazıyo...

    "Registration unsuccessful" bunu bi yere not edin lazim olucak.

    Hex workshopu kapatın ve bi yere programın exe dosyasının(HWORKS32.EXE) bi yedeğini alın.

    şimdi W32Dasm prgoramını açıyoruz... menuden disassembler > open file to disassemble i seçiyoruz. burdan HWORKS32.EXE yi açıyoruz, ve program bizi biraz beklettinten sonra önümüze makine dilinde birsürü kod çıkarıyo...

    bi bok anlamadiniz dimi çıkanlardan :)

    Herneyse Yine menuden Refs > Dialog references i seçelim. ve burda biraz önce gördüğümüz "Registration unsuccessful" yazısını bulalım. hmm sanirim orda yok, unutalim o zaman simdilik... aşşağıdakileri uygulayalım... eğer aradığımız pencerenin adını burda bulsak aşağıdakilere gerek kalmazdı ama bulamadık napalım...

    Menulerden Search>Find text e tıklayarak Registration Unsuccessful yazalım.

    şöle bişi çıkıcak karşımıza...

    Name: DialogID_0075, # of Controls=003, Caption:"Registration Unsuccessful", ClassName:""
    001 - ControlID:FFFF, Control Class:"STATIC" Control Text:"You have entered an invalid registration number."
    002 - ControlID:FFFF, Control Class:"STATIC" Control Text:"Please confirm you entered a valid.....
    003 - ControlID:0001, Control Class:"BUTTON" Control Text:"&OK"

    Yani kısaca kafadan attığımız serial i yazinca karşımıza çıkan diyaloğun makina dilindeki hali....

    Üstteki satırdaki DialogID_0075 e dikkat edelim şimdide...
    Tamam, şimdi Dialog references e dönelim programın Refs menusundeki.
    Dialog: DialogID_0075 satırını bulup çift tıklayalım. azicik yukarı scroll edelim... şu satırı gördükmü?

    * Possible Reference to Dialog: DialogID_0075

    Burda Asm ile yazılmış satırlar var, yukarıdaki satirin anlamı şu... Program bu noktada Registration Unsuccessful başlıklı diyaloğa başvuruyor. Bu pencere yanlış şifre girildiğinde çıktığına göre aradığımız kod buralarda biryerlerde fakat devam etmek için biraz Assemble öğrenmemiz gerekicek :)

    Push, Lea, call, jne, jmp, jne, .... bunların hepsi asm komutları fakat biz konu program kırmaysa bizi ilgilendirenler sadece mantıksal seçim yaptıran komutlar... şu şuna eşitse şöle yap, bu bundan büyükse böle yap falan gibi şeyler yani... Açıklamaları yapıcam birazdan siz sadece okuyun anlamasanızda şimdilik... Bu tip komutlara örnek olarak Jne, Jmp, Je, jae, jb, je falan gibi komutlar var asm dilinde... Farkettiyseniz hepsi J harfiyle başlıyo...

    Program Registration unsuccessful diyaloğuna ihtiyaç duyduğuna göre bu noktadan biraz önce şifrenin doğru yada yanlış olduğunu kontrol eden kod yazılı olmalı, bu yüzden * Possible Reference to Dialog: DialogID_0075 satırından yukarı doğru her satıra bakıp J ile başlayan komut arıyoruz... biraz yukarı çıktıktan sonra aşağıdaki gibi satirlar görüceksiniz. highlighted satırı aşağıdaki gibi Je ile başlayan komutun üstüne gelin. o satır yeşil olucak...



    şimdiii..... Je li satiri sectikten sora status bara bakıyoruz @Offset yazısını gördünüzmü? onu bi köşeye not ediyoruz... sonundaki h harfini ve baştaki 0ları not etmenize gerek yok.. hatta not etmeyin. yani 256B3 'ü not edin.

    Burdaki offset, aradığımız kodun exe içindeki yeri... tamamdır istediğimizi aldık artık W32Dasm yi kapatabiliriz. Hex Workshopu açın, hatırlıyorsanız bi yedeğini almıştık, siz program files in icinde duran orjinalini açın...

    Şimdi menuden File > open a tıklayarak daha önceden yarattığımız Hworks.exe nin yedeğini açalım. karşınıza yine bi sürü şey çıktı... Edit Menusunden Gotoyu seçin, Beggining of File'ı tıklayıp Offset'e 256B3 yazın. aynen aşşadaki gibi yani..



    Gotoya tıklayın... karşınıza şöle bişi gelicek...



    İmlecin bulunduğu konumun yanında 0F 84 bulunuyor... Bu biraz önce W32Dasm programında gördüğümüz Je komutunun Hex kodundaki anlamı bu... Hatırlarsanız W32 asm programında Registration unsuccessful diyaloğundan önceki J ile başlayan ilk komutu aramıştık. bu komut Je yerine başka birşeyde olabilirdi o zaman burda 0F 84 yerine başka bir kod da olabilirdi... Yani bu offsette 0F 84 bulmamızın sebebi serialin doğruluğunun Je komutuyla kontrol edilmesidir. farklı komutların Hex kodlarını da aşşağıda verdim... ASM komutları genellikle kısaltmalardan oluştuğu için yanlarına ingilizce anlamlarını yazdım.

    Hex Kodu: ASM Kodu: Anlamı:
    75 yada 0F85 jne jump if not equal
    74 yada 0F84 je jump if equal
    EB jmp jump directly to
    90 nop no operation
    77 yada 0F87 ja jump if above
    0F86 jna jump if not above
    0F83 jae jump if above or equal
    0F82 jnae jump if not above or equal
    0F82 yada 72 jb jump if below
    0F83 yada 73 jnb jump if not below
    0F86 yada 76 jbe jump if below or equal
    0F87 jnbe jump if not below or equal
    0F8F yada 7F jg jump if greater
    0F8E jng jump if not greater
    0F8D jge jump if greater or equal
    0F8C jnge jump if not greater or equal
    0F8C jl jump if less
    0F8D jnl jump if not less
    0F8E jle jump if less or equal
    0F8F jnle jump if not less or equal

    Eveet kodun yerini bulduk, kodu da bulduk sıra geldi kodu ters çevirmeyee... Çok basit... Je nin anlamı Jump if equal, O zaman bunun yerine Jump if not Equal (Jne) komutunu koyarsak kod tam tersine çalışıcak. Jne nin hex karşılığı 0F 85... o zaman bulduğumuz değerin yerine bunu girelim... amman dosyaya insert yapmıyalım, dosya boyutu değişirse büyük ihtimalle çalışmaz çünkü. 0F 85 in üstüne yazalım yani, 84 ü 85 yapalım. üstüne yazıyorsanız Hex Workshop sizi uyarıcak zaten.

    Eveet bunuda yaptıysanız artık save edin, Hex workshoptan çıkın. Hex workshopun exe dosyasını silip yerine değiştirdiğimiz exe dosyasını koyun... önceden yaptığımız gibi helpden registrationa basın... Ve kodu yine sallayın :) kodun doğrulandığını göreceksiniz :) Size username ve organization soracak ve register olmuş olacak...

    Biraz uzun ve zahmetli ama basit sayılır. Bunu değişik programlarda da deneyebilirsiniz. yada programlama bilginiz varsa burda öğrendiğiniz offsetteki kodu değiştiren bir program yazabilirsiniz.



    Bu kadarı programı kırmanıza yeter ama eğer başkalarının kullanması için programı kıran bir exe dosyası yaratmak istiyorsanız o konudada yardımcı oliim... Aşağıdaki örnek hex workshop için yazdığım Crackin source code u, belki faydalı olur.


    Uses Crt;

    Const A: Array[1..2] of Record {<-------- 2 byte cracklenecek}
    A : Longint;
    B : Byte;
    End =
    ((A:$256B3;B:$0F),(A:$256B3;B:$84));
    {<--offset "256B3" ve "0F 84" deişecek}

    Var Ch:Char;
    I:Byte;
    F:File;
    FN:file of byte;
    Size:longint;


    Begin
    Writeln('My Hex Workshop Crack :) ');writeln('Hex Workshop V2.54 Crack');
    Assign(F,'HWORKS.EXE'); {<-------------- Cracklenecek dosyanın adı}
    {$I-} Reset(F,1); {$I+}
    If IOResult <> 0 then
    begin
    writeln('Dosya bulunamadı');
    halt(1);
    end;
    For I:=1 to 2 do {<---------------------- 2 byte Cracklenecek}
    Begin
    Seek(F,A[I].A);
    Ch:=Char(A[I].B);
    Blockwrite(F,Ch,1);
    End;
    Writeln('Dosya Cracklendi!');
    End.


    Bu olayda biraz zahmetli ama programlara 100lerce dolar saymaktan iyidir :)
    Boşuna mı yaziom acaba ya :) bu kadarını yapicak adam çıkarmı merak ediorum walla... bunu becerdiyseniz bana mail atın ya merak ettim :))


    <img src='http://www.andromeda.com.tr/logos/donen_logo.gif' border=0>




  • valla arkadaşlar ne desem bilemiyorum tam istediğim şeydi teşekkürler

    inandığınız gibi yaşamazsanız, yaşadığınız gibi inanırsınız (ş.şamil)
  • Magicdeath'e katılıyorum,ben sadece yararlı bi bilgi die yazdım bundan yararlanıp yararlanmamak size kalmış bişi.
    ayrıca siz benim forum'a hangi başlık altında ne yazıcağıma karar veremessiniz...
    <img src='http://www.wardom.org/dynamite_bomb_md_blk.gif' border=0>
  • Bakın Ne güzel işte <img src=icon_smile.gif border=0 align=middle> Bir sürü en azindan Cracking e merakli / ve Bilgili olan arkadaşlar çıktı :-) Bu da bir bilgi paylaşımıdır <img src=icon_smile_wink.gif border=0 align=middle>

    Örneğin : boraciner,sphere,
    İstekli olanlardan da , ilkerbaba ve diğer arkadaşlar <img src=icon_smile.gif border=0 align=middle>

    Ne Güzel <img src=icon_smile.gif border=0 align=middle>

    Flamingo S.R.L
    www.flamingo.ro
    "MagicDeath is Back"
  • UzMaN forumda bu tür Hacking sitelerinin reklamini yapmayin en azindan yapmamaya özen gösterin <img src=icon_smile.gif border=0 align=middle> Çünkü forumun asıl amacina uymuyor <img src=icon_smile.gif border=0 align=middle>

    +

    Redirecting to asys1.net hosting e yönleniyor <img src=icon_smile.gif border=0 align=middle>

    Flamingo S.R.L
    www.flamingo.ro
    "MagicDeath is Back"
  • hort
  • Oh oh coşmuşsunuz siz.
  • Yasak değil mi?
  • formun en kral yasağını çiğnemiş gibi geldi süresiz ban ondan mı ki
  • Ulan ne adamlarsınız yaa

    < Bu ileti tablet sürüm kullanılarak atıldı >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.