"E-cafe v2.10" |
|
|
|
|
|
Araçlar:
|
|
|
Bu program intercafeler için yapılmış bir program.Kullanışlı bir programa benziyor.Türk shareware programı internette yok gibi birşey.Bu yazıda paketlenmiş exenin nasıl patch edileceğini, zor gibi görünen bir korumamın nasıl kırılacağını ve keygenin nasıl yazılacağını görecez.
|
|
Bu programı renaTgaD söylemişti.Exe paketlenmiş olduğu için kendisi memory patch yazmış.Paketlenmiş exeler şöyle çalışıyor.Exenin başlangıcında küçük bir kod kısmı var bu paketlenmiş exenin nasıl açılacağını belirtiyor.Bu kısım paketlenmiş exeyi memory 'e açıyor ve program memmory den çalıştırılıyor.Bu yüzden direkt olarak patch etmek olanaksız.Programın koruması Harddisk numarasına göre serial olduğundan bir serial bulup dağıtmanız da imkansız o yüzden iki seçenek var ya patch yada keygen biz ikisini de yapıcaz.İlk başta patch kısmına geliyoruz.
İlk başta nereleri değiştireceğimizi bulalım.E-cafe programın açıyoruz ve kayıt ekrarnına gidiyoruz.Anahtar no kısmına sallama birşeyler yazıyoruz.SoftICE 'a geçip bpx hmemcpy ile breakpointi koyuyoruz.Tamam tuşuna tıklıyoruz.Birden SoftICE'ın içine geleceksiniz.Şu an kernelim içersindeyiz o yüzden alt kısımda ecafe yazıncaya kadar F12 tuşuna basıyoruz.Bir kaç F12 den sonra şöyle birşey göreceksiniz.
004DC514 FF75F4 push dword [ebp-0c] 004DC517 68F8C74D00 push dword 004DC7F8 004DC51C 8D55F0 lea edx,[ebp-10] 004DC51F 8B830C020000 mov eax,[ebx+020c] 004DC525 E86E52F4FF call 00421798
Birça defa F10 ile kodu takip edin ve neler olup bittiğini anlamaya çalışın.Yani bizim yazdığımız kod nereye kopyalanmış, hata mesajı nerden sonra gözüküyor ...raya kadar iyi.Eğer seriali öğrenmek istiyorsanız 0040D608 satırında eax ve ebx in değerlerine bakın.Serialin nasıl hesaplandığını öğrenmek istiyorsanız devam ediyoruz.Ben 0040D5F4 satırına geldiğimde F8 ile call ın içine girdim.
004DC60C 8D45FC lea eax, dword ptr [ebp-04] 004DC60F BA05000000 mov edx, 00000005 004DC614 E87379F2FF call 00403F8C 004DC619 8B45F8 mov eax, dword ptr [ebp-08];bizim serial 004DC61C 8B55FC mov edx, dword ptr [ebp-04];gerçek serial 004DC61F E8B879F2FF call 00403FDC ;karşılaştır 004DC624 0F85E2000000 jne 004DC70C ;eşit değilse hata mesajı 004DC62A B149 mov cl, 49 004DC62C BA18C84D00 mov edx, 004DC818 ..... 004DC70C B148 mov cl, 48 ;Mesajın tipi 48=error 49=info 004DC70E BA18C84D00 mov edx, 004DC818 ;Hata mesajının başlığı 004DC713 B8DCC84D00 mov eax, 004DC8DC ;Hata mesajı 004DC718 E8AF610000 call 004E28CC ;Mesajı göster
Evet nereyi patch ediceğimizi bulduk.Eğer biz 4DC713 'e hata mesajı yerine bizim seriali gönderirsek program hata mesajı yerine gerçek seriali gösterecektir.Patchimiz yapıldıktan sonra durum şöyle olucak
004DC70C B148 mov cl,49 ;Mesaj tipi info :) 004DC70E BA18C84D00 mov edx,004DC818 ;Hata mesajının başlığı 004DC713 8B45FC mov eax,[ebp-04] ;Gerçek serial 004DC716 90 nop ;Geri kalan yerler için iki tane nop 004DC717 90 nop 004DC718 E8AF610000 call 004E28CC ;Mesajı göster
Nereyi değiştireceğimizi bulduk ama hex editörledirekt olarak o adrese gidip patch yapamıyoruz.Şimdi bir kaç seçeneğimiz var.Bu dosyayı unpack ederiz ve hex editörle değiştiririz.Hafızada açılmasını bekleriz ve hafızada patch ederiz veya daha elit bir şekilde şöyle yapabiliriz.Program kendini hafızaya açtıktan sonra program gerçek entrpoint'e zıplıyor.Biz şöyle yapıcaz.Dosyaya ekleme yapıcaz.Program kendini unpack ettikten sonra programı çalıştırmak yerine bizim patch kısımna zıplıycak.Eğer bunu başaramazsaınız.Aspatch diye bir program var o da aynı işe yarıyor onu deniyebilirsiniz.Memory patch yapmak içinde bir sürü program var.Protools dan çekip inceleyebilirsiniz.Neyse şimdi biz patch'i bırakıp daha temiz ve ağrısız bir çözüme gelelelim.Programın keygen algoritmasını anlamak ve keygen yazma..
Yukarıda ki kodu incelerken hafızada birkaç sayının dolaştığını görmüşsünüzdür.B27U03L88, WD- ....Bu sayıların keygen ile bir lakası olduğu kesin ama naıl bir alaka..Program Delphi 3 ile yazılmış.Evet şimdi size yeni bir programı tanıtma vakti geldi.Bu program Delphi programlar için tam bir katil.Süper bir alet..Bir ara ben Exe2dpr diye bir programın crack'ını ararken adamın birisi bana bunu yollamıştı v0.9b felandı.Bir ara beta testerlığını felan yapmıştım.Şu an v 2.34 ve süper bir hal aldı.
Dede'yi Protools dan indiriyoruz.Bizim porgramımız paketlenmiş olduğu için direkt açamıyoruz.Ya unpack ediceksiniz (Procdump ile yapabilirsiniz) veya Dede'nin süper özelliğini kullanabilirsiniz.Process dumper.İlk başta Ecafe sonra Dede'yi açın,Tools kısmından "Dump Active Process" seçeneğini seçin karşınıza gelen menüden Ecafe'yi seçin.Dump tuşuna tıklayın.Biraz bekledikten sonra artık programı kırmaya hazırız.İşlemin sonunda dump successful mesajını alacaksınız.İlk başta classes info'dan adamın hangi componet ları kullandığına bakalım.Ahm, zart,zurt...HDinfo, Tcryptlib....Neyse burayı geçiyoruz.Forms kısmına bakarak hangi formun nerede oluştuğuna bakabiliriz.EN önemli yere geldik.Procedures..Bu arada programın kullandığı prosedürler var.Sol kısımda ilginç bir prosedür varmı diye bakıyoruz.Kayit diye bir prosedür var ona tıklıyoruz.Burada bir kaç event göreceksiniz, formcreate,form activate....Ben bitbtn1click'e tıkladım.Off o da ne..mükemmel bir kod çözümü karşımıza geliyor.Dede standart delphi kodlarını anlıyabildiği için işimiz çok kolaylaşıyor.Biraz aşağılara doğru inin karşınıza şöye bir kod gelecek
* Possible String Reference to: "B27U03L88E" | 004DC55D BA04C84D00 mov edx, $004DC804 004DC562 E8794FF7FF call 004514E0
Bu B27U03L88E denen şey de nerden geliyor acaba.Keygen ile bir alakası olabilir.Ben 4DC562 deki call'a çift tıkladım.Karşıma şöyle birşey geldi.
00451503 E8C429FBFF call 00403ECC 00451508 83F80C cmp eax, +$0C 0045150B 7E20 jle 0045152D 0045150D 8D4338 lea eax, [ebx+$38] * Reference to: System..LStrClr() | 00451510 E83B27FBFF call 00403C50 * Possible String Reference to: "TCryptLib.Password is too long" ;Aha :) | 00451515 B964154500 mov ecx, $00451564 0045151A B201 mov dl, $01 0045151C A198704000 mov eax, dword ptr [$407098]
Programı yazanlar yine büyük bir hata yapmışlar.Başkasının güvenlik yazılımın kullanmışlar.Hemde shareware olanı.Büyük hata...Şimdi biz biliyoruzki adamlar Tcryptlib diye bir component kullanmışlar.Ayrıca, ben kod içersinde dolaşırken harddisk numaramın da işin içinde olduğunu öğrendim.Bu tcryptlib'in kriptolaması çok dandik, basit iki taraflı bir xor dan ibaret.Herneyse biz tcryptlib nemenem bir şey ilk başta onu öğrenelim.Altavistadan arama yapıyoruz ve tcryptlib'i download ediyoruz.Ben http://ntadm.euro.ru/english.htm adresinde buldum.İçinde kaynak kodu da olduğundan incelemesi çok kolay.Ben gelen demo exeyi de inceleyerek fonsiyonlarını belirledim.Olay kısaca şöyle, bir password,addkey,multkey den oluşan üç varibale ile istediğiniz bir stringi şifreliyorsunuz.İlk başta password sonra addkey daha sonrada multkey geliyor.Yeniden biz Dede'ye dönelim ve kaynak kodumuzu yeniden inceleyelim.
Dedenin daha iyi çalışabilmesi için bu component için bir dsf dosyası hazırlıyalım.Dsf dosyası, bpl dosyalarındaki fonksiyonları belirliyor, dissamble ettiğimizde bize fonksiyonların ismini belirtiyor tıpki W32Dasm da api kodlarını belirttiği gibi.Component'ı install ettikten sonra bpl dosyanız muhtemelen delphi klasörünüzün projects/bpl kısmında olacaktır.Dede yi açıyoruz.Tools kısmından Bpl dumper'ı seçiyoruz.Install ettiğimiz component'ın bplsinin yerini gösteriyoruz.Böylelikle dsf dosyamız hazır hale gelecektir.Eğer sizde Delphi yoksa, hazır dsf dosyasını buradan download edebilirsiniz.Bu dsf dosyasını dede'nin symbol dosyası kısmına eklemeniz lazım.Options kısmında configuration kısmına gidin.Buradadaki symbol kısmına yeni yaptığınız dsf'yi ekleyin.Evet artık dissamble etmeye hazırız.Dede'yi tekrar açıyoruz ve yeniden aynı yere geliyoruz.Bu sefer daha güzel bir kod karşımıza gelicek.
* Possible String Reference to: "B27U03L88E" | 004DC55D BA04C84D00 mov edx, $004DC804 * Reference to: Kbcrypt.TCryptLib.WriteFPassword(System.AnsiString) ;mükemmel ! | 004DC562 E8794FF7FF call 004514E0 004DC567 A1C4F94E00 mov eax, dword ptr [$4EF9C4] 004DC56C 8B00 mov eax, [eax] 004DC56E 8B8064020000 mov eax, [eax+$0264] 004DC574 BA9AAF3F00 mov edx, $003FAF9A ;addkey=4173722 (desimal) 004DC579 E86250F7FF call 004515E0 ;addkey uzunluk kontrolü 004DC57E A1C4F94E00 mov eax, dword ptr [$4EF9C4] 004DC583 8B00 mov eax, [eax] 004DC585 8B8064020000 mov eax, [eax+$0264] 004DC58B BA3EC22300 mov edx, $0023C23E ;multkey=2343486 (desimal) 004DC590 E8EF4FF7FF call 00451584 ;multkey uzunluk kontrolü 004DC595 8D4DFC lea ecx, [ebp-$04] 004DC598 A1C4F94E00 mov eax, dword ptr [$4EF9C4] 004DC59D 8B00 mov eax, [eax] 004DC59F 8B9048030000 mov edx, [eax+$0348] ;şifrelenecek string 004DC5A5 A1C4F94E00 mov eax, dword ptr [$4EF9C4] 004DC5AA 8B00 mov eax, [eax] 004DC5AC 8B8064020000 mov eax, [eax+$0264] * Reference to: Kbcrypt.TCryptLib.EncryptStr(System.AnsiString) ;Evet! | 004DC5B2 E85D54F7FF call 00451A14 ;şifrele 004DC5B7 8D45E8 lea eax, [ebp-$18] 004DC5BA 50 push eax 004DC5BB B904000000 mov ecx, $00000004 ;kopyalanacak 4 karakter 004DC5C0 BA01000000 mov edx, $00000001 ;1. karakterden itibaren 004DC5C5 8B45FC mov eax, [ebp-$04] * Reference to: System..LStrCopy() | 004DC5C8 E8037BF2FF call 004040D0 ;copy it 004DC5CD FF75E8 push dword ptr [ebp-$18] 004DC5D0 68F8C74D00 push $004DC7F8 004DC5D5 8D45E4 lea eax, [ebp-$1C] 004DC5D8 50 push eax 004DC5D9 B904000000 mov ecx, $00000004 ;kopyalanacak 4 karakter 004DC5DE BA09000000 mov edx, $00000009 ;9. karakterden itibaren 004DC5E3 8B45FC mov eax, [ebp-$04] * Reference to: System..LStrCopy() | 004DC5E6 E8E57AF2FF call 004040D0 ;kopyala 004DC5EB FF75E4 push dword ptr [ebp-$1C] 004DC5EE 68F8C74D00 push $004DC7F8 004DC5F3 8D45E0 lea eax, [ebp-$20] 004DC5F6 50 push eax 004DC5F7 B904000000 mov ecx, $00000004 ;kopyalanacak 4 karakter 004DC5FC BA11000000 mov edx, $00000011 ;17. karakterden itibaren(17h=11) 004DC601 8B45FC mov eax, [ebp-$04] * Reference to: System..LStrCopy() | 004DC604 E8C77AF2FF call 004040D0 ;kopyala 004DC609 FF75E0 push dword ptr [ebp-$20] 004DC60C 8D45FC lea eax, [ebp-$04] 004DC60F BA05000000 mov edx, $00000005 * Reference to: System..LStrCatN() | 004DC614 E87379F2FF call 00403F8C ;birbirine ekle 004DC619 8B45F8 mov eax, [ebp-$08] ;bizim serial 004DC61C 8B55FC mov edx, [ebp-$04] ;gerçek serial * Reference to: System..LStrCmp() | 004DC61F E8B879F2FF call 00403FDC ;karşılaştır 004DC624 0F85E2000000 jnz 004DC70C ;hata mesajına zıpla
Evet buradan anlıyoruz ki bizim passwordumuz B27U03L88E.Ben 004DC59F satırında iken d edx yaptığımda memory de WM6231132186 diye bir numaraı gördüm.Bu numara nereden geliyor dye bir incelemem yaptım.Program bu numarayı DeviceIoControl ile elde ediyor.Muhmetemel kafa sektör bilgisi felandır.Demekki bu program bizim harddiskin özelliklerini tcryptlib ile şifreliyor.Mesela şifrelenen değer 2017F93FE82F1A35302B böyle birşey oluyor.Mavi kısımlar bizim serialimiz oluyor. yani 2017-E82F-302B.Olay bu kadar basit bizim yapacağımız şey harddisk numarasını bulmak ve password B27U03L88E, addkey=4173722 ,multkey=2343486 olarak şifrelememiz.Program Hdinfo95 diye bir componet kullanmış.Bende delphi 5 olduğundan bu component'ı kullanamadım.Install componet diyorum hep hdinfo.pas bulnamadı felan diyor.Heheh delphi lamerıyız normal olarak.Neyse eğer delphi 3 varsa sizde belki siz kullanabilirsiniz.
Bizde başka yönden yaklaşırız.Bizde çare tükenmez.Kayıt ekranında referans no diye birşey var.Bu refereans nosunun bizim serialle veya harddisk ile mutlaka bir ilgisi olması lazım yoksa adamlar nerden bilecek bizim harddisk özelliklerini :).Bu referans nosu form ilk açılırken oluşuyor.Dede'ye geri dönüyoruz.Events kısmınnda bu sefer form activate'e tıklıyoruz.Biraz aşağıya indiğimzde şöyle birşey göreceksiniz.
004DC1F6 E8A97AF2FF call 00403CA4 004DC1FB 8B07 mov eax, [edi] 004DC1FD 8B8064020000 mov eax, [eax+$0264] * Possible String Reference to: "I28R08E64M" ;password | 004DC203 BA98C34D00 mov edx, $004DC398 004DC208 E8D352F7FF call 004514E0 ;password boyut kontrolü 004DC20D 8B07 mov eax, [edi] 004DC20F 8B8064020000 mov eax, [eax+$0264] 004DC215 BAEDA62B00 mov edx, $002BA6ED ;addkey=2860781 004DC21A E8C153F7FF call 004515E0 ;addkey boyut kontrolü 004DC21F 8B07 mov eax, [edi] 004DC221 8B8064020000 mov eax, [eax+$0264] 004DC227 BA5C702B00 mov edx, $002B705C ;multkey=2846812 004DC22C E85353F7FF call 00451584 ;addkey boyut kontrolü 004DC231 8D4DFC lea ecx, [ebp-$04] 004DC234 8B07 mov eax, [edi] 004DC236 8B9048030000 mov edx, [eax+$0348] ;şifrelenecek değer 004DC23C 8B07 mov eax, [edi] 004DC23E 8B8064020000 mov eax, [eax+$0264] 004DC244 E8CB57F7FF call 00451A14 ;şifrele
Hehe.Olmaz böyle birşey sayın seyirciler.Eğer 4DC236 satırında iken edx 'in içeriğine bakacak olursanız yine aynı numarayaı göreceksiniz.rogramımız bizim harddisk numaramımızı başka bir password addkey ve multkey ile şifreliyor ve bunu referans kodu olarak kullanıyor.Biz adamlara bu referans numarasını yolladığımızda onlar bu referans kodu deşifre edip bizim harddisk nomuzu buluyorlar sonra başlangıçta verdiğim password addkey ve multkey ile yeniden şifreleyip bize seriali söylüyorlar.Ben delphiden hiç anlamıyorum.Ama yinede biraz uğraşarak keygeni yazmayı başardım.Keygenin çalışması için sizdede Tcryptlib component'ın yüklü olması gereklidir.Boş bir form açın iki tane edit box ve bir tane buton koyun.Serial diye string bir variable ekleyin.Birinci editbox'a referans no yazılacak sonuç ikinci edit boxta gözükecek.Sonra butona şu kodu verin:
procedure TForm1.Button1Click(Sender: TObject); begin Serial:=(Edit1.Text); Serial:=copy(Serial,1,4)+copy(Serial,6,4)+copy(Serial,11,4)+copy(Serial,16,4)+ copy(Serial,21,4)+copy(Serial,26,4); CryptLib1.Addkey:=2860781; CryptLib1.Multkey:=2846812; CryptLib1.Password:='I28R08E64M'; Serial:=CryptLib1.DecryptStr(Serial); CryptLib1.Addkey:=4173722; CryptLib1.Multkey:=2343486; CryptLib1.Password:='B27U03L88E'; Serial:=CryptLib1.EncryptStr(Serial); Edit2.Text:=copy(Serial,1,4)+'-'+copy(Serial,9,4)+'-'+copy(Serial,17,4);
Delphiden anlayan arkadaşlar kodu daha da iyi bir hale getirebilir.Componet'ın içersindeki gereksiz kodları çıkarabilirler.(Lzh, addkey multkey boyut kontrolü.....).Artık gerisi size kalmış.Daha elit olan arkadaşlar Harddisk nosunu elde etmek için DeviceIoControl'u kullanabilirler.Off be amma uzun yazı oldu.Keygenin hazır halini download etmek isterseniz buraya tıklayın
|
|
Bu yazıda yazım yanlışları hatta bilgi hatası olabilir.Eğer bir yanlış bulursanız bana email atın düzeltmeye çalışırım.Bir programı eğer gerçekten kullanıyorsanız, programı satın almayı düşünün.Micro$oft programlarını - bırakın satın almayı - kullanmayı bile düşünmeyin.