Yazılımı koruma

Başlatan bunalmis, 21 Aralık 2009, 02:59:31

z

Elektronik bir kart imalatı yapacağım. Bu kart PC ye Usb üzerinden bağlı. Kartın kullanılabilmesi için windows üzerinde koşan yazılımı da kart ile birlikte vereceğim.

İlerleyen dönemlerde çok gelişkin farklı yazılımlar geliştireceğim.  Kartıma sahip kullanıcılar yeni çıkartacağım yazılımları satın alıp kullanabilecekler.

Fakat kart sahipleri birbirlerinden kopya yazılım aldıklarında çalışmasın istiyorum.

Alacağım önlemlerle ilgili rutinleri şimdiden kart üzerindeki MCU  içine gömmem gerekiyor.

Sözkonusu senaryoya göre yazılımlarımı nasıl korumalı hale getirebilirim?

Her bir karta seri numarası gömebilirim ancak PC yazılımındaki  koruma basit bir seri no karşılaştırmasının çok ötesinde olmalı.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

lojikmemo1

Alıntı yapılan: "bunalmis"Elektronik bir kart imalatı yapacağım. Bu kart PC ye Usb üzerinden bağlı. Kartın kullanılabilmesi için windows üzerinde koşan yazılımı da kart ile birlikte vereceğim.

İlerleyen dönemlerde çok gelişkin farklı yazılımlar geliştireceğim.  Kartıma sahip kullanıcılar yeni çıkartacağım yazılımları satın alıp kullanabilecekler.

Fakat kart sahipleri birbirlerinden kopya yazılım aldıklarında çalışmasın istiyorum.

Alacağım önlemlerle ilgili rutinleri şimdiden kart üzerindeki MCU  içine gömmem gerekiyor.

Sözkonusu senaryoya göre yazılımlarımı nasıl korumalı hale getirebilirim?

Her bir karta seri numarası gömebilirim ancak PC yazılımındaki  koruma basit bir seri no karşılaştırmasının çok ötesinde olmalı.

Bu projenin ne yapacağı ile ilgili verirsen fikir sahibi oluruz daha önce ve bu tip korumalar yapmıştım özelliklr inernet tabanlı olması güvenliği kale kadar sağlam yapmakta vereceğin bilgiler ışığında bir sistem geliştiririz.
İnsanlara Akılları Ölçüsünde Söz Söyleyiniz.

ErsinErce

Şu şekilde bir koruma önleminin işinize yaracağını düşünüyorum.

Verilen serial ile yazılım koruma altına alınır.
Bu yazılım kartla iletişime geçtiğinde serial ile program versiyonun kodlanmış bir şekli cihaza gönderilir cihaz ilk kez iletişim kuruyorsa ve serial çözülüp onay alıyorsa bu serial cihazda EEPROM ya da benzeri bir yere sürekli kalacak şekilde kayıt edilir. Eğer bir güncelleme varsa bu versiyonun ve yeni serial sayesinde önceki versiyon seri numarasına ait yazılım mı diye kontrol edilir onay alırsa yeni serial olarak kayıt edilir. Cihaz o serial ve ya güncellemeleri harici çalışmaz.

Açıklarken biraz karışık gibi oldu ama şöyle anlatıyım bide
serial=1234 versiyon=1
serial=2468 versiyon=2
gibi basit bir mantık ve cihazlarda o serial harici çalışmazlar

Kopya yazılımı çalıştırmaları için ya yeni cihaz almak zorundalar, ya da kopyaladıkları yerdeki cihazı =)

Güncelleme ücreti de bir cihaz fiyatından ucuza olursa her halukarda size dönmek zorunda kalırlar =)

sekoli

Selamlar,

PC tarafına hazırlayacağınız yazılıma her ne koruma koyarsanız koyun, eğer ürününüz çok satılan ve aranan bir ürün haline gelirse ve yazılım kırma işlerine bakan insanların eline geçerse mutlaka kırarlar.

O yüzden, windows ortamında yazılım hazırlarken amaç, hep bu adamların işini olduğunca zorlaştırmaktan ibarettir.

Bu işlerle uğraşan biri olarak size naçizane tavsiyem, koruma amaçlı donanımsal çalışan profesyonel bir ürün kullanmanızdır. (HASP vb. gibi) Eğer o pahalı gelirse (ki şu aralar fiyatı çok ucuz, ama sizin projenizin fiyatına eklenince belki pahalı geliyor olabilir) yazılım tabanlı profesyonel ürünler de var.
Eğer o da pahalı gelir derseniz, kendinizin uygulayabileceği bir iki yöntemden bahsedebilirim.

İyi çalışmalar.

z

Lojikmemo1

Koruma açısından programın ne olacağının öneminin olmaması gerekir. Program hakkında

