07-01-2010
|
#16
|
Şengül Şirin
|
Cevap : Program Kırma Yöntemlerinin Eğitim Amaçlı İncelenmesi
3 1 3 7 Tarihi ileriye alıp tüm işlemlerin tekrarlanması
Şimdi yapılması gereken 2 bir call flow logu hazırlamaktır, ancak bu sefer sistemin tarihi ileriye alınmalıdır ki, "Deneme Süreniz Sona Erdi " mesajı görülebilsin Bu, programımızın 'GetSystemTime' fonksiyonundan sonra fakat Nag ekranı çıkmadan önce farklı bir yol izlemesine neden olacaktır
3 1 3 8 İki Log dosyasının karşılaştırılması
Tüm adımlar tekrarlandıktan ve 2 log dosyası (örn:asa2 txt) kaydedildikten sonra iki log dosyasını karşılaştırmak gerekir Burada iyi korunulduğu söylenen bir Microsoft programını kullanarak ortaya çıkan 2 tane örnek log dosyası üzerinde açıklama yapılacaktır
3 1 3 9 İki log dosyasının farklılaştığı ilk noktanın bulunması
Dikkat edilirse her iki log dosyası da 015F:3000ADC1 adresine kadar aynıdır İlk dosyada, bu adresteki komut atlama yapmıyor, fakat ikinci dosyada aynı komut atlamayı yaptırıyor Bu, o noktadaki EAX in değerinin sistem zamanına bağlı olarak aldığı değişiklikten kaynaklanıyor Aşağıdaki kod satırları incelenmelidir:
LEA EAX,[ESI-01] Bu komut, ESI-01’deki byte’a bakıp değeri EAX’e koyuyor
CMP EAX,05 Bu komut, EAX’teki değerin 5’e eşit olup olmadığına bakıyor
JA 3000AE00 Eğer değer 5'ten büyükse 300AE00 adresine atla komutu
3 1 3 10 Dosyada değişiklikler yapılması
JA komutunun atlama yapmaması için dosya değiştirilmelidir Bu bir çok yolla yapılabilir:
Basit ve ucuz olan yol; 015F:3000ADC1 adresindeki `77 3D` değerlerini `90 90` olarak değiştirerek "JA 3000AE00" komutunu nop lamaktır (No Operation) Bu yol çoğu zaman işe yarasa da, doğru yol 3 byte uzunluğunda olan 'LEA EAX,[ESI-01]', yine 3 byte uzunluğunda olan 'CMP EAX,05' ve 2 byte uzunluğunda olan `JA` (3 asm kodu için toplam 8 byte etti) komutlarını; 5 byte uzunluğundaki 'MOV EAX,00000005' ve birer byte uzunluklarındaki 3 `NOP` komutuyla değiştirmek olacaktır Bu, EAX kaydının herzaman doğru değere sahip olmasını ve aynı sayıda byte'ın değiştirilmiş olmasınısağlayacaktır
3 1 3 11 Programı yamalamak (Patching olayı)
Artık yapılması gereken, programı istenilen bir Hex editörüne yükleyerek log dosyasında LEA, CMP ve JA komutları için bulunan byte gurubunu arayıp yamamak olacaktır
Bu örnek için;
'8D46FF83F805773D' yi 'B805000000909090' ile değiştirir
B805000000 = MOV EAX,05
90 = NOP
"Call Flow Metodu" olarak anılan bu cracking yönteminin, 2 ayrı yol izlenen bir çok olayda da kullanılabilme imkanı vardır
Örnek :
- CRC rutinlerini kırmak için (Program modifiye edilmiş/edilmemiş) ;
- Dongle korumasının (Dongle plugged in/not plugged in) kaldırılması ;
- Üç deneme ve password soru alanının dışındasın (Sizin bir fonksiyonu sadece belli bir sayıda kullanabilmenizi sağlayan programlar) şeklindeki kısıtlamaların kaldırılması için kullanılır
__________________
Arkadaşlar, efendiler ve ey millet, iyi biliniz ki, Türkiye Cumhuriyeti şeyhler, dervişler, müritler, meczuplar memleketi olamaz En doğru, en hakiki tarikat, medeniyet tarikatıdır
|
|
|
|