Yazılımı koruma

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

z

Ben sürekli zaman bölümündeyim. Z, ayrık zaman bölümünde. Sonuçta çok farklıyız fakat ikizden de yakınız.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

wsxwsx

hmm. galiba burada nik terbiyecisi var.

Analyzer

Alıntı yapılan: "bunalmis"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.

Selam,

Bu yapı için zayıf diyebiliriz. Sonuçta derlenen program bir debugger ile açılır. Paket içinden kontrol yapan kısımlar, ya apiler ile ya da ilgili fonksiyonlar, breakpoint'ler ile durdurulur. Ardından kontrol gerçekleştiren fonksiyonlar devre dışı bırakılır ya da emule edilir.
Bir önceki mesajda da basitçe izah ettim. Cracker donanımla ilgilenmez, donanım kontrolü yapan programla ilgilenir. Yani aslında bu bir yazılım problemidir. Yoksa istenirse 2^1024 haneli anahtarla çalışılsın. Bir anlam ifade etmez. Brute force çoğu zaman denenmez, ilgilenilmez. Donanım şimdilik kenarda beklemeli, donanımsal kilit nasıl kırılır, onun dökümanları incelenmeli. Mesela Winrar dosyasını nasıl şifreleyip koruyor onu araştırmak lazım.

Analyzer

Not : Ticari donanım kilitleri kolayca emule ediliyor deniyor, Auton programı mevcut. Biri emule etse de programı kullanan CAx piyasası bir rahatlasa :)
Üşeniyorum, öyleyse yarın!

z

Önerdiğim yöntem tam okunmadı diye düşünüyorum.

İki kişiye sattığım iki PC yazılımını da debugger ile açın göreceğiniz tek farklılık key bilgisi olacaktır.

Bu da hackeri brute force yapmaya zorlar.

Eğer key bilgisini kart PC ye gönderiyor ve kontrolu PC yazılımı yapıyor olsaydı haklısınız. Fakat keyi PC karta yolluyor ve kontrol kart tarafında yapılıyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

wsxwsx

kart isterse takla atsın. neticede göndereceği şey "key tamam"  yada" key kaka" bilgisi olacaktır. ya da cihazdan gelen bilgiyi yazılım değerlendirip bu kanaate varacaktır.

işter hacker efendi, yazılımı ikna ediyor ve kararı hemen vermesini sağlıyor. bilmemkaç bitlik şifren algoritman hiç işe yaramıyor. orayı baypas yapıyor.

Benim önerim yazılımın büyük bir kısmının cihazın içinden gelmesidir.

z

İşte burada benim söylemediğim bir cümleden yola çıkıyorsunuz.

Ben başından beri
Alıntı Yapneticede göndereceği şey "key tamam"  yada" key kaka" bilgisi olacaktır. ya da cihazdan gelen bilgiyi yazılım değerlendirip bu kanaate varacaktır.
bunu söy le mi yo rum. Israrla bunu siz söylüyorsunuz.

PC karta al kardeşim bunlar işleyeceğin veriler bu da senin ID numaran diyor.

Kart gelen verileri ve gelen ID yi okuyor.

Eğer ID kendisine ait ise verileri işlenmesi gereken şekilde işliyor.

ID kendine ait değilse, gelen verileri bazen doğru bazen de hatalı işliyor.

Sonuçta PC ye kardeşim Bu ID benimki değil demiyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

sekoli

Alıntı yapılan: "bunalmis"Önerdiğim yöntem tam okunmadı diye düşünüyorum.

İki kişiye sattığım iki PC yazılımını da debugger ile açın göreceğiniz tek farklılık key bilgisi olacaktır.

Bu da hackeri brute force yapmaya zorlar.

Eğer key bilgisini kart PC ye gönderiyor ve kontrolu PC yazılımı yapıyor olsaydı haklısınız. Fakat keyi PC karta yolluyor ve kontrol kart tarafında yapılıyor.

Şimdi tabi siz böyle deyince şunu bilmek gerekiyor. PC deki yazılım ne iş yapacak? Cihaz ne cihazıdır?
Sonuçta eğer cihaz çalışmaya karar verdiğinde cihazla ilgili bir takım işlemlerin yansıması PC de olacaksa, ve kullanıcılarla etkileşim PC kısmında ise Analyzer üstadın da dediği gibi yönteminiz yetersiz kalır. Tabi bu benim görüşüm.

