LOLCODE
#Safenet #Microdog #SuperDog #License Dog #Dongle #Emulator #Clone #Crack #Dulicate #Copy #Sender #Driver #Download #ByPass #Recovery #Dumper #Virtual Dongle #Microdog Emulator
Dongle Teknolojisi Ve Mimarisi
Meesela programınız registry e bir kayıt yapar ve lisanslı olup olmadığını ordan kontrol eder. Sizde o exe yi decompile edip ne yaptığını(kısmen) anlarsınız ve genellikle je, jne yapılır program yanlış bilgileri doğruymuş gibi algılar. Peki bu dongle ile gönderilen( veya dongle a gönderilen) verilerin kontrolü sırasında da aynı işlem yapılıp program yanıltılamaz mı?
Kısacası dongle nasıl çalışır? Programımın kopyalanmamasını çok zorlaştırmak için ne gibi önlemler almak gerekir? Bunun hakkında detaylı bir bilgi vereceğim.
Eğer gerçekten lojik analyzer vs gibi cihaz yada port dinleyen programlar ile veri kopyalanamıyorsa veri sürekli değişiyor demektir (code hopping misali) fakat gereken bilgiler PC ye geçtiği için (ki geçmek zorunda) o programı çözeceklerdir. Aradaki haberleşmeyi değişken yapmak hiçte zor değil basitçe random bir algo üstüne yerleştirilmiş basit bir şifreleme ile bile logic analyzer her seferinde farklı veriler görecektir ancak karşıda bu haberleşme çözüldüğünde PC ve kilit tarafında aynı bilgi elde edilir. Bunlar önemli şeyler değil önemli olan uygulanabilirlik ve programı analiz eden kişinin gözünü korkutmak. Yoksa kilit felan hikaye ki çoğunuzunda bulduğu gibi profesyonel pek çok kilitin emulatorleri yazılmış durumda. Yılların firmaları bunlar adamların işi bu düşünün. Ayrıca RAM den kopyalama konusunda çok can alıcı bir noktaya temas etmişimdir. RAM de çalışır halde bulunan bir program diske yazılarak yeniden yapılandırılabilir. Bknz; Manual Unpacking.
Ayrıca bilinen chiplerle nereye kadar yapılabilir. söylendiği gibi ancak küçük çaplı işlerde kullanılırsa belki bir nebze idare eder. Yoksa program ücreti ve yaygınlığı arttıkça birilerinin gözüne girmeye başlayacaktır. Ve sizinde bildiği gibi bir PIC veya benzeri MCU yu üstü kazınmış olsa bile bacak bağlantıları devre yapısı gibi etkenlerle tanımlamak pek te zor değil. Ancak bir FPGA kullanıp birşeyler olursa onda bir nebze etkinlik artabilir. En iyi ve profesyonellerin kullandığı yöntem yine ASIC ler ancak bunlarda dediğim gibi herhalukarda emüle ediliyor.
Pc hdd nosuna veya anakart id ye göre basit bir algortima yaparsan çok fazla sorun olmaz. programlar bir şekilde kırılır. ramdan çalışsada xp memory gutter var alıp hdd ye kopyalanıp yine ida veya softice ile disassembly edilir kırılır sorun sadece zamandır.
Bu durumda herhangi bir dongle bile işinizi görür. Ayrıca hasp vs… gibi dongle’leri kırmak için disassmbly etmeye de gerek yok. Programın kullandığı DLL in aynısından yapılıp verileri böyle toplayabilirsiniz. Zaten dongle emülatörler de böyle çalışıyor. Önce çalışan dongle takılıyor. senin dll’in programdan gelen isteği gerçek dll’e iletiyor. dll den gelen bilgiyi bir köşeye not ettikten donra da programa iletiyor. bütün bilgiler alındıktan sonra da emüle ediyor. Ve emin olun birçok firma karmaşık ve değişken algoritmalar kullanmıyor. Sadece dongle hafızasındaki veriyi karşılaştırıyor. Hardware bilgileri her zaman en iyi korumadır.
Sanal Dongle Hasp kilit
Her Dongle Kİlit İçin Uyumlumu Bilmiyorum ama Ben Bu Programlarla Yaptım Ve Sonuç Başarılı…
Not: HASPHL2007 32 Bit İşletim sisteminde İşlem Yapmaktadır..
Programınız Bilgisayarda Kuruluyken Dongle Kiliti Bİlgisayara Takın..
Daha Sonra HASPHL2007 Adlı Dosyayı çalıştırın Driver Bölümünden İnstal Driver Deyin
Sonra Emulator Kısmından Start Service Butonuna Tıklayın
Daha Sonra Dumper Kısmına Gelin Refresh e Tıklayın Hasp/HLDongles Yazan Yerde Dongle Id Niz Görünecek Eğer Görünmez İse Programınızı Çalıştırın Program açılırken Refresh e Tıklamaya Devam Edin… Dongle Idniz Görünecektir…
Ardından Dump Butonuna Basın.. Bilgisayarınızın Hızına Göre 5-10 Dk Arasında Dongle Kilidinizin Kopyasını Bİlgisayara Kopyalayıp HASPHL2007 Programının Bulundugu Klasöre (.dmp Veya .BIN) Olarak Kaydedecektir… Daha Sonra HASPHL2007 Kapatın…
Edgehasp Programını Çalıştırın Hasp Veya Hasp HL Bölümünden ( Bu Dongle Kilidinize Göre Değişir) Dump File Location Bölümünden BIN Veya Dmp Formatlı Dosyanızı Seçin Ardından Dng File Location Kısmından
Dng Dosyasını Kayıt Edeceğiniz Yeri Ve İsmini Belirleyin… Ardından Solve Butonuna Tıklayın…
Dng Dosyanız Muhtemelen Oluşturulmuştur… Dongle kiliti Bilgisayarınızdan Çıkartın… Bİlgisayarınızı Yeniden Başlatın… Bilgisayar Açıldıktan sonra HASPHL2007 Programını Çalıştırın Driver Kısmından İnstall a Tıklayın Ki Büyük İhtimal Driver Yüklü Olacaktır… Sonra Emulator Kısmından Start Service e Tıklayın…
Daha Daha Sonra Dongleskısmından Load Dump Butonuna Tıklayın Ve En Son oluşturdugunuz Dng Dosyasını Seçin…. Emulator Kısmına Gelin Programın İd si Ve Şifreler Görünecektir…. HASPHL2007 Kapatın Programınızı Çalıştırın…. ( Ben Kendi Programımda Denedim %100 Garanti Sonuç Aldım İnş Sizler İçinde Faydalı olur…
32 bit olan tüm windows işletim sistemlerinde çalışır bizzat denedim test ettim( en düşük win xp ve win vista-7-8 vs. gibi sistemlerde sentemul programını uygulama özelliklerinden yönetici olarak çalıştır ı işaretlemeniz gerekir ) 64 bitte çalışmaz ancak onuda çözdüm ben şu an nasıl yaptıgımı hatırlıyamıyorum sanal dongle yaptım aygıt yöneticisinde dongle aygıt var gibi görüyor ancak nasıl yaptıgımı hatırlıyamıyorum nasıl yaptıgımı buldugumda onuda açıklamalı şekilde paylaşıcam…
Uygulama korumada ise uygulamam internete bağımlı çalışır (Sunucum ile) her açılışında, haberleşemez ise uygulamam açılmaz. Haberleşir ama lisans kodları (3213-3213-2132-1312) sattığım adamın statik ip’si ile eşleşmiyor ise çalışmaz. Kurduğum bilgisayarın pc bilgilerini alırım (mac,hdd,işlemci kodları vs) lisans kodu ile ipsi ile eşleştirrim hepsi bir araya gelince uygulamam çalışır.
Bu kopya koruma yöntemlerinden ayrıyeten eski bir teknik vardı. 90’lı yıllarda laser hole ‘lü disketler vardı. Laser gibi bir ısı kaynağı ile disketin bir noktası deforme edilirdi. Bu hangi track yada sectore denk geldiyse orası bad-sector oluyordu. EXE yada COM ana programıa da bir kod eklenerek ilk çalıştığında bu diskette belirlenmiş olan bad-sector kontrol ediliyordu. Ben de o yıllarda bir yazılım firmasına kendim geliştirdiğim bir tür kopyalanmayan disket yaparak yüzlerce satmıştım. O zamanlar popüler olan CopyWrite disk kopyalama programı bile kopyalayamıyordu. Çalışma mantığı ise son trak kaç ise (3.5 inc’lerde 0-79 arası kullanılırdı) ben 82.ci track’ı farklı formatlar ve veri yazardım. Bunu da Ms-DOS interruptlarını kullanarak yapardım. Tabii yine Pascal ile..
82.trackı da kopyalayan programlar (DiskClone) çıkınca bundan vazgeçip klasik bir maket bıçağı ile fiziki minik bir çizik atardım. Bu çizik olan yer format sonrasında FAT altında bir bad sectör tablosu oluştururdu. Proje her çalışmada diskin FAT tablosunu proje içinden yeniden okuyup, okunan bad sectör içeriğinden rastgele bir tanesini direkt okumaya çalışıp, hata dönerse anahtar disk takılı varsayıp devam ederdim. Disk kopyalama programı CopyWrite vardı. o bile benim disketimi tam olarak kopyalayamıyordu. Çünkü 82. track’ı DOS formatında formatlamıyordum. Farklı sayıda sector oluşturuyordum. Buraya yazdığım kodu kopyalayamıyordu. Bu kodu benim programım okuyabiliyordu. Bu yüzden herhangi bir anahtar disket başka bir disketle aynı olmuyordu. Çalışmıyordu.
Dongle korumalı sistemler kolay manipule olan sistemlerdir. Dongle simule edilmesi veya dongle ın kullandığı library nin üzerinde değişiklik yapılması. Veya alternatif library yazılması gibi kolay metodlar yapılabilir. Packer kullanımına değinecek olursak basit packerlar çalıştırılınca kendi sectionlarında olan exe yi hafızaya açıp entry point e sıçrama yaparak program devamlılığını sağlar. Daha kapsamlı olanlar obfuscate ederek kod okunmasını zorlaştırırlar. Decompile edilirken bazı zorluklar çıkar. Entry point mantığı olarak değilde kendi üzerinde kod devamlılığı sağlarlar. Böylelikle oluşturduğu paralel threadlerle program üzerinde kontrollerini devam ettirirler. Güçlü binary dosya analiz algoritmaları sayesinde sorunsuz bir analiz ve paketleme yaparlar. İmport table ı hafızada rast gele yazarlar ki crackerlar için en zor kısımdır bu importların toplanması. Runtime da adreslemeleri tekrar yaparlar. Bazı anti debug metodları içerirler. Bazı importları simule ederler(ilk kez 10 sene önce asprotect te gördüğümde şaşırmıştım)
Asprotect örnek verdim.Kendiniz bir şeyler yapmayı düşünmeyip hazır bir şeyler ile devam etmek isterseniz şu an piyasada en iyi koruma sağlayan koruma motoru oreansın geliştirdiği themida ve winlicense dır. Kendiniz bir şeyler yapmak isterseniz SMC (Self modifying code) ve overlay(Out section) metodlarını kullanabilirsiniz. SMC runtime code bloklarını yeniden düzenleme işlemidir. Overlay ise exe dosyalar sectionlardan oluşur ve bu section boyutları dosya içerisinde belirtilir. Siz belirtilen exe boyutu üzerine yani dosyanın devamına kod yazarak bu kodu runtime da okuyarak kontrollerinizi yapabilirsiniz.
Overlay metodu ile önce exeyi derleyip bir compress işlemi yaptıktan sonra exe üzerine tekrar yazdırırsanız. Eğerki exe decompress yani unpack edilirse bu veriler tekrar yazılmaz ise exe bozuk bir dosya haline gelecektir. Yine buraya yazacağınız veriyi runtime da code bloğu silik bir exe ye belirli method çağrımları ile yazdırıp işlem bitiminde tekrar sildirtebilirsiniz. Böylelikle debug edilse bile boş code bloğu ile karşılaşılacaktır.
Başka bir method ise exe içerisinde exe. Birinci exenin loader mantığı ile hafıza kontrolü yapıp ikinci exeyi direk kendi içerisinden hafızaya açarak çalıştırmasıdır. Owner exe ile child exe yede birbirlerini kontrol ettirebilirseniz herhangi birine müdahale durumunda biri diğerine sonlanma isteği gönderebilir. Yine bu mantığa smc ve overlay de eklerseniz sağlam bir koruma sağlamış olursunuz.
Fikir olsun diye basit bir smc örneği vereyim.
program SMC;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
SMCFunc: function: Integer;
{$J+}
const
Code: array[0..5] of Byte = (
//eax a bir değer alıp geri dönderelim
$B8, $00, $00, $00, $00, $C3);
var
FByte: Byte;
begin
@SMCFunc := @Code;
WriteLn(‘Su anki deger = ‘ + IntToStr(SMCFunc));
WriteLn(‘Bir sayi giriniz (0-255)’);
ReadLn(FByte);
Code[1] := FByte;
WriteLn(‘Son deger = ‘ + IntToStr(SMCFunc));
ReadLn;
end.