Programı internetle alakası olmayan makinelerde de çalıştırabilmeliyim.

Sekoli

HASP türü yapıları bilmiyorum. Ancak çıplak bir yazılıma kıyasla yazacağım programın bir donanımla birlikte kullanılıyor olması, güvenlik açısından bir avantaj oluşturuyor.

Koruma yöntemleri için detaylara girebilirmiyiz?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Analyzer

Selam,

Zamanında donanımsal korumalarla haşır neşir olmuş biri olarak, dongle korumayı şöyle izah edebilirim. Bir donanımsal kilit ile yazılım korumalı bir tünel üzerinden sürekli iletişimde bulunur. Pc tarafındaki yazılım ilk olarak donanımsal kilit ile arasında dışarıdan müdahale edilmesi güç bir tünel oluşturur. Ardından yazılım, kilite seed adı verilen veriler gönderir. Bu seed'ler donanım kilidi tarafından işlenir (grow-up) ve tekrar yazılıma gönderilir. Normal veri gönder hesaplasın geri göndersin mantığından farklıdır. Çünkü iletilen seed e karşılık her seferinde farklı bir kod gönderilir. (Emülasyona karşı) Mantık çok kısaca budur. Bir ikinci konu ki, bu aslında donanım korumadan daha önemlidir. Yazılım koruma yöntemi. Ticari satılan kilitler, korunan yazılımı bir envelope içerisine alırlar. Bu envelope, bootloader mantığı ile düşünebilirsiniz. Envelope, korunan yazılımın baş kısmına yerleştirilen bir kod parçası ve asıl programı şifreleyerek gizler. Envelope öncelikle dongle'ı sıkı bir orjinallik testinden geçirir. Eğer orjinal olduğunu düşünüyorsa, programı bellekte veya diskte bir yere açar ve ana yazılım bu sefer seed göndermeye devam eder. Bu ne avantaj sağlar, softice gibi debugger'lar ile kodu trace etmeniz güçleşir. Envelope kısmını görebilirsiniz ancak şifreli programa müdahale pratikte mümkün olmaz. Tabi envelope'u da yaklaşık 4-5 senedir şifreliyorlar, yeni başlayan cracker'lere karşı. Google ile şunları araştırabilirsiniz : Hasp, Sentinel dongle, AsPack, Asprotect (favorimdi), Softice, Exetools, Delphi Decompiler..

Analyzer
Üşeniyorum, öyleyse yarın!

muuzoo

Alıntı yapılan: "sekoli"Selamlar,

PC tarafına hazırlayacağınız yazılıma her ne koruma koyarsanız koyun, eğer ürününüz çok satılan ve aranan bir ürün haline gelirse ve yazılım kırma işlerine bakan insanların eline geçerse mutlaka kırarlar.

O yüzden, windows ortamında yazılım hazırlarken amaç, hep bu adamların işini olduğunca zorlaştırmaktan ibarettir.

Bu işlerle uğraşan biri olarak size naçizane tavsiyem, koruma amaçlı donanımsal çalışan profesyonel bir ürün kullanmanızdır. (HASP vb. gibi) Eğer o pahalı gelirse (ki şu aralar fiyatı çok ucuz, ama sizin projenizin fiyatına eklenince belki pahalı geliyor olabilir) yazılım tabanlı profesyonel ürünler de var.
Eğer o da pahalı gelir derseniz, kendinizin uygulayabileceği bir iki yöntemden bahsedebilirim.

İyi çalışmalar.

Çok iyi bilmemekle beraber, bu tarz dongle korumalarıda kolayca aşılabiliyor. İnternette bulunan 2-3 küçük program ile dongle dump edip, işlemek oldukça kolay.
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

wsxwsx

dongle korumaları çeşit çeşit. bazısı var ki usb bellek gibi. sizin programınız da onun içinde yüklü. BUnların kırılabildiğini duymadım.

z

cynetron nin önerisinin biraz daha geliştirilmiş hali.

Anahtari olan kapıyı açar. Anahtarı olmayan tek tek anahtarları dener. Her bir anahtar denemesi belli bir süreyi gerektirir ve anahtar sayısı çok fazladır.

Bunun gibi bir yapı için ne diyebiliriz?

Yazılım içine kartın kimlik numarasını gömeceğim. Kartlar ve kart sahibine gönderilen yazılımlar aynı kimlik numarasını içerecekler. Fakat farklı kartlar ve yazılımlar farklı numaralara sahip olacaklar.

Her uygulama programı için kimlik numaraları farklı olacak. Dolayısı ile kart içine gömülü çok sayıda kimlik no olacak.

Yazılım kartla iletişim kurarken verilerle birlikte kimlik noyu da gönderir. Kart, kendisine gelen kimlik no ile eşleşiyorsa kendisine verilen görevi başarıyla yerine getirir.