azimli

bunalmis hocam,

bir önceki karetekit kedi resminizi çok beğenmiştim artık onu kullanmayacaksanız lütfen bana verebilirmisiniz?

müsade ederseniz onu ben kullanayım hep bir kedim olsun istemiştim ve onu çok sevmiştim.

onu bana verirseniz marka patentinide almayı düşünüyorum patentçi bir arkadaşa bu konuda iş vereceğim.

z

Kedi sizin olsun. Kediyi daha yavru iken internette bulmuş ve bugüne kadar beslemiştim.

Z yi gerçekten merak ediyorsanız Z yi çok iyi araştırmalısınız. Avatarımdaki eli öpülesice de Z ile alakalı.

Biliyorum bilmece gibi konuşuyorum ama zaten Z büyük bir bilmecedir ve kontrolla ilgilenen herkez Z yi iyi tanımalıdır.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

hasangurlek

Ne yaparsanız yapın mutlak koruma diye birşey sözkonusu değildir. Her güvenlik önlemi tıpkı bir asma kilit gibi olup DOSTA ve İŞİ BİLMEYEN MERAKLILARA KARŞIDIR. Bu kilidin kırılması için gerekli ekipmanla KONTROLLÜ güç uygulanması yeterlidir. Sağlam bir parolayı kırmak her ekipmanı kullanabilen, her imkana sahip biri için yıllar sürebilirken girilen her parolanın programca doğru kabul edilmesini sağlamak assembly bilen biri için en fazla bir kaç saat sürer. Sonuçta yazılımı piyasaya dağıtacaksınız ve kodlarınız herhangi biri için herhangi bir zamanda dis edilmeye hazır bekleyecek ! Hatta dis etmeden bile bir hex editörü ile programınızda bir kaç değer değiştirilerek istenen sonuç elde edilebilecek. Bu aşamada yazılımda fonksiyonlarını çağırdığınız DLL dosyalarının yerlerine başka dosyalar konulabilir, ana programınızın kodları her zaman değiştirilebilir.

PC işletim sistemleri çalışacak her program için bellekte fiziksel adresler ayırır. Koşacak ana kodların dışında program içinde kullanılan her nesnede yeri geldiğinde belleğe yüklenir. Siz istediğiniz kadar bilgiyi, istediğiniz yerde, istediğiniz yöntemlerle (3DES, RC5, Serpent, Twofish vs.) üstüste defalarca şifreleyerek korumaya çalışsanızda, datalarınızı arrayler içinde saklamaya çalışsanızda, programı geliştirdiğiniz derleyicinin (C++, VB, Delphi, *.NET vs.) assembly kod korumasını açsanızda; programınız şifrelenmiş bilgileri kullanma aşamasında ayrılan fiziksel belleğin bir alanında gerçek bilgilere çevirecektir. İşte bu noktada her halükarda güvenlik bitmiştir.

Donanımsal korumalar ise biraz daha zor olmakla birlikte her zaman kırılmaya müsaittir. Data trafiğini takip etmek için tek gereken donanım sürücünüzün bir kopyasının ayrıca çalıştırılmasıdır. İletişimi ister paralel, seri, usb port üzerinden ister PCI slot üzerinden vs. vs. nereden yaparsanız yapın; iletilen dataları kaydetmek, data trafiğine göre programın davranışlarını izlemek çok kısa sürede sonuca ulaşmayı sağlar. Koşacak programınızın işletim sistemindeki start exe si hariç tüm bölümünü veya bazı kısımlarını makine dilinde donanımınıza kaydetseniz ve yeri geldiğinde donanımdan yükleyerek çalıştırsanız bile start.exe nizde yapılacak küçücük bir tadilat ile data takibi ile elde edilmiş bu kodların değiştirilmesini, her defasında kodlar donanımdan okunsa bile okunan bu kodların görmezden gelinip değiştirilmiş kodların başka bir yerden çağrılıp kullanılmasını engelleyemez.

Donanım tarafından bakıldığında ise ben sizin programınızı kırmak istesem ne yaparım ?

