[Reverse-Engineering]CrâckMe çözümü ve tersine çevirme tekniklerini atlama

XSamurai

Berserker
Uzman Üye
Katılım
11 May 2024
Mesajlar
560
Beğeniler
127
=================================================== === =======

Lütfen konuya yorum yapmadan önce aşşagıdaki metni okuyun.

Bunun, makalemin başka bir forumdan yeniden yüklenmesi olduğunu hemen söyleyeceğim, bu nedenle, bu makalede kendiniz için keşfettiğiniz bilgilerin alakasız olmaktan öteye gitme olasılığı çok yüksektir. (İstisna: CrâckMe)

Bu daha çok kendinize bir hatırlatmadır, çünkü...işinize yarayabilicek bilgileri cheatglobal sitesinde toplamak amacım dışında başka bir amacım yoktur polemik vesaire yapmazsanız sevinirim

=================================================== === =======

Merhaba

Uzun zaman önce crackmes.one'da bir çatlakla karşılaştım, şifre karşılaştırması ve yeni başlayanların hata ayıklamasını engelleyecek iki ters önleme tekniği içeren oldukça ilkel bir çatlaktı. Şifre karşılaştırmasının ilkelliğiyle ilgili noktayı unutmayın, sonuçta bu çatlağın yazarı 6 üzerinden 3 (Orta) puan verdi.

Savunmanın analiziyle başlayalım çünkü yukarıda da söylediğim gibi yeni başlayanlar için büyük sıkıntı yaratacaktır. Öncelikle size hangi hata ayıklama önleme işlevlerini kullandığını anlatacağım.


IsDebuggerPresent - PEB yapısını okuyan bir BOOL işlevi, Crâck'te sürekli olarak doğru olup olmadığını kontrol eden sonsuz bir döngüde durur.

CreateToolhelp32Snapshot -Belirtilen işlemlerin yanı sıra bu işlemler tarafından kullanılan yığınların, modüllerin ve iş parçacıklarının anlık görüntüsünü alır.

Process32Next - Sistem anlık görüntüsüne kaydedilen bir sonraki işlem hakkındaki bilgileri alır.

Process32First - Sistem anlık görüntüsünde bulunan ilk işlem hakkındaki bilgileri alır.


Zaten anlayabileceğiniz gibi program, sonsuz bir döngüde çalışan süreçlerin varlığını kontrol eder.
Şu süreçleri arıyor:



Interium yükleyici ayrıca bu işlevler aracılığıyla çalışan işlemleri de kontrol eder =)


Bu hileleri aşmaya başlayalım. IsDebuggerPresent aptalca 0x1 (doğru) için CMP aracılığıyla kontrol yaptığından, kontrolü 0x55 (upd: hiçbir şey sizi tüm bunları yapmaktan alıkoyamaz veya mov eax, 0x1; koy)
gibi başka herhangi bir sayıyla (1 ve 0 hariç) değiştirebilirsiniz.
Fonksiyonun başlangıcına geri dönelim, ancak yazarken bunun komik bir şey olduğunu düşündüm ve bu şekilde yaptım :D)



İlk numara atlandı. Devam edelim.

Burada aynı işlem adı kontrolü zaten yapılıyor. İlk bakışta buradaki atlamaları yamalamak çok kanamalı olacak gibi görünüyor, çünkü çok fazla atlama var =)
Aslında burada fonksiyonun başlangıcında PUSH EBP'yi RET'e yeniden yazmak yeterli, böylece tüm kontrolleri kestik. tek talimatla işlem adları.


Şimdi fonksiyon şuna benziyor:
Kod:
C++:
void CheckProcessName()
{
   return;
 
   // Original code
}



Ve böylece hata ayıklayıcıya karşı iki hileyi atladık. Sonra bir şifremiz var, yine de süpürgeden daha kolay. Üçüncü seviye çatlaklar için bu oldukça ciddi bir sorundur ve şifreyi bulmayı çok kolaylaştırır.

Kayıttan gelen değerin ve belirli bir değişkenin karşılaştırıldığı talimata bir kesme noktası koymanız gerekir, kesme noktasına geçtikten sonra şifrenin kendisi görüntülenecektir.

Şifre: 0111011101111000011000110111000001110111011100100110010101111000010011000101100001101000011010110111010101110000100110 0
FINISH
 