Eğer eşleşmiyorsa, görevi random olarak bazen doğru bazen de yanlış yerine getirir.

Bu durumda kullanıcının yazılım içine gömülmüş kimlik noyu tek tek değiştirerek olası tüm durumları sınaması gerekecektir.

Burada hackerin işini zorlaştıran, kartın verilen görevi nezaman doğru ne zaman yanlış yaptığını tek seferde kesin kez bilemeyişi ve kimlik numarasının bit uzunluğunun uzun yani denenmesi gereken kombinasyon sayısının çok fazla oluşudur.

Bu sınama işlemi kart tarafından kolayca anlaşılabilir. Kendisine gelen kimlik no sabit kalmayıp her defasında değişiyorsa zaten hackerla karşı karşıya kaldığını da bilecek demektir.

Bu durumda hackerın her defasında kartı resetleyip PC yazılımını tekrar başlatması gerekir ve yazılımın kartla linki kurması saniyeler mertebesinde uzundur.

Bu yapı çok basit fakat etkili siz ne dersiniz?

Sistemin dezavantajları

Kullanıcıları fişlemek gerekiyor. Yani hangi kullanıcıya hangi kart gönderildi bilgisini saklamak.

Birde o kişiye programı yeniden derlemek gerekiyor.

Basit bir HTML sayfaya koyayım da programı kendi indirsin diyemiyeceğim. İllaki mail ile yollamam yada internette o kişiye özel link vereceğim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

sekoli

Alıntı yapılan: "bunalmis"Lojikmemo1

Koruma açısından programın ne olacağının öneminin olmaması gerekir. Program hakkında

Programı internetle alakası olmayan makinelerde de çalıştırabilmeliyim.

Sekoli

HASP türü yapıları bilmiyorum. Ancak çıplak bir yazılıma kıyasla yazacağım programın bir donanımla birlikte kullanılıyor olması, güvenlik açısından bir avantaj oluşturuyor.

Koruma yöntemleri için detaylara girebilirmiyiz?

Tekrar selamlar,

Analyzer arkadaşımız gayet güzel açıklamış.
Fakat sizinde bahsettiğiniz gibi, yazılımınızın sizin ürettiğiniz bir donanımla kullanılacak olmasından dolayı bir avantajınız var. Belki bu avantajı kullanarak kendi donanımsal kilit mantığınızı oluşturabilirsiniz. Bunun içinde Analyzer 'ın bahsettiği keywordleri araştırarak bu konudaki temel yöntemleri öğrenebilirsiniz. Cracker'ların nasıl çalıştığını anlayabilirseniz, onlara karşı bir yöntem geliştirmek daha kolay oluyor.

Kendi kilit mantığınızı oluşturacağınızı varsayarsak şu konu başlıklarına dikkat etmek gerekecektir diye düşünüyorum:
* Kodun "asıl işi yapan yerinde" (sadece programın başlangıcında değil) rastgele olarak donanımınızı kontrol edin. (bu rastgelelik örneğin zamana göre olabilir)
* Kodun içerisine fake stringler ve fonksiyonlar ekleyin (örn. CheckDongle gibi bir fonksiyon ismi) ama asıl kontrol işini alakasız isimli fonksiyonda yapın. Asla kontrolü çağrıştıran değişken adı ayda stringler kullanmayın  (örn. Win32ListView gibi)
* Çok bilinen debuggerlar için kontrol koyabilirsiniz (Win32dasm, softice gibi) Bu tip debuggerlar kodunuzu debug etmek için çalıştırmak zorundadırlar. Siz programınızın bir yerlerinde bu debuggerların çalışıp çalışmadığını kontrol edebilirsiniz.
* Yazılımınız crackli olduğunu anlarsa hemen sonlanmasın, bazen normal çalışsın, bazende saçma hatalar versin. Bu crackcilerin işini zorlaştırır.
* Cihazınızla yapacağınız haberleşmeyi mümkünse şifreleyin
* Koruma ile ilgili kodların bir kısmını bir DLL in içine koyun. Programın rastgele yerlerinde bu DLL in değişmediğini kontrol edin.
* Yazılımınız bittiğinde fazla yaygın olmayan bir packer ile sıkıştırın. Tecrübesiz crackerların bir kısmını elemiş olursunuz.

Şu anda aklıma gelenler bunlar. Sizinde araştırmanız sonucunda daha başka teknikler olduğunu da göreceksiniz. Şimdiden kolay gelsin.  :D

Alıntı YapÇok iyi bilmemekle beraber, bu tarz dongle korumalarıda kolayca aşılabiliyor. İnternette bulunan 2-3 küçük program ile dongle dump edip, işlemek oldukça kolay.

@muuzoo, HASP gibi çok bilinen markalar için emülatörler olduğunu duymuştum. Fakat Aladdin dışında bir çok marka ve model var. Bunlar HASP kadar yaygın olmadığından emülatörleri de yok. Belki böyle bir ürün de kullanılabilir.