Diyelimki PC programınız her 100ms zamanda bir donanımınız ile iletişime geçiyor ve MCU nuz bu iletişimin zamanını ve/veya bu iletişimdeki dataları kullanarak çeşitli doğrulamaları yapıyor. Bu süre aşılırsa veya iletilen datalar yanlış ise çalışmıyor veya yanlış çalışıyor. Donanım sürücüsünü siz yazsanız bile başka bir program tarafından kullanılmasını hiç bir şekilde engelleyemeyeceğinize göre USB iletişimini snopy veya benzeri bir programla takibe alır data trafiğini incelerim. İlk bakışta iletişimin düzenli olarak her 100 ms de yapıldığını ilk 3-5 saniye içinde öğrenirim ve ardından eğer var ise iletilen dataları incelerim. Program çalıştığı süre boyunca sonsuz sayıda data kullanamayacağınıza göre ve transferler mutlak bir döngü içinde gerçekleneceğine göre USB iletişimi için tanımladığınız data uzunluğunda (Örneğin 64 bayt) veya kullandığınız gerçek uzunluktaki datanın tekrarını ararım. Yüzlerce bin defa farklı data kullansanız bile dosya içinde bu tekrar bilgisini bulurum. PC programınızda 100 ms de bir kesme oluşacağına göre açarım hex editörünü kesme girişine bir nop veya return komutu ile kesmenizi devre dışı bırakır, kendi yazdığım ufacık bir program ile sizin sürücünüzü kullanıp her 100 ms de orjinal iletimdeki data formatına uygun iletişimi sağlar, sizin programınızıda kendi programım içinden çağırıp çalıştırırım.

Veya diyelimki PC programınız versiyonunu donanıma bildiriyor ve MCU nuz kendinde kayıtlı no ile karşılaştırıyor, eğer PC versiyonu farklı ise çalışmıyor. Bu bildirimi kod akışı içinde istediğiniz yerlerde istediğiniz sayıda donanıma bildirip kontrol edilmesini sağlayabilirsiniz ama sonuçta kontrol sonrası programın çalışmayı durdurma bilgisi veya yanlış davranışı versiyon numarasının bulunması noktasında bir anahtar teşkil edecek. Donanıma bildirmek üzere versiyon numarasını kullanıcının girmesini bile isteseniz, MCU tarafında bu bilginin MD5 ile geri dönüşsüz şifreleme sonucunun karşılığını bile kontrol etseniz sonuçta bu data donanıma iletiliyor ve bu ham datanın donanıma girişteki son halini yine biliyorum ve data trafiğinde bu bilgiyi bulup yeni yazılım çalışırken donanıma eski yazılımın numarasının bildirilmesinin sağlar, donanımın yeni PC yazılımı ile çalışmasını sağlarım.

Bunlar sadece basit birer örnek.


Bunları size fikir vermesi açısından yazdım ve benim kısıtlı bilgimle ilk aklıma gelenler. İş konunun uzmanı bir profesyonele intikal ettiğinde belki başka yöntemlerde vardır diye düşünüyorum :)

İşin içine PC tarafı girince data yönü ne olursa olsun, kontrol hangi tarafta yapılırsa yapılsınmaalesef güvenlik diye bir şey söz konusu olmuyor. PC yazılımını geliştirdikçe donanım yazılımınıda geliştirmeniz en mantıklı yol olur. Bu sayede eski MCU yazılımı yeni özelliklere sahip olmayacağı için PC yazılımı kırılsa bile MCU yeni özelliklere sahip olmayacaktır. Fakat bu durum yeni PC yazılımını satın alacak müşterilerin donanımınıda güncellemek gerektireceğinden geçici olarak hizmet kesilmesini veya telefon hattı/net üzerinden programlama için ek masrafların doğmasına sebep olacaktır.

Yüksek miktarlarda para harcayan çok büyük firmalar bile hala kodlarının güvenliğini sağlayamıyorlar. Microsoftun işletim sistemlerinden, bilgisayarınızda kurulu programlara kadar bir göz atın. Nette kırılmış halini bulamayacağınız hiç bir program yok. Yaygın kullanılan programların son versiyonları bile yayınlandıktan sonra bir kaç gün içinde kırılmış olarak bulunabiliyorlar. Maalesef her yeni güvenlik önlemi vatandaşın işini 3-5 saat uzatmaktan başka bir işe yaramıyor :)

Yukarıda arkadaşımızın bahsettiği gibi programınızın kırılma riski piyasada tutulması ile doğru orantılı olabileceği gibi işi bilen her hangi bir müşteriniz tarafından zevk için bile kırılabilir.

Konuyla ilgili olarak Türkçe kısa bir makale;

1. bölüm

2. bölüm
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

azimli

