Salı, Temmuz 10, 2007

Kırılamayacak Program olurmu ? 3

Serinin 3. ve de sonuncusu olmasını umduğum bu yazı gecikti kusura bakmayın. Aslında yazıyı taslak olarak hazırlamıştım. Fakat bir türlü fırsat bulup düzenleyemedim. Serimizin başlangıç sorusuna dönelim.
Kırılmıyacak program olur mu?
Programı kaynak koduyla dağıttığınızı düşünün Nasıl ki o dili bilen biri gereken yerleri değiştirip Ne şekilde olursa olsun korumayı kolayca kaldırabilir. İşte aynı şekilde Assembly bilen biri için programınızın koduna ulaşabiliyorsa korumayı da kaldırabilir. Yani
Teorik olarak Program çalışıyorsa kırılabilir.

Peki Kırılmasını nasıl zorlaştırabiliriz ?
  • Bir tanımla başlayalım, Programın kırılması ; "Koddaki kontrol kısımlarının devre dışı bırakılması -crack- yada kontrol kıstaslarının programın içinde tespit edilip haricen kullanılmasıyla-keygen- kontrol kısmının atlatılması" demektir. Tanımdan da anlayabileceğiniz gibi korumanın özü koda ulaşılmasını engellemektir.
  • Pek tabi ki bütün kodu didik didik incelemek çok zahmetli iştir o yüzden kodun kritik kısımlarına ulaşılmasını zorlaştırmak yeterli sayılabilir
  • Koda ulaşılmasını engellemenin en kolay ve ucuz yolu packer dediğimiz prograları kullanmaktan geçiyor. Bu programlar sizin programınızı sıkıştırıp bir kendi kendine hafızada açılıp hafızada çalışan bir program haline getirir. Unpacker denen programlarla programlarınızı eski haline çevrilebilsede, Programın kendisini kontrol ettirterek ve packerların en son versiyonlarının kullanımıyla Epey bir insanı programınızla uğraşmasını englleyebilirsiniz.
  • Program kendisini nasıl kontrol edebilir ? Programda değişiklik yapılıp yapılmadığını checksum'la yada CRC benzeri metodla kontrol edin. Eğer değişiklik yapılmışsa uyarı vermeyin programı saçma bir hatayla kırılmasını sağlayın.
  • Programıcı olarak kullanıcıyı yönlendirmek için mesaj vermek zorunda kalırız . mesela "Hatalı Kayıt No !.." gibi Bu da kodun kritik yerlerine ulaşılmasını çoook kolaylaştırır. Peki ne yapıla bilir mesela Hata mesajı vermeyip kullanıcı ister doğru ister yanlış kayıt no girsin programı kapatın. Program yeniden çalıştırıldığında kontrol edip ona göre deneme ya da kayıtlı olarak çalıştırın, Kayıt durumunu da mesela Programın versiyon bilgisinin verildiği hakkında -About- kısmında yazabilirsiniz.
  • Hiç mi mesaj veremeyeceğiz tabii ki hayır ; mesaj verecekseniz mesaj metnini şifreli olarak programın içinde tutun kullanacağınız zaman şifresini açıp kullanın.
  • Sahte kontrol kısımları hazırlayıp, şaşırtmacada yapabilirsiniz
  • Kritik kısımlarda kullandığınız dialog pencerelerini tamamen çalışma anında oluşturmanında büyük faydası olur.
  • Kontrol kısmının da bir timer'ın içinde yapılması debug edilmesini güçleştirir.
  • Birden fazla yerde kontrol edin Kontrol işlemini string karşılaştırma olarak kesinlikle yapmayın.
  • Reverse Engineering için epey gelişmiş programlar var. Bu tür progralarla kodunuza müdaheleyi engellemek için de epey karmaşık metod var. çok aşırıya kaçmamak kaydıyla şu yazıdan feyz alabilirsiniz.
  • Bu yazılardan da faydalanabilirsiniz 1, 2, 3, 4
  • Benim programım kıymetli kardeşim diyorsanız. Programınızın değerine ve de kesenize göre çeşitli ticari çözümler var; bakınız çeşitli Koruyucular -Protector-
  • Daha da olmadı Biraz tuzlu olmakla beraber Kırma işini donanım olarak korumaya yardım eden Dongle seçeneğinizde var

2 yorum:

volkan dedi ki...

harika yazı için teşekkürler BlueKid.

istikbal dedi ki...

Yani uzun lafın kısası demekki neymiş??? Kırılamayacak program olamazmış. Ok