|
![]() ![]() |
|
Konu Araçları |
amaçlı, eğitim, incelenmesi, kırma, program, yöntemlerinin |
![]() |
Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi |
![]() |
![]() |
#1 |
Şengül Şirin
![]() |
![]() Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesiÖZET Günümüzde sıklıkla kullanılmaya başlanan terimlerden bir tanesi, crack yani program kırma veya kod değiştirmedir ![]() ![]() ![]() ![]() ![]() ![]() EXAMINATION OF PROGRAM CRACKING METHODS FOR EDUCATIONAL PURPOSES ABSTRACT Nowadays, one of most used terms is crack, in other words, program cracking or code reversing ![]() ![]() ![]() ![]() ![]() ![]() Hilal AKARKAMÇI
__________________
Arkadaşlar, efendiler ve ey millet, iyi biliniz ki, Türkiye Cumhuriyeti şeyhler, dervişler, müritler, meczuplar memleketi olamaz
![]() ![]() |
![]() |
![]() |
![]() |
Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi |
![]() |
![]() |
#2 |
Şengül Şirin
![]() |
![]() Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesiGİRİŞ Internet'ten indirilen ya da bilgisayar dergileri tarafından verilen çoğu programın belirli bir kullanım süresi bulunmaktadır ![]() ![]() ![]() ![]() ![]() 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ı ![]() ![]() ![]() ![]() Programlar için çeşitli koruma tipleri mevcuttur ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi |
![]() |
![]() |
#3 |
Şengül Şirin
![]() |
![]() Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesiBir programın kırılması, o programın yazılış amacı dışında davranmasına sebep olmak olarak yorumlanabilir ![]() ![]() ![]() ![]() ![]() Makine dili denilen dil, aslında rakamsal bir dildir ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 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 ![]() ![]() ![]() ![]() Windows / System dizini altında bir çok DLL uzantılı dosya mevcuttur ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi |
![]() |
![]() |
#4 |
Şengül Şirin
![]() |
![]() Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesiBu 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ı, 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 ![]() ![]() Assembly kodlarına uzak olanların da, program kırımına geçmeden önce EK-B'ye bakmaları tavsiye edilir ![]() ![]() |
![]() |
![]() |
![]() |
Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi |
![]() |
![]() |
#5 |
Şengül Şirin
![]() |
![]() Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi1 ![]() Windows altında çalışan bir çok program, password korumalıdır ![]() ![]() ![]() 1 ![]() ![]() Hedef Program : HexWorkshop Programın Bulunabileceği Adres : BreakPoint Software, Inc ![]() Program ilk açıldığında ekrana, bu programın 20 gün süreli bir demo versiyon olduğunu hatırlatan bir pencere gelecektir ![]() ![]() ![]() ![]() 1 ![]() ![]() Kırarken Kullanılan Program : Wdasm89 Wdasm89 bir disassembler’dır ![]() ![]() 1 ![]() ![]() Programın kırılımı on aşamada gerçekleştirilmiştir ![]() 1 ![]() ![]() ![]() Program disassemble edilerek crack işlemine başlanır ![]() ![]() 1 ![]() ![]() ![]() Disassembler ekranında, Functions Menüsünden, Imports‘a bakılarak sonuca götürecek en uygun fonksiyon bulunur ![]() ![]() ![]() |
![]() |
![]() |
![]() |
Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi |
![]() |
![]() |
#6 |
Şengül Şirin
![]() |
![]() Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi1 ![]() ![]() ![]() Program load edilip (yüklenip) user32 ![]() ![]() 1 ![]() ![]() ![]() Daha sonra program çalıştırılarak Demonstration Version menüsü açılır ve buraya Serial Number olarak herhangi bir numara girilir ![]() ![]() 1 ![]() ![]() ![]() Seri numarası girme işlemi sonucunda REGISTER tuşuna basıldığında Wdasm programının içine otomatik olarak girilecektir ![]() ![]() ![]() ![]() 1 ![]() ![]() ![]() 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 ![]() [IMG]file:///C:/DOCUME%7E1/xp/LOCALS%7E1/Temp/msohtml1/06/clip_image001 ![]() :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 ;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 |
![]() |
![]() |
![]() |
Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi |
![]() |
![]() |
#7 |
Şengül Şirin
![]() |
![]() Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesiCrack işlemine tabi tutulan HexWorkshop Programında, girilen numara doğru kabul edildikten sonra çalıştığı dizinde bir dosya oluşturulur ![]() ![]() 1 ![]() ![]() ![]() 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 ![]() ![]() ![]() 1 ![]() ![]() ![]() Wdasm programından aranılan byteların 30BE3h adresinde yer aldığı görülmektedir ![]() ![]() ![]() ![]() 1 ![]() ![]() ![]() 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 ![]() 1 ![]() ![]() ![]() Daha sonra yapılması gereken, programı çalıştırıp herhangi bir Seri Numarası yazarak kayıtlı hale getirmektir ![]() |
![]() |
![]() |
![]() |
Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi |
![]() |
![]() |
#8 |
Şengül Şirin
![]() |
![]() Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi1 ![]() Program koruma tiplerinden bir tanesi de, programın bazı fonksiyonlarının kısıtlanmasına dayanır ![]() ![]() ![]() 2 ![]() ![]() 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 ![]() ![]() 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 ![]() ![]() |
![]() |
![]() |
![]() |
Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi |
![]() |
![]() |
#9 |
Şengül Şirin
![]() |
![]() Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi2 ![]() ![]() Programın kırılımı, sekiz aşamada gerçekleşmiştir ![]() 2 ![]() ![]() ![]() İlk olarak yapılacak iş, help dosyasında register kısmını okumaktır ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 2 ![]() ![]() ![]() 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 ![]() ![]() ![]() Enter tuşuna basılmadan önce Ctrl+D ile Soft-ICE 'a geçip breakpoint konulmalıdır ![]() ![]() 2 ![]() ![]() ![]() 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 ![]() |
![]() |
![]() |
![]() |
Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi |
![]() |
![]() |
#10 |
Şengül Şirin
![]() |
![]() Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi2 ![]() ![]() ![]() 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 ![]() ![]() ![]() ![]() USER32!GetWindowTextA BFF51804 B1B2 MOV CL,B2 BFF51806 55 PUSH EBP 2 ![]() ![]() ![]() Burada iken bc 0 ile koyulan breakpoint temizlenir ![]() ![]() ![]() ![]() ![]() * Reference To: USER32 ![]() :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 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 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 :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 |
![]() |
![]() |
![]() |
Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi |
![]() |
![]() |
#11 |
Şengül Şirin
![]() |
![]() Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesiBu noktada yani xx:00424753 de iken d edi+dd yazılırsa data penceresinde EC 25 A3 00 görülür ![]() ![]() ![]() ![]() 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 Possible Reference to String Resource ID=07076: "Thank you! Your copy of Teleport Pro is now registered", 2 ![]() ![]() ![]() 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 işlemlerin gerçekleştirilmesi için Soft-ICE konusunda bilgi sahibi olmak gerekmektedir ![]() |
![]() |
![]() |
![]() |
Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi |
![]() |
![]() |
#12 |
Şengül Şirin
![]() |
![]() Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi2 ![]() ![]() ![]() Programın serial’ının nasıl hesaplandığını görmek için 00424789 deki call a F8 ile girilebilir ![]() ![]() ![]() ![]() 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: 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 |
![]() |
![]() |
![]() |
Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi |
![]() |
![]() |
#13 |
Şengül Şirin
![]() |
![]() Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi3 ![]() 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 ![]() ![]() ![]() 3 ![]() ![]() Herhangi bir program çalıştırıldığında, bir seri fonksiyon, prosedür ve açıklamalardan geçer ![]() ![]() ![]() 1 ![]() ![]() ![]() 2 ![]() ![]() ![]() 3 ![]() ![]() ![]() 4 ![]() ![]() ![]() 5 ![]() ![]() ![]() 6 ![]() ![]() ![]() 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) 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) |
![]() |
![]() |
![]() |
Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi |
![]() |
![]() |
#14 |
Şengül Şirin
![]() |
![]() Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesiYukarıdaki kod incelenecek olursa, programın çalışma şekli JL emrinden önceki ax ve bx değerlerine dayanmaktadır ![]() ![]() 3 ![]() ![]() ![]() Yukarıdaki kodu kullanarak ortaya 2 farklı program yolu çıkartılabilir ![]() 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 ) 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 ![]() ![]() ![]() ![]() 3 ![]() ![]() ![]() - Soft-ICE (Symbol Loader ı ile birlikte) - Bir Hex Editörü ![]() - Bir Text Editörü ![]() (Disassembler’a ihtiyaç duyulmamaktadır ![]() 3 ![]() ![]() ![]() Önce, Soft-ICE’la birlikte install edilmiş olan symbol loader yüklenir ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() FFFF INVALID FFFF INVALID FFFF INVALID FFFF INVALID FFFF INVALID Bu bir hata değildir ![]() ![]() ![]() |
![]() |
![]() |
![]() |
Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi |
![]() |
![]() |
#15 |
Şengül Şirin
![]() |
![]() Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi3 ![]() ![]() ![]() ![]() ![]() Soft-ICE'ta "wc" yazılır ![]() ![]() ![]() ![]() ![]() 3 ![]() ![]() ![]() ![]() ![]() GetSystemTime (O anki tarih ve saati göstermek için kullanılan birçok api komutundan birisidir ![]() ![]() ![]() ![]() ![]() ![]() ![]() 3 ![]() ![]() ![]() ![]() ![]() 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 ![]() ![]() ![]() ![]() ![]() ![]() 3 ![]() ![]() ![]() ![]() ![]() Şimdi 'GetSystemTime' fonksiyonunun başlangıcında bulunuluyor ![]() ![]() ('GetSystemTime' fonksiyonu Windows \ System dizininde bulunan Kernel32 ![]() ![]() ![]() ![]() ![]() 3 ![]() ![]() ![]() ![]() ![]() Bu noktada yapılan herşeyin kaydedilmesi gerekmektedir ![]() ![]() ![]() ![]() 3 ![]() ![]() ![]() ![]() ![]() Nag ekranı çıktığında, ilk log dosyasını kaydetmenin zamanı gelmiştir ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Bu, ilk “ Call Flow ” dosyasıdır ![]() |
![]() |
![]() |
|