hocam resim için teşekkür ederim.

becerebilirsem onu forumda kendi simge alanıma ekleyip marka başvurusunda da bulunacağım.

cnc hereket sistemlerinde x,y,z ekseni olduğunu biliyor ve görüyorum ve z nin burdan geldiğini de z kendisi yanlış değilsem bir ara söylemişti.

biz onuda sizide seviyoruz ve takdir ediyoruz.

az iyiliğinizi görmedik sağ olun var olun.

bu dünyanın diğer  dünyasıda olduğuna inanan biri olarak sizin yardımlarınızla birisi birşeyleri başardıysa ve insanlığa faydalı bir şeyler yapabildiyse bu işlerin diğer tarafa faydası her iki taraf içinde ortak olur düşüncesindeyim

işin simetriği ise,

bir kişi yanlış işlere yönlendirilip yanlış işler öğretiliyorsa o işlerin insanlığa zararı diğer tarafta ortak olur düşüncesindeyim.

wsxwsx

Alıntı yapılan: "hasangurlek"bazı yararlı bilgiler...
Hazır gelmişken Sizden usb konusunda biraz bilgi alabilir miyim?.

Yapacağım cihaz için özel ve güzel bir USb class gerekli.
- Sürücü gerekmeyecekse cihaz USBTMC class olabilir.
- HID olmayacak. fakat sürücü ve inf dosya gerekmeyecek
-Bulk veya isochronous transfer yapacak
- Midi veya ses kartı gibi görünmeyecek (Proton ile her 2 sinden de yaptım . sürücü gerekmiyor. cihaz çalışıyor fakat karizmayı çizmemek için başka bir USB class gerek)

Sizden bir BULK transfer yapan CDC olmayan hem de sürücü gerektirmeyen bir USB device Class name  öğrenebilir miyim? Sizin şu ticari cihaz hangi Class ? Yaptığım şablon içine uygun descriptor 'ı yazarak aleti  kolayca başka bir sınıfa dönüştürebiliriyorum. Scanner filan tanımladım onlara  da sürücü gerekiyor  inf dosya gerekiyor.  Yalnız ses aygıtı veya midi olunca gerekmedi. onuda ben sevmedim. Harici disk tanımladım (SCSI.. protocol)ondan gelen bilgileri okumayı beceremedim.

Şimdi başka Class  gerekli. Ne kullanayım ?

teknikelektronikci

Alıntı yapılan: "azimli"hocam resim için teşekkür ederim.

becerebilirsem onu forumda kendi simge alanıma ekleyip marka başvurusunda da bulunacağım.

cnc hereket sistemlerinde x,y,z ekseni olduğunu biliyor ve görüyorum ve z nin burdan geldiğini de z kendisi yanlış değilsem bir ara söylemişti.

biz onuda sizide seviyoruz ve takdir ediyoruz.

az iyiliğinizi görmedik sağ olun var olun.

bu dünyanın diğer  dünyasıda olduğuna inanan biri olarak sizin yardımlarınızla birisi birşeyleri başardıysa ve insanlığa faydalı bir şeyler yapabildiyse bu işlerin diğer tarafa faydası her iki taraf içinde ortak olur düşüncesindeyim

işin simetriği ise,

bir kişi yanlış işlere yönlendirilip yanlış işler öğretiliyorsa o işlerin insanlığa zararı diğer tarafta ortak olur düşüncesindeyim.

hocam mesajım silinmiş sanırım  varsın gelsin silinsin sorun değil ama ben halen anlamadım eğer yeri burası değilse bana özelden yazabilirmisiniz gercekten merak ettim :)
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!

hasangurlek

Alıntı yapılan: "wsxwsx"
Alıntı yapılan: "hasangurlek"bazı yararlı bilgiler...
Hazır gelmişken Sizden usb konusunda biraz bilgi alabilir miyim?.

Yapacağım cihaz için özel ve güzel bir USb class gerekli.
- Sürücü gerekmeyecekse cihaz USBTMC class olabilir.
- HID olmayacak. fakat sürücü ve inf dosya gerekmeyecek
-Bulk veya isochronous transfer yapacak
- Midi veya ses kartı gibi görünmeyecek (Proton ile her 2 sinden de yaptım . sürücü gerekmiyor. cihaz çalışıyor fakat karizmayı çizmemek için başka bir USB class gerek)