sekoli

Alıntı yapılan: "bunalmis"Anahtari olan kapıyı açar. Anahtarı olmayan tek tek anahtarları dener. Her bir anahtar denemesi belli bir süreyi gerektirir ve anahtar sayısı çok fazladır.

Bunun gibi bir yapı için ne diyebiliriz?

Yazılım içine kartın kimlik numarasını gömeceğim. Kartlar ve kart sahibine gönderilen yazılımlar aynı kimlik numarasını içerecekler. Fakat farklı kartlar ve yazılımlar farklı numaralara sahip olacaklar.

Her uygulama programı için kimlik numaraları farklı olacak. Dolayısı ile kart içine gömülü çok sayıda kimlik no olacak.

Yazılım kartla iletişim kurarken verilerle birlikte kimlik noyu da gönderir. Kart, kendisine gelen kimlik no ile eşleşiyorsa kendisine verilen görevi başarıyla yerine getirir.

Eğer eşleşmiyorsa, görevi random olarak bazen doğru bazen de yanlış yerine getirir.

Bu durumda kullanıcının yazılım içine gömülmüş kimlik noyu tek tek değiştirerek olası tüm durumları sınaması gerekecektir.

Burada hackerin işini zorlaştıran, kartın verilen görevi nezaman doğru ne zaman yanlış yaptığını tek seferde kesin kez bilemeyişi ve kimlik numarasının bit uzunluğunun uzun yani denenmesi gereken kombinasyon sayısının çok fazla oluşudur.

Bu sınama işlemi kart tarafından kolayca anlaşılabilir. Kendisine gelen kimlik no sabit kalmayıp her defasında değişiyorsa zaten hackerla karşı karşıya kaldığını da bilecek demektir.

Bu durumda hackerın her defasında kartı resetleyip PC yazılımını tekrar başlatması gerekir ve yazılımın kartla linki kurması saniyeler mertebesinde uzundur.

Bu yapı çok basit fakat etkili siz ne dersiniz?

Sistemin dezavantajları

Kullanıcıları fişlemek gerekiyor. Yani hangi kullanıcıya hangi kart gönderildi bilgisini saklamak.

Birde o kişiye programı yeniden derlemek gerekiyor.

Basit bir HTML sayfaya koyayım da programı kendi indirsin diyemiyeceğim. İllaki mail ile yollamam yada internette o kişiye özel link vereceğim.

Maalesef crackerlar için brute force herhalde en son çaredir. Kimse uğraşmaz. Onun yerine mantık; sizin kodunuzdaki kontrol yerini bulup oraya bir jump atmaktır. Bu yüzden açıkcası yönteminizin etkin olduğunu düşümüyorum.

azimli

üretilen her işlemci için ayrı ayrı o işlemcinin markasına ve serisine göre ID işlemci üretim numarası verildiğini bir ara duymuştum.Ve aynı serideki hiçbir mikro işlemcinin bu üretim seri numarası birbirinin aynısı olmazmış.

Böyle bir şey varmı acaba?

Bir işlemcinin üretiminden gelen sabit bir seri numarası varmı?

Nasıl tespit edilir?

Böyle bir numara varsa bu iş için değerlendirlmesi mümkünmüdür?

Böyle bir numara yoksa işlemcinin flash belleği programlanırken buraya böyle bir numara gömülebilir diye düşünüyorum günümüzdeki işlemciler kullanımları sırasında bile flash belleğine veri yazıp silip okuyabiliyor.

Şartları uydurulduğunda Flash belleğini bile komple silebiliyor.

z

Alıntı YapMaalesef crackerlar için brute force herhalde en son çaredir. Kimse uğraşmaz. Onun yerine mantık; sizin kodunuzdaki kontrol yerini bulup oraya bir jump atmaktır. Bu yüzden açıkcası yönteminizin etkin olduğunu düşünmüyorum.

Fakat Brute Force yapmaya mecbur. Önerime dikkat ederseniz kart, pc ye ben doğru kartım yada yanlış kartım one göre  doğru çalış yada yanlış çalış demiyor. Dolayısı ile PC yazılımında dallanma noktası yok.

Anahtar doğruysa kart içindeki MCU doğru çalışıp çalışmayacağına kendi karar veriyor ve PC deki yazılım karşısındaki kartın kendiyle uyuşup uyuşmadığından hiç haberi olmuyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Çalışan bir program, kendi kendinin checksum değerini hesaplayabilirmi?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

teknikelektronikci

bunlamiş hocam yanlış anlamayında siz ve z hocam aynı yerdemi çalışıyorsunuz yoksa aynı kişilermisniz :) merakımdan soruorum yanlış anlamayın
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!