Yabancılardan mi aldın konuyu
=================================================== === =======

Lütfen konuya yorum yapmadan önce aşşagıdaki metni okuyun.

Bunun, makalemin başka bir forumdan yeniden yüklenmesi olduğunu hemen söyleyeceğim, bu nedenle, bu makalede kendiniz için keşfettiğiniz bilgilerin alakasız olmaktan öteye gitme olasılığı çok yüksektir. (İstisna: CrâckMe)

Bu daha çok kendinize bir hatırlatmadır, çünkü... Makaleleri yayınladığım forumun yakında kapanabileceğine inanmak için nedenler var, tüm materyalimi kaybetmemek için onu buraya yeniden yüklemeye karar verdim.

=================================================== === =======

Merhaba

Uzun zaman önce crackmes.one'da bir çatlakla karşılaştım, şifre karşılaştırması ve yeni başlayanların hata ayıklamasını engelleyecek iki ters önleme tekniği içeren oldukça ilkel bir çatlaktı. Şifre karşılaştırmasının ilkelliğiyle ilgili noktayı unutmayın, sonuçta bu çatlağın yazarı 6 üzerinden 3 (Orta) puan verdi.

Savunmanın analiziyle başlayalım çünkü yukarıda da söylediğim gibi yeni başlayanlar için büyük sıkıntı yaratacaktır. Öncelikle size hangi hata ayıklama önleme işlevlerini kullandığını anlatacağım.


IsDebuggerPresent - PEB yapısını okuyan bir BOOL işlevi, Crâck'te sürekli olarak doğru olup olmadığını kontrol eden sonsuz bir döngüde durur.

CreateToolhelp32Snapshot -Belirtilen işlemlerin yanı sıra bu işlemler tarafından kullanılan yığınların, modüllerin ve iş parçacıklarının anlık görüntüsünü alır.

Process32Next - Sistem anlık görüntüsüne kaydedilen bir sonraki işlem hakkındaki bilgileri alır.

Process32First - Sistem anlık görüntüsünde bulunan ilk işlem hakkındaki bilgileri alır.


Zaten anlayabileceğiniz gibi program, sonsuz bir döngüde çalışan süreçlerin varlığını kontrol eder.
Şu süreçleri arıyor:



Interium yükleyici ayrıca bu işlevler aracılığıyla çalışan işlemleri de kontrol eder =)


Bu hileleri aşmaya başlayalım. IsDebuggerPresent aptalca 0x1 (doğru) için CMP aracılığıyla kontrol yaptığından, kontrolü 0x55 (upd: hiçbir şey sizi tüm bunları yapmaktan alıkoyamaz veya mov eax, 0x1; koy)
gibi başka herhangi bir sayıyla (1 ve 0 hariç) değiştirebilirsiniz.
Fonksiyonun başlangıcına geri dönelim, ancak yazarken bunun komik bir şey olduğunu düşündüm ve bu şekilde yaptım :D)



İlk numara atlandı. Devam edelim.

Burada aynı işlem adı kontrolü zaten yapılıyor. İlk bakışta buradaki atlamaları yamalamak çok kanamalı olacak gibi görünüyor, çünkü çok fazla atlama var =)
Aslında burada fonksiyonun başlangıcında PUSH EBP'yi RET'e yeniden yazmak yeterli, böylece tüm kontrolleri kestik. tek talimatla işlem adları.


Şimdi fonksiyon şuna benziyor:
Kod:
C++:
void CheckProcessName()
{
   return;
 
   // Original code
}



Ve böylece hata ayıklayıcıya karşı iki hileyi atladık. Sonra bir şifremiz var, yine de süpürgeden daha kolay. Üçüncü seviye çatlaklar için bu oldukça ciddi bir sorundur ve şifreyi bulmayı çok kolaylaştırır.

Kayıttan gelen değerin ve belirli bir değişkenin karşılaştırıldığı talimata bir kesme noktası koymanız gerekir, kesme noktasına geçtikten sonra şifrenin kendisi görüntülenecektir.

Şifre: 0111011101111000011000110111000001110111011100100110010101111000010011000101100001101000011010110111010101110000100110 0
FINISH
Kanka edit:yeni görmüşüm ilk yazıyı kb
 

  Şuanda konuyu görüntüleyen kullanıcılar


Üst Alt