Sizden bir BULK transfer yapan CDC olmayan hem de sürücü gerektirmeyen bir USB device Class name  öğrenebilir miyim? Sizin şu ticari cihaz hangi Class ? Yaptığım şablon içine uygun descriptor 'ı yazarak aleti  kolayca başka bir sınıfa dönüştürebiliriyorum. Scanner filan tanımladım onlara  da sürücü gerekiyor  inf dosya gerekiyor.  Yalnız ses aygıtı veya midi olunca gerekmedi. onuda ben sevmedim. Harici disk tanımladım (SCSI.. protocol)ondan gelen bilgileri okumayı beceremedim.

Şimdi başka Class  gerekli. Ne kullanayım ?

Bu başlık yeri değil ama :)

Açtığınız başlıktaki linki bir arkadaşımız örnek kod istediği için vermiştim. USBTMC diye bir sınıf yok. Vatandaş projesine bu ismi vermiş.

Sürücüsü olmayan bir donanımı nasıl kullanacaksınız ? Aygıt sınıfı ne olursa olsun her donanımın bir sürücüsü mutlaka vardır. HID (0x3), Veri depolama (0x8), yazıcı (0x7) vs. tipi her sınıfın sürücüleri windows altında bulunduğu için yazılım geliştirmenize gerek kalmaz, sürücü dosyasındaki hazır fonksiyonları PC yazılımızda kullanırsınız. Aygıt bire bir olarak herhangi bir sınıfa ait olduğunu, alt sınıf ve protokol değerlerinide kullanarak işletim sistemine bildirdiği zaman sürücü dosyaları otomatik olarak o aygıta atanır.

Eğer aygıt ana sınıfıyla birlikte alt sınıfını ve/veya kullandığı protokolü işletim sistemine bildirmiyorsa veya alt sınıfın üst sınıfla uyuşmaması vb. gibi birbiriyle uyuşmayacak şekilde hatalı bildirimde bulunuyorsa ki çoğu zaman aygıt reddedilir veya sistem mavi ekrana düşer veya sistemin tanıdığı bir aygıt değilse inf dosyası olmadanda donanım için yüklenecek sürücüleri işletim sistemine bildiremezsiniz. Bunun dışında inf dosyaları ile; işletim sistemine sistem kaydedicilerinde açılacak anahtarlar, sürücülerin kaynağı ve kopyalanacağı dizin, kullanılacak ikon, üretici bilgisi vs. bildirilir.

Transfer tipleri aygıt uçnoktalarının transfer tipine göre tanımlanmasının dışında PC tarafındaki sürücülerin desteğinide gerektirir.

Kullandığınız sınıf ne olursa olsun o sınıfa ait sürücüleri kullanır fakat tanımlayıcılardaki metin katarlarıyla istediğiniz bilgiyi kullanıcıya gösterebilirsiniz. Örneğin kullandığınız ana sınıf 0x0D diye işletim sistemi kurulum yaparken kullanıcıya bu bir güvenlik aygıtı demez veya kurulumdan sonra aygıt yöneticisinde güvenlik aygıtı olarak görüntülenmez. Bizim geliştirdiğimiz aygıt 0x2 yani iletişim ve iletişim kontrolü sınıfında.

Harici diskten kastınız sanırım mass storage tipi aygıt. Bu tip aygıtların windowsdaki sürücüsü usbstor dosyasıdır. Aygıtın PID/VID değerlerini usbstor.inf dosyasındaki değerlerden biriyle eşleştirirseniz aygıtınız sisteme otomatik olarak kurulur. Eğer kurulumu yapıpta PC yazılımı tarafında API lerle ilgili problem yaşıyorsanız sınıf kütüphanelerinden System.Management ve System.IO alanlarından ilgili fonksiyonları kullanmalısınız.

PC tarafında hazır bulunan sürücülerden hangisinin fonksiyonları sizin için uygunsa onu seçebilirsiniz. Hiç biri sizin aygıt için uygun değilse LIBUSB yi kullanabilirsiniz.
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

controller

Programı .NET tabanlı bir dil ile yazıp, "reflector" tarzı disassembler  programlara karşı da oluşan EXE yi "dotfuscator" gibi bir program ile obfuscation işlemine tabi tutarsanız native programlama dillerine göre biraz daha iyi koruma sağlayabilirsiniz. zira .NET ile yazılmış program EXE leri Win32dasm tarzı programlar ile disassembly edilemez.
Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.