.NET kodu tersine mühendislikten korunsun mu?


491

Gizleme bir yoludur, ancak uygulamanın korsan koruma güvenliğini kırmaktan koruyamaz. Uygulamanın kurcalanmadığından nasıl emin olabilirim ve kayıt mekanizmasının tersine mühendislik yapılamayacağından nasıl emin olabilirim?

Ayrıca bir C # uygulaması yerel koda dönüştürmek mümkündür ve Xenocode çok pahalıdır.

C # birçok özellik sağlar ve kodum için ideal bir dildir, bu yüzden tüm kod tabanını tekrar C ++ ile yazmak söz konusu değildir.

Güvenli sertifikalar .NET'te imzalı derlemelerden kolayca kaldırılabilir.



@Andreas: Bu harika !! Ben deneyeceğim. Kullanan var mı?
Jack

1
@ Jack, sadece pencere mağazası uygulamaları için. Masaüstü uygulamaları için hiçbir zaman çizelgesi yoktur (anlayabildiğim kadarıyla).
Tyler Long

Arkaik C ++ olmadan yerel istiyorsanız, Delphi kullanın. Net'in kolaylığı yine de Delphi'den geldi.
William Egge

Yanıtlar:


671

Yapamazsın.

Biraz daha zor hale getirmek için atabileceğiniz adımlar var , ancak sonuçta yerel makinedeki herhangi bir yürütülebilir dosya çatlanabilir. Sonunda, bu kod yerel makine koduna dönüştürülmelidir ve çalıştırılabilir her uygulama savunmasızdır.

Yapmak istediğiniz şey, insanların sorununa değmez hale getirmek için çatlamayı zorlaştırmaktır.

Başvurunuzu korumanıza yardımcı olacak bazı öneriler:

  • Kodunuzu gizleyin . Dotfuscator ücretsiz bir sürüme sahiptir ve Visual Studio ile birlikte gelir.
  • Kullanım kamu / özel anahtar veya asimetrik şifreleme , ürün lisansları üretmek için. Bu , lisans kodlarınızı yalnızca siz oluşturabilmenizi sağlar . Uygulamanız çatlansa bile, uygulamanız için bir anahtar oluşturucu yayınlamayacaklarından emin olabilirsiniz, çünkü anahtar oluşturma algoritmasını tersine çevirmek imkansızdır.
  • Bir kullan üçüncü taraf Packer şifreli Win32 sarıcı uygulamasına senin NET yürütülebilir paketi için. Themida daha iyilerinden biri. Bu, kullanıcıların uygulamanızı .NET Reflector'a yansıtmasını önler ve geri döndürmek için açılmasını bir acı haline getirir.
  • Kendi özel paketleyicinizi yazın . Üçüncü taraf paketleyicileri çok pahalıysa, kendiniz yazmayı düşünün. Bazen özel paketleyiciler çok etkili olabilir, çünkü bunların paketlerini nasıl açacağınız konusunda iyi yayınlanmış yöntemler yoktur. Kendi packer yazma öğretici kendi Win32 packer yazma hakkında iyi bir ton bilgi verir.

Nihayetinde, eğer insanlar uygulamanızın çatlamasını isterse yapacaklar. Uygulamalarını korumak için çok fazla kaynağa sahip olan tüm ticari yazılımlara bakın ve yine de uygulamalar halka açılmadan önce çatlarlar.

Yetenekli bir ters mühendis IDA-Pro'yu ateşleyebilir ve ne yaparsanız yapın tereyağı gibi uygulamanızı dilimleyebilir. Paketlenmiş bir uygulama paketten çıkarılabilir ve şaşkınlık sadece parkta yürüyüş yapmasını önler. Karmaşık lisans kodunuzla tüm sıkı çalışmanız, tek bir bayt yamasıyla geri alınabilir.

Sadece insanların yazılımınızı korsan olma şansının çok yüksek olduğunu kabul etmelisiniz. Ne olursa olsun başvurunuz için asla ödeme yapmayacak bazı insanlar var ve bunlar endişelenmenize gerek olmayan insanlar.

Bununla birlikte, hiçbir zaman dava açmayacak ve yazılım lisanslarını mutlu bir şekilde satın almayacak birçok işletme ve risk almak istemeyen, yanlış bulan veya korsanlığa yetecek kadar teknoloji bilgisine sahip olmayan birçok bilgisayar kullanıcısı var. Bunlar gerçek müşterilerinizdir ve çabalarınızı onlara iyi bir kullanıcı deneyimi sunmaya odaklamalı ve yazılımınızı çatlayan kişileri görmezden gelmelisiniz.

Başvurumu daha önce korsan yaptım ve kişisel bir hakaret olarak aldım. İşte ben, küçük bir geliştirici, kalbimi ve ruhumu bir uygulamaya döktüm ve bu insanlar benden korsanlık çağrısında bulundular mı ?! Doğrudan cebimden para alıyorlardı!

Hemen bir sürü acımasız DRM kodunu ekledim ve herhangi bir kişiyi gayri meşru veya çatlamış bir kopya kullanarak sabote etmeye çalıştım. Elbette kaçınılmazı durdurmaya çalışmak yerine başvurumu daha iyi hale getirmeye çalışmalıydım. Sadece bu da değil, gerçek müşterilerime de eklediğim tüm bu ekstra korumaları incitiyordum .

Uzun bir savaştan sonra gelgitler ile savaştığımı fark ettim ve tüm bu zaman boşa harcandı. Barebones lisans fonksiyonları dışında tüm telefon-ev kodunu çıkardım ve asla geriye bakmadım.


67
Yani +1 neredeyse +2. Sonunda daha fazla insanın yazılımınızı kararlı bir saldırgana karşı koruyamayacağınızı umuyorum.
Bombe

102
Nirvana yazılım korumasına ulaştınız: daha fazla koruma eklemekle ilgili değil, ürüne odaklanmak ve o kadar iyi yapmakla ilgili ki insanlar bunun için ödeme yapmak istiyor. Ve korsan olanlar için hiçbir şekilde ödeme yapmazlardı, bu yüzden hiç var olmamış gibi.
Arthur Chaparyan

6
@Arthur Chaparyan, katılıyorum. Buraya gelmek uzun zaman aldı ama sonunda ışığı gördüm. Daha kısıtlayıcı korumalar ve krakerlerle mücadele yolunda indim. Kendimi önlemek için tersine mühendislik hakkında elimden gelen her şeyi öğrendim. Sonunda doğru ideolojiyi anladım
mmcdole

50
Cehennem, yazılımımın korsanlığa değer olduğunu düşündüğünü bulmaktan onur duyarım ...
Erik Forbes

10
Gelirinizin büyük bir kısmı için yazılımınızın satışına güvenmeye başladığınızda, bazı şeyleri değiştirir. Birisi senden çalıyor gibi geliyor. Ne dediğini anlıyorum. Torrent sitelerinde yazılımım için ilk çatlaklar bulduğumda şok oldum.
mmcdole

265

Hiçbir uygulamayı (güvenli olsun ya da olmasın) tamamen güvenli hale getiremezsiniz. Playstation ve iPad gibi sistemler çatlayabilirse - satıcının donanımı bile kontrol ettiği yerde - uygulamanızın umudu nedir? Neyse ki, gerçekten istemiyorsun. Bence, uygulamanızı birisinin yanlışlıkla ürününüzü korsan yapamayacağı kadar güvenceye almanız gerekiyor .

Örneğin, makine başına lisans kullanıyorsanız, yalnızca yeni bir ikinci makineye yüklediğinizde işe yaramaz. Ek destek çağrılarını önlemek için iyi bir hata mesajı isteyeceksiniz, ancak fazladan zaman harcamak için çok fazla zaman harcamayın ve kullanıcıları bununla başa vurmayın.

Başka bir örnek, zaman sınırlı bir çalışmadır. Kullanıcılar sistem saatini geri alabiliyor gibi basit şeyler hakkında bile endişelenmeyin. Bunu yapan biri, lisansınızı ihlal ettiğini bilir ve bir kullanıcı ihlalde bulunduğunda ne zaman yeterli olduğunu bilirsiniz.

Bunu çok yapmanız gerekiyor çünkü kullanıcılar lisansınızı umursamıyor. Lisanslar, kimsenin ihtiyaç duymadıkça ilgilenmediği telafi şeylerdir . Kimse onları okumuyor ve gerçekten yapmak zorunda değiller. Bu nedenle, kullanıcıya sınırların nerede olduğunu söylemenin en iyi yolu, uygulamanız için kullanıma hazır davranışının lisansa uygun olup olmadığıdır. Bu ilk durumda bu, ikinci kez yüklenememesi veya deneme sürümü modunda yüklenmemesi anlamına gelir. İkincisi için, bu sadece bir yapılandırma dosyasında düz metin tarihini kontrol etmek anlamına gelebilir. Her iki durumda da, zarif, yararlı ve saygılı bir şekilde kullandığınızdan emin olun.

Yani bu ne anlama geldiğini açıklıyor. Ama neden daha ileri gitmiyorsunuz? Neden bulabileceğiniz her küçük deliği takmıyorsunuz? Cevap iki bölümden oluşmaktadır. Birincisi, birisi lisans koşullarınızı bilinçli olarak kırmanın etik eşiğini aşacaksa - basit bir şekilde bile - başvurunuzu bir torrentden çekmek gibi daha zor veya tehlikeli bir şey yapmaya istekli olacaklar.ve güvenilmeyen kaynaklardan indirilen uygulamaların çalıştırılmasında belirli bir tehlike söz konusudur. Bunu daha da zorlaştırmak, bu kullanıcılar için sadece küçük bir sıkıntı ve ödeme yapan müşterilerinizle sorunlara neden olan risklerdir. Basit tutmak, birisinin uygulamanıza girmesini ve daha kapsamlı bir çatlak bırakmasını önleyebilir. İkincisi, kusurları aramak için birkaç gözünüz var; bilgisayar korsanlarının çok sayıda var ve onları bulmak için daha fazla pratik var. Sadece küçük bir kusuru kaçırmanız gerekiyor ve uygulamanız hiçbir şey yapmadığınız gibi korsan sitelerinde aynı dağılıma sahip olacak. Her seferinde haklı olmalısın; sadece bir kez şanslı olmaları gerekir. Bu yüzden gerekli çaba çok yüksektir ve herhangi bir başarı ölçüsünün olasılığı çok düşüktür.

Sonuçta, birisi başvurunuzu korsan yapmak istiyorsa (sadece kullanmak yerine) ve bu onların asıl amacı budur. Onları durdurmak için yapabileceğiniz hiçbir şey yok. Yazılımın doğası budur; ürününüzü oluşturan dosyalar bir kullanıcının bilgisayarında olduğunda , istediği gibi onlarla yapabilir. Bu özellikle Java veya .NET gibi yönetilen ortamlarda geçerlidir, ancak kesinlikle yerel kod için de geçerlidir. Zaman onların tarafındadır ve yeterli zaman verildiğinde herhangi bir dijital güvenlik bozulabilir.

Kullanıcıların ürününüzü korsan hale getirmesini engelleyemeyeceğiniz için, en iyi işlem yönteminiz bu kullanıcı sınıfını yararınıza kullanacak şekilde kullanmaktır. Onları size karşı değil, sizin için çalıştırmaları çoğu zaman mümkündür. Bunu göz önünde bulundurarak, uygulamanız ne olursa olsun, neredeyse tamamen işlevsel olan ve süresi dolmayan ücretsiz bir sürümü tutmaya değer. 1 ABD doları fiyat etiketi ve ücretsiz arasındaki fark, müşterinin kredi kartlarıyla size güvenmesi gerekmiyorsa, büyüktür. Ürününüzün ücretsiz bir sürümü sadece korsan dağıtımını etkili bir şekilde öldürmekle kalmaz (aynı fiyata meşru olabileceğinizde neden korsan bir sürümü riske atarsınız), kitlenizi önemli ölçüde genişletme potansiyeline sahiptir.

Sonuç olarak, ücretli sürümün fiyatını artırmanız gerekebilir, böylece sonunda 20 $ 'da 2.000 kullanıcı yerine her biri 100.000 ücretsiz kullanıcınız olur ve bunların 500'ü "profesyonel" sürüm için 99 $ ödemeye razı olur. . Bu, ürününüzü kilitlemek için bir sürü zaman harcadığınızdan daha fazla para kazanır. Bundan da ötesi, bu ücretsiz kullanıcılarla etkileşime girebilir ve ilişkiden birkaç önemli şekilde yararlanabilirsiniz.

Biri destek. Kötümser, bu fırsatı 100.000 ücretsiz kullanıcıyı desteklemenin artan maliyetinden şikayet etmek için kullanır, ancak bunun yerine şaşırtıcı bir şey olur: ürününüz büyük ölçüde kendi kendini destekliyor. Bunu destek maliyetleri için parası olmayan büyük açık kaynak projeleriyle her zaman görürsünüz. Kullanıcılar hızlanır ve gerçekleşir.

Ücretsiz kullanıcılar genellikle başlangıçta ve iyi bir nedenle destek beklentilerini azaltır. Yapmanız gereken tek şey, ücretsiz sürümü yalnızca topluluk desteğine hak kazanmak olarak işaretlemek ve bu amaçla kullanıcı tarafından yönetilen bir çevrimiçi forum oluşturmaktır. Destek bilgi tabanınız kendi kendini üretir ve ileri düzey kullanıcılar sizin adınıza fazladan el tutmaya ihtiyaç duyanlara çobanlık edecektir. Daha da önemlisi, bu, hataları daha hızlı tanımlamanıza ve düzeltmenize, sonuçta ürününüzün kalitesini artırmanıza ve toplam destek maliyetlerini azaltmanıza olanak tanır. Bu, daha önce mümkün değildi çünkü kullanıcı tabanınız yeterince büyük değildi, ancak ücretsiz kullanıcılara müşteri olarak davrandığınızda çok iyi çalışabilir.

Başka bir geri bildirim. Forumunuzu izleyerek, başka türlü düşünmediğiniz önemli iyileştirme fikirlerini öğrenirsiniz. Bu, sonuçta daha fazla ücretsiz kullanıcınızı ücretli kullanıcılara dönüştürmenize ve daha da büyük bir kitleyi çekecek daha çekici bir ürün oluşturmanıza olanak tanır.

Son olarak, pazarlamayı düşünmelisiniz. Tüm bu ücretsiz kullanıcılar artık rakiplerden ziyade hayranlar ve buna göre hareket edecekler. Sadece bu değil, aynı zamanda bir sonraki sürümünüzü yayınlama zamanı geldiğinde, bu kullanıcıların hepsi bilinmeyen bir mekanizma yerine onaylanmış dağıtım kanalınızdan geçecek. Bu, bir sonraki sürümünüz için daha büyük, son derece ilgi çekici ve destekleyici bir kitleyle bağlantı kurmaya başladığınız anlamına gelir.

Profesyonel baskı için ayrılacak en iyi özellikler, kurumsal dağıtım ve yönetimi kolaylaştırmayı amaçlayan araçlardır. Bir kraker, bunları kendi kullanımı için kesmek için yeterince zorlayıcı bir neden olarak görmeyecektir, ancak 300 lisans satın almak ve şirket çapında zorlamak isteyen bir işletme için bu bir zorunluluktur. Tabii ki, profesyonel baskı yine de korsan olacak, ama tekrar: terlemeyin çünkü ne yaparsanız yapın ürünü muhtemelen bu korsanlara satamazsınız, bu yüzden size herhangi bir gelir getirmez.

Psikolojik olarak ürününüzü bu kadar çok vermek zor olsa da, umarım bunun en iyi yolun nasıl olduğunu anlayabilirsiniz. Sadece bu değil, uzun vadede gitmenin tek yolu bu. Birisinin bu şekilde yapmak istemediğini düşünerek dışarıda olduğunu biliyorum. Sonuçta, yıllarca kilitli 20 $ 'lık ürünlerini sattılar. Ama bu çok kötü, çünkü eğer bu şekilde yapmazsan, sonunda başka biri yapacak . Ve ürünleri sizinki kadar iyi olacak ya da bunu iddia etmekle yetinebilecek kadar yakın olacak. Sonra aniden fiyatlandırmanız çirkin görünüyor, satışlar önemli ölçüde düşüyor ve yapabileceğiniz başka bir şey yok. Gerekirse ek bir orta katman tercih edebilirsiniz, ancak size yardımcı olması muhtemel değildir.


1
@ Öğrenme: Zamanla büyüdü ve otomatik dönüştürme CW eşiğine geçti.
Joel Coehoorn

1
+1 Bu sorunun önceki sürümüne verdiğim yanıttan daha iyi. @Joel Bir sınır olduğunu bilmiyordum.
pipTheGeek

1
Buradaki her şeye tamamen katılmıyorum ve son derece iyi düşünülmüş sunum ve argüman için kolay bir +1.
Beska

2
İyi argüman, ancak fikri mülkiyeti korumakla ilgili bir noktayı kaçırıyor. Uygulamanız biraz karmaşık bir şey yapan bazı kodlara sahipse, şaşkınlık, düz kopyalama ve kod yapıştırma ile kodu yorumlamaya ve yeniden oluşturmaya çalışmak arasındaki farkı sağlayabilir. Bu özellikle güncellemeler için önemlidir: birisi gizlenmiş kodunuzu kopyaladıysa, bir güncelleme yayınladığınızda, bunu tekrar tekrar yapmak zorunda kalırlar - ve en azından daha fazla acıya / masrafa / zamana neden olur. Bir şekilde korunmazsa, tekrar kopyalayıp yapıştırırlar ve çalışırlar.
Ocak'ta gregmac

4
Harika yazı - karmaşık kopya koruması yazmaya neden değmez nedenleri hakkında gerçekten doğru ayrıntılara giriyor. Soru yineleniyor olsa da, sadece bu cevap için tekrar açmaya değer. Belki bir mod onu birleştirebilir?
EMP

45

Deneyimlerime göre, uygulamanızı veya kitaplığınızı çatlatmayı daha zor hale getirmek dürüst müşterilerinize zarar verirken, dürüst olmayan müşterileri sadece biraz geciktirir. Kaçınılmaz olanı ertelemek için çok çaba sarf etmek yerine harika, düşük sürtünmeli bir ürün yapmaya odaklanın.


38

Birçok insanla paylaştığınız bir sır bir sır değildir. Kodunuzda gizli şeyler varsa, onu gizlemek bir koruma değildir; sadece bir kez kokudan arındırılmalıdır . Müşterilerinizle paylaşmak istemediğiniz bir sırrınız varsa, bunu müşterilerinizle paylaşmayın . Kodunuzu bir web hizmeti olarak yazın ve süper gizli kodunuzu yalnızca görebileceğiniz kendi sunucunuzda tutun.


1
Btw im ben de bir ürün "çevrimdışı" etkinleştirmek istediğiniz bir proje yapıyor. (Ben çevrimiçi etkinleştirmek için bir WCF hizmeti yaptı). Bu durumda nasıl kodu değiştireceksiniz? bana isabet verebilir misin?
Piyush

1
İlginç bir fikir, ancak WP7 oyunu gibi veri bağlantısı olmadan çalışması gereken bir uygulama geliştiren birine ne tür bir eylem önerirsiniz?
Charlie Skilbeck

23

Genel olarak, orada üç grup insan var.

  • Yazılımınızı satın almayacak ve çatlaklara başvurmayacak veya bulamazlarsa yazılımınızı hiç kullanmazlar. Bu gruptan para kazanmayı beklemeyin. Ya kendi becerilerine ya da krakerlere güvenirler (yararlı ve kitlenizin ne kadar büyük olduğuna bağlı olarak zamanlarını öncelik sırasına koyma eğilimi gösterirler.

  • Hangi koruma mekanizmasını kullandığınızdan bağımsız olarak, yazılımınızı satın alacak (ödeyecek) yasal kullanıcı grubu. Her durumda bunun bedelini ödeyecekleri için ayrıntılı bir koruma mekanizması kullanarak yasal kullanıcılarınız için hayatı zorlaştırmayın. Karmaşık bir koruma mekanizması kullanıcı deneyimini kolayca bozabilir ve bunun bu gruba olmasını istemezsiniz. Şahsen, yazılımınızın maliyetini artıran herhangi bir donanım çözümüne karşı oy verirdim.

  • "Etik olmayan" çatlamaya başvuracak ve sadece yazılımınız için ödeme yapacak , çünkü özellikleri bir lisanslama mekanizması ile korunmaktadır. Muhtemelen bu grubun korumanızı atlatmasını son derece kolay hale getirmek istemezsiniz. Bununla birlikte, yazılımınızı korumak için harcadığınız tüm bu çaba, bu insan grubunun ne kadar büyük olduğuna bağlı olarak geri ödeyecektir. Bu tamamen oluşturduğunuz yazılımın türüne bağlıdır.

Söyledikleriniz göz önüne alındığında, yazılımınızı satın almaya itilebilecek kadar büyük bir azınlık olduğunu düşünüyorsanız, devam edin ve bir tür koruma uygulayın. Bu azınlıktan, koruma üzerinde çalışırken harcadığınız zamana veya bir üçüncü taraf koruma API'sında / aracında harcadığınız miktara kıyasla ne kadar para kazanabileceğinizi düşünün.

Kendi çözümünüzü uygulamak isterseniz, açık anahtar şifrelemesini kullanmak, kolay saldırıları önlemek için iyi bir yoldur (simetrik algoritmaların aksine). Örneğin lisansınızı dijital olarak imzalayabilirsiniz (seri no veya lisans dosyası). Bunu aşmanın tek yolu, kodun (Simucal'ın cevabında önerilenler gibi teknikleri kullanarak daha zor hale getirebileceğiniz) kodunu çözmek, değiştirmek ve yeniden derlemek olacaktır.


Birisi, lisans teslim almazsa uygulamayı iptal eden kodu çıkarırsa, lisanslarınızı korumak / doğrulamak için güçlü kriptografi kullanmak tamamen işe yaramaz. :)
Bombe

Kabul ettim, ama dediğim gibi, koruma çatlakları kullanacak olan kullanıcı grupları için değil (yaptığım bir varsayım var olacak).
Mystic

açık anahtarlı kriptografi = asimetrik kriptografi. Bence simetrik demek istedin.
mmcdole

1
Adil olmak gerekirse, üçüncü nokta önyargılıdır çünkü insanların bir kısmının her zaman bir azınlık olduğunu varsayar. Eminim ki belirli çerçeveler altında açık bir çoğunluk. Akılda çok oyunculu özelliklere sahip çevrimiçi oyunlara sahibim çünkü a) çoğu kullanıcı çok düşük etik standartlara sahip çocuklardır b) aylarca süren aylık bir ücret ise maliyet bu kullanıcılar için önemli olabilir.
j riv

19

İnsanların yazılımınızı kırmasını engelleyemezsiniz.

Ancak, satışlarınızı daha az incitecek çatlaklar yaratmalarını sağlayabilirsiniz. Yazılımınız için geçerli bir kayıt kodu verebilen anahtar üreteçleri, yazılımınızdan kayıt teşviklerini kaldıran basit yamalardan çok daha kötüdür. Bunun nedeni, bir çatlağın yalnızca bir yazılım sürümünde çalışacağı ve yayınladığınız bir sonraki yazılım güncellemesiyle çalışmayı durduracağıdır. Keygenerator, kayıt anahtarı algoritmanızı değiştirene kadar çalışmaya devam edecektir ve bu, dürüst müşterilerinizi erteleyeceği için sık sık yapmak istemediğiniz bir şeydir.

Bu nedenle, yazılımınız için yasadışı keygeneratörlerle savaşmak için bir yöntem arıyorsanız ve bunun neden olduğu uzun kayıt kodları nedeniyle asimetrik şifreleme kullanmak istemiyorsanız, Kısmi Anahtar Doğrulama'ya göz atabilirsiniz.

Kısmi Anahtar Doğrulaması, her bir yasadışı anahtar oluşturucunun yazılımınızın yalnızca belirli bir sürümü için çalışmasını sağlar. Temel olarak yaptığınız şey, yazılımınızın her sürümünün yalnızca kayıt kodunun BAZI rakamlarını kontrol etmek için kodla bağlantılandırılmasını sağlamaktır. Hangi rakamlar tam olarak rastgeledir, bu nedenle krakerlerin yazılımınızın birçok farklı sürümünü tersine çevirmek ve yazılımınızın tüm sürümleri için çalışan bir anahtar üretecini serbest bırakmak için bunları tek bir anahtar üretecinde birleştirmesi gerekir.

Düzenli olarak yeni yazılım sürümleri yayınlarsanız, artık çalışmayan her türlü yazılım korsanlığı arşivine yayılmış çok sayıda anahtar üreteci ortaya çıkar. Potansiyel yazılım korsanları genellikle en son sürüm için bir çatlak veya keygen ararlar, bu yüzden muhtemelen bunlardan birkaçını deneyecek ve sonunda vazgeçeceklerdir.

Kısmi Anahtar Doğrulama'yı (C ++) daha yeni shareware oyunlarında kullandım ve çok etkili oldu. Önceden savaşamayacağımız keygenerator'larla ilgili pek çok problemimiz vardı. Daha sonra sadece oyunun belirli sürümü için çalışan çok sayıda çatlak ve birkaç anahtar oluşturucu vardı, ancak tüm sürümlerle çalışacak hiçbir anahtar üreteci yoktu. Oyunun düzenli olarak çok küçük güncellemelerini yayınladık ve önceden var olan tüm çatlakları işe yaramaz hale getirdik.

Kısmi Anahtar Doğrulaması için açık kaynaklı bir .NET çerçevesi var gibi görünüyor , ancak denemedim.


1
fikir gibi, farklı sürümlerde asimetrik şifreleme için farklı şifreler de kullanabilirsiniz.
Priyank Bolia

İlginç bir fikir, ama yine de uzun bir kayıt koduyla ilgili sorun nedir? Bugünlerde hiç kimse elle girmeyecekti - herkes onu kopyalayıp yapıştıracaktı, bu yüzden 10 karakter mi yoksa 100 karakter olsun fark yaratmamalı.
EMP

4
@Evgeny: Bu yalnızca kullanıcılarınız ileri düzey kullanıcılarsa geçerlidir. Yıllardır shareware / casual oyunlar üretiyoruz ve size söyleyebilirim ki kullanıcılarımızın çoğu kopyalayıp yapıştıramaz. Kayıt penceresi, nasıl kopyalanacağı ve yapıştırılacağı hakkında bir el kitabı ile birlikte gelir ve bazıları okuduktan sonra bile bunu yapmaz.
Adrian Grigore

Vaov! Tamam, bu konuda benden daha fazla deneyime sahipsin, bu yüzden tartışamam, sadece şaşırdığımı söyleyebilirim. Ama nasıl kopyalayıp yapıştıracaklarını bilmiyorlarsa , kodun 200 karakter uzunluğunda olması gerektiğini söyleyebilirim , böylece son derece kullanışlı bir genel bilgisayar becerisi öğrenirler. :)
EMP

1
@Evgeny: Hatta kısa kayıt kodları ile, hala onların kodlarını yanlış yazmış ve bu yüzden çünkü kod geçerli olamayacağını düşündüm insanlardan e-postaların bir sürü var asla a bu birkaç kez böyle bir hata yapmak kürek çekmek. BT öğretimini diğer şirketlere bırakmayı tercih ediyorum ... :-)
Adrian Grigore

16
  • Bu lisanssız kopyaları engellemek için çevrimiçi güncellemeyi kullanın.

  • Uygulamanızın farklı modüllerinden seri numarasını doğrulayın ve doğrulama için tek bir işlev çağrısı kullanmayın (böylece krakerler doğrulamayı kolayca atlayamaz).

  • Sadece başlangıçta seri numarasını kontrol etmekle kalmaz, verileri kaydederken doğrulama yapar, her Cuma akşamı yapar, kullanıcı boştayken yapın ...

  • Uygulama dosyası kontrol toplamını doğrulayın, güvenlik kontrol toplamınızı farklı yerlerde saklayın.

  • Bu tür hileler üzerinde çok ileri gitmeyin, kayıt kodunu doğrularken uygulamanızın asla kilitlenmediğinden / arızalanmamasına dikkat edin.

  • Kullanıcılar için yararlı bir uygulama oluşturmak
    , krakerler için kırılmaz bir ikili yapmaktan çok daha önemlidir .


14

Yapabilirsin..

Microsoft SLP Hizmetleri InishTech'in Yazılım Potansiyeli , uygulamalarınızın işlevselliğini etkilemeden kodu korumaya yardımcı olma olanağı sunar.

GÜNCELLEME: (Açıklama: Eazfuscator.NET üzerinde çalışıyorum) Microsoft SLP Hizmetleri Yazılım Potansiyelini farklı kılan , kodu sanallaştırma yeteneğidir, bu yüzden kesinlikle yapabilirsiniz . Sorunun başlangıçta sorulmasından bu yana birkaç yıl geçti; bugün benzer temelde çalışan daha fazla ürün var, örneğin:


2
arkadaşımı fiyatlandırma, Microsoft'tan bir lisanslama yazılımı satın alma normal ISV için çok pahalı
Priyank Bolia

Ben denedim, çok iyi çalışıyor ama sadece tüm montaj veya proje değil bir yöntem içindeki kodu şifrelemek, böylece bir kraker kolayca programın IL enjeksiyon ile akışını değiştirebilir
Mohsen Afshin

@ogggre Satıcı bağlantıları ekliyorsanız, bağlantıda gerçekten bağlantılarınızı açıklamanız gerekir. Ayrıca (SLPS halen mevcut versiyonu ben üzerinde çalışmak: D) desteği generic'leri yapar. Doğal olarak tüm çözümlerin, sadece bir
evalün

@MohsenAfshin Ne dediğini anlamıyorum - nokta, IL eklenmesi / kaldırılması / değiştirilmesinin bir lisans ihlali anlamına geleceği herhangi bir yöntemi korumanız gerektiğidir. Bir şeyleri sanallaştırmak ücretsiz olamayacağından, önerdiğiniz gibi 'hepsini sihirli bir şekilde korumak' mantıklı değildir. Geri tuşu noktaya: SP Koruma amacı IL onlar bir gürültü olarak önlemek dikim duyarlı (artı genellikle bazıları olduğunu temelinde seçmeniz yöntemleri değişir önlemektir -> burada bu biraz çatlak gerekir işareti )
Ruben Bartelink

1
@RubenBartelink Sana katılıyorum. Ne yazık ki bu ileti dizisi birkaç sayfa içerikle çok büyük. İlk başta yeni bir cevap eklemek istedim ama StackOverflow mevcut olanı genişletmenin daha iyi olduğunu belirtti. Ben de yaptım. Umarım küçük bilgilerim faydalıdır. SLPS'deki genel destek ve düzeltmeleriniz için bir güncelleme yaptığınız için teşekkür ederiz.
ogggre

10

.NET Reflektör yalnızca temelde ".NET kodu" anlamına gelen "yönetilen kodu" açabilir. Bu yüzden COM DLL dosyalarını, yerel C ++, klasik Visual Basic 6.0 sökmeye kullanamazsınız kodu, vb . Derlenmiş .NET kod yapısı çok rahat, taşınabilir, bulunabilir, doğrulanabilir, vb yapar. .NET Reflektör yararlanır derlenmiş derlemelere bakmanıza izin verir, ancak decompiler ve sökücüler hiçbir şekilde .NET'e özgü değildir ve derleyiciler olduğu sürece etrafta olmuştur.

Kodun okunmasını daha zor hale getirmek için obfuscators kullanabilirsiniz, ancak .NET için okunamaz hale getirmeden kodunun ayrıştırılmasını tam olarak engelleyemezsiniz. Bir avuç varYönetilen kod uygulamanızı bir yerel kod uygulamasına "bağladığını" iddia ürün var (genellikle pahalı), ancak bunlar gerçekten işe yarar olsa bile, kararlı bir kişi her zaman bir yol bulacaktır.

Ne zaman gizleme söz konusu olduğunda, sizin için ne ödeme olsun. Kodunuz o kadar tescilli ise, onu korumak için bu kadar büyük uzunluklara gitmelisiniz, iyi bir obfuscator'a para yatırmaya istekli olmalısınız.

Bununla birlikte, 15 yıllık deneyimimde kod yazma konusunda, kaynak kodunuzu aşırı derecede korumanın zaman kaybı olduğunu ve çok az yararı olduğunu fark ettim. Belgeleri, yorumları vb. Desteklemeden orijinal kaynak kodunu okumaya çalışmak çok zor olabilir. Buna, ayrıştırıcıların ortaya çıkardığı anlamsız değişken isimlerini ve modern obfuscator'ların yarattığı spagetti kodunu ekleyin - muhtemelen fikri mülkiyetinizi çalan insanlar hakkında çok fazla endişelenmenize gerek yok.


9

Gerçekten buna değer mi? Her koruma mekanizması yeterli kararlılıkla kırılabilir. Pazarınızı, ürünün fiyatını, müşteri miktarını vb.

Daha güvenilir bir şey istiyorsanız, donanım anahtarlarının yolunda inin, ancak bu (kullanıcı için) oldukça zahmetli ve daha pahalıdır. Yazılım çözümleri muhtemelen zaman ve kaynak kaybı olacaktır ve size verdikleri tek şey sahte güvenlik duygusu.

Birkaç fikir daha (hiçbiri mükemmel değildir, çünkü hiçbiri mükemmel değildir).

  • AntiDuplicate
  • , Dilini değiştirme yazarları bu güzel hileler kullanmak Skype kullanılan
  • Lisans sunucusu

Ve üzerinde çok fazla zaman kaybetmeyin, çünkü kraker tipik tekniklerle ilgili çok fazla deneyime sahiptir ve önünüzde birkaç adım ileridedir. Çok fazla kaynak kullanmak istemiyorsanız, muhtemelen programlama dilini değiştirin (Skype yolunu kullanın).


Donanım kilidinin yazılım kısmına saldırmanın oldukça mümkün olduğunu unutmayın.
Magnus Hoff

Evet, bu doğru, tek gerçek seçenek uygulamanın kısmen donanımda uygulanmasıdır (örneğin, bazı garip yazılım-VHDL uygulaması karışımı). Bu da çatlak olurdu ...
Anonim

Bir kamu / özel anahtar stratejisi uygulayan dongle'lar hakkında. Yalnızca donanım kilidinin özel anahtarı uygulamanın şifresini çözebilir ve çalıştırabilir.
mmcdole

Donanım anahtarı genellikle bunu yapar. Ancak dongle'a saldırabilirsiniz - klonlayın veya dongle ile konuşmaktan sorumlu yazılımı (atlatmak, devre dışı bırakmak, vb.).
Anonim

1
Benim durumumda buna gerçekten değdi. Kısmi Anahtar Doğrulamasını uyguladıktan ve mevcut bir ürün için kayıt anahtarı düzenini değiştirdikten sonra satışlar önemli ölçüde arttı. Tüm yazılımlar kırılabilir, soru sıradan yazılım korsanı için çıtayı ne kadar yükselttiğinizdir.
Adrian Grigore

9

İnsanların kodunuzu çalıştırabilmelerini istiyorsanız (ve eğer yapmıyorsanız, neden ilk etapta yazdınız?), CPU'larının kodunuzu yürütebilmesi gerekir. Edebilmek amacıyla yürütmek kod CPU edebilmek gerekiyor anlıyorum bunu.

CPU'lar aptal olduğu ve insanlar olmadığı için, insanların kodu da anlayabileceği anlamına gelir.

Kullanıcılarınızın kodunuzu almadığından emin olmanın tek bir yolu vardır: onlara kodunuzu vermeyin.

Bu iki şekilde elde edilebilir: Yazılım bir hizmet olarak ise (SaaS), sen üzerinde yazılımı çalıştırmak senin sunucu ve yalnızca kullanıcıların uzaktan erişmesine izin. Örneğin, Stack Overflow'un kullandığı modeldir. Stack Overflow kodlarını gizlemiyor eminim, ancak koda olamaz.

Diğer yol ise cihaz modelidir: kullanıcılarınıza kodunuzu vermek yerine, onlara kodu içeren bir bilgisayar verirsiniz. Oyun konsollarının, çoğu cep telefonunun ve TiVo'nun kullandığı model budur . Bunun yalnızca tüm yürütme yoluna "sahipseniz" işe yaradığını unutmayın: kendi CPU'nuzu, kendi bilgisayarınızı oluşturmanız, kendi işletim sisteminizi ve kendi CLI uygulamanızı oluşturmanız gerekir. Sonra ve ancak o zaman kodunuzu koruyabilirsiniz. (Ancak en ufak bir hata bile tüm korumalarınızı işe yaramaz hale getirecektir. Microsoft, Apple, Sony, müzik endüstrisi ve film endüstrisi bunu kanıtlayabilir.)

Veya hiçbir şey yapamazsınız, yani kodunuz telif hakkı yasasıyla otomatik olarak korunacaktır.


8

Ne yazık ki, bundan kaçmayacaksınız. En iyi seçeneğiniz kodunuzu C ve P / Invoke olarak yazmaktır .

Küçük bir catch-22 var, birisi uygulamanızı CIL'e koyabilir ve herhangi bir doğrulama / aktivasyon kodunu öldürebilir (örneğin, C kütüphanenize çağrı). C ile yazılmış uygulamaların da daha kalıcı bilgisayar korsanları tarafından tersine mühendislik uygulandığını unutmayın (bu günlerde oyunların ne kadar hızlı kırıldığına bakın). Hiçbir şey uygulamanızı koruyamaz.

Sonunda eviniz gibi çok çalışır, çok fazla çaba göstermesi için yeterince iyi koruyun (spagetti kodu burada yardımcı olacaktır) ve böylece saldırgan sadece bir sonraki kapı komşunuza (rekabet :)) hareket eder. Windows Vista'ya bakın, onu kırmanın 10 farklı yolu olmalı.

EXE dosyanızı şifreleyecek ve kullanıcının kullanmasına izin verildiğinde şifresini çözecek paketler var, ancak bir kez daha, şüphesiz çatlamış olan genel bir çözüm kullanıyor.

Aktivasyon ve kayıt mekanizmaları 'ortalama Joe:' yu atlamak için yeterli teknoloji bilgisine sahip olmayan insanları (veya bu nedenle atlayabileceklerini biliyorlar) hedefliyor. Krakerlerle uğraşmayın, ellerinde çok fazla zaman var.


1
Gerçekten bir dll içine kayıt kodunuzu dış kaynak rahatsız, DLL yazılımınızın her yeni sürümü ile farklı olması gerekir emin olun. Aksi takdirde, insanların yazılımınızı kırmasını daha da kolaylaştırırsınız. Tek yapmaları gereken DLL'nizi bir kez kırmak ve bunu sonraki tüm sürümler için kullanmaktır. Son kullanıcılar bile eski bir kırık DLL bulduktan sonra bunu yapabilirdi ve bu, kayıt mekanizmasını yönetilen kodunuza koymaktan bile daha kötü.
Adrian Grigore

8

Koruma satın almanın yanı sıra, siz (veya geliştiricileriniz) kopyalamaya karşı korumayı öğrenebilirsiniz.

Bunlar fikirler:

İlk önce kendini konsola yazan bir program yazmaya çalışın. Bu ünlü bir problem. Bu görevin temel amacı, kendinden referanslı kod yazma alıştırması yapmaktır.

İkincisi, bazı kodları diğer yöntemlerin CIL'sine güvenilir bir şekilde yeniden yazacak bir teknoloji geliştirmeniz gerekir .

Sanal bir makine yazabilirsiniz (henüz .NET'te ). Ve oraya biraz kod koy. Sonuçta, sanal makine kodu çalıştıran başka bir sanal makine çalıştırır. Bu, performansı çok fazla yavaşlatmamak için nadiren adlandırılan işlevlerin bir kısmı için.

Bazı mantığı C ++ / CLI içine yeniden yazın ve yönetilen kodu yönetilmeyen ile karıştırın. Bu, demontajı sertleştirecektir. Bu durumda, x64 ikili dosyalarını da sağlamayı unutmayın .


ayrıntılı olarak açıklayamaz mısın?
Priyank Bolia

7

Evet. Bu doğru. .NET kodu tersine mühendislik değilse ters mühendislik son derece kolaydır.

Şaşkınlık, yazılımınızı tersine çevirmeye çalışan insanlara bir sıkıntı katmanı ekleyecektir. Hangi sürüme sahip olduğunuza bağlı olarak, farklı koruma düzeyleri elde edersiniz.

Visual Studio, Dotfuscator'un bir sürümünü içerir . Paketlenmiş bir versiyon olduğu için, kesinlikle mümkün olan en güçlü şaşkınlığı elde edemezsiniz. Özellik listelerine bakarsanız, tam olarak neyi kaçırdığınızı (ve kodunuzu daha güvenli hale getirmek için uygulamanın tam olarak ne yapacağını) görürsünüz.

Orada diğer ücretsiz veya açık kaynak .NET obfuscators birkaç (ama kalite veya kullandıkları çeşitli yöntemler hakkında yorum yapamam):

Sonunda, hiçbir şey mükemmel değildir. Birisi gerçekten yazılımınızın nasıl çalıştığını görmek istiyorsa, yapacak.


11
Sadece "yazılımınızın nasıl çalıştığını gerçekten görmek istiyorlarsa, değil". Eğer umursarlarsa, muhtemelen bakmadan tahmin edebilirler. % 99,9 + yazılımın sihirli pixie toz algoritmaları yoktur. Programlamanın zor kısmı özel bir gizli teknik değildir. Sadece tüm parçaları hizalamak ve çalışmak.
Ken

9
@Ken - Şşşt! Dünyanın geri kalanına çoğu zaman sihirli pixie toz algoritmaları kullanmadığımızı bildiremezsiniz.
Justin Niessner

9
Justin: Aşk sihirli bir algoritma olarak mı sayılır? Aşk kılan benim programları özel. Sevgiyi parçalayabileceğini sanmıyorum.
Ken

Babel.NET artık ücretsiz değil. Sen en yaygın obfuscation (ücretsiz ve ticari olanları) bir listesini bulabilirsiniz burada .
InputOutput

6

Ürününüzü çatlamaya karşı TAMAMEN koruyamazsınız, ancak güvenlik düzeylerini en üst düzeye çıkarabilir / artırabilir ve yeni başlayanlar ve ara krakerler tarafından kırılmayı biraz zorlaştırabilirsiniz.

Ancak unutmayın, hiçbir şey kırılmaz değildir, sadece sunucu tarafındaki yazılım iyi korunur ve kırılamaz. Her neyse, uygulamanızdaki güvenlik seviyelerini arttırmak için, "hepsi değil" bazı krakerlerin uygulamalarınızı kırmasını önlemek için bazı basit adımlar atabilirsiniz. Bu adımlar, bu krakerlerin çıldırmasını ve belki de umutsuz olmasını sağlayacaktır:

  • Kaynak kodunuzu gizleyin, açıkçası bu kaynak kodunuzu dağınık ve okunamaz hale getirecektir.
  • Her iki saatte bir, 24 saat, bir gün, hafta, vb. Veya belki de kullanıcının yaptığı her işlemden sonra uygulamanızın içinde birkaç rastgele kontrol rutini tetikleyin.
  • Yayımlanan uygulamanızın MD5 sağlama toplamını sunucunuza kaydedin ve geçerli dosya MD5 sağlama toplamını sunucu tarafınızdaki gerçekle kontrol edip rastgele tetiklenmesini sağlayan bir rutin uygulayın. MD5 sağlama toplamı değiştirildiyse, bu kopyanın korsan olduğu anlamına gelir. Şimdi onu engelleyebilir veya engellemek için bir güncelleme yayınlayabilirsiniz.
  • Bazı kodlarınızın (işlevler, sınıflar veya belirli rutinler) gerçekten değiştirilip değiştirilmediğini veya değiştirilip değiştirilmediğini ve hatta kaldırıldığını kontrol edebilen bir rutin yapmaya çalışın. Ben diyorum (kod bütünlüğü kontrolü).
  • Uygulamanızı paketlemek için ücretsiz bilinmeyen paketleyicileri kullanın. Veya paranız varsa Thamida veya .NET Reactor gibi ticari çözümlere gidin . Bu uygulamalar düzenli olarak güncellenir ve bir kraker uygulamanızı açtıktan sonra, bu şirketlerden yeni bir güncelleme alabilirsiniz ve yeni güncellemeyi aldıktan sonra, programınızı paketleyip yeni bir güncelleme yayınlamanız yeterlidir.
  • Güncellemeleri düzenli olarak yayınlayın ve müşterinizi en son güncellemeyi indirmeye zorlayın.
  • Sonunda başvurunuzu çok ucuz hale getirin. Çok pahalı yapmayın. İnanın bana, daha mutlu müşteriler alacaksınız ve krakerler sadece başvurunuzu terk edecek, çünkü çok ucuz bir uygulamayı kırmak için zaman ayırmaya değmez.

Bunlar, yeni başlayanların ve ara krakerlerin uygulamanızı kırmasını önlemek için basit yöntemlerdir. Uygulamanızı korumak için daha fazla fikriniz varsa, bunları uygulamaktan çekinmeyin. Sadece krakerlerin zor yaşamalarını sağlayacak ve hayal kırıklığına uğrayacaklar ve sonunda başvurunuzu terk edecekler, çünkü zamanlarına değmez.

Son olarak, iyi ve kaliteli uygulamaları kodlamak için zaman harcamayı düşünmelisiniz. Karmaşık güvenlik katmanlarını kodlamak için zaman kaybetmeyin. İyi bir kraker uygulamanızı kırmak istiyorsa, ne yaparsanız yapın ...

Şimdi git ve krakerler için bazı oyuncaklar uygula ...


5

Orada Salamander .NET framework olmadan uygulamaları dağıtabilir Remotesoft gelen yerli .NET derleyici ve bağlayıcı olduğunu,. İddialarına ne kadar iyi uyduğunu bilmiyorum.


Cevap oldukça kolay: Yazık ki, cevapların çoğu şaşkınlık hakkında konuşuyor. Şaşkınlık ilk önce (Reflektör benzeri) kodunuza bakmayı denemek için iyidir, hepsi bu. Bu fena değil. Ve tabii ki, bir SAAS uygulaması yazmanın yanı sıra, montaj kodunu anlayan gerçek hacker'ları durduran hiçbir şey yoktur (o zaman bile sunucunuzu hacklemeye çalışabilirler). Ama dahası var, Salamander, .NET Reactor gibi, C ++ derlenmiş Win32 .exe ile derlenen neredeyse aynı güvenlik formunu (belki) sağlayan araçlar var. Bu araçlardan hangisi en iyisi, henüz yargılayamıyorum.
Philm

5

Microsoft bir çözüm bulabilirse, korsan Windows sürümlerine sahip olmayacağız, bu yüzden hiçbir şey çok güvenli değil. İşte Stack Overflow'dan benzer bazı sorular ve bunları korumak için kendi yolunuzu uygulayabilirsiniz. Farklı sürümleri yayınlıyorsanız, farklı sürüm için farklı teknikler benimseyebilirsiniz, böylece ilk kırık olduğunda ikincisi devralabilir.


5

.NET Reaktörü

Güncelleme

Jared, de4dot'un onu koda edebileceğini iddia etti.

.NET Reactor, .NET derlemelerinizi CIL olarak anlaşılamayan ve varolan hiçbir aracın ayrışamadığı yönetilmeyen işlemlere dönüştürerek hassas fikri mülkiyetiniz için tam koruma sağlar. Bilgisayar korsanlarının, kaynağınızın anlaşılır bir biçimine erişimi yoktur.

Güçlü ve esnek .NET Reactor lisanslama özellikleri, donanım ve yazılım kilitlerini kullanarak lisans koşullarınızı zorlamanızı ve gelir akışınızı korumanızı sağlar. Lisans yöneticisi saniyeler içinde deneme sürümü veya kalıcı lisanslar oluşturabilir. Örneklerle tamamlanmış tam olarak belgelenmiş bir yazılım geliştirme kiti (SDK), lisanslama sistemini doğrudan kodunuzdan çağırmanıza izin vererek lisanslama sistemine özel uzantılar oluşturmanıza olanak tanır.


3
Bu adamlarla bir soru sormaya çalıştım, ürünleri hakkında yaşadım, ama hiç cevap vermediler. Ürünlerini denedin mi? Akıllı montaj ile gittim ve hem ürünleri hem de destekleri çok iyi. Ama daha önce de söylediğim gibi, şaşkınlık bir yol ama tam kanıt değil.
Priyank Bolia

1
Daha önce ürünleriyle ilgili bazı sorunlar yaşadım ve daha sonra groups.google.se/group/net-reactor-users'deki yüksek çözünürlüklü simgelerle ilgili bir soru sordum ve bir cevap ve düzeltme aldım, ancak şimdi zor görünüyorlar bağlantı kurmak. Kötü - harika bir ürün ve hala kullanıyorum
loraderon

2
"Mevcut araçlardan hiçbiri çözümlenemiyorsa", neden de4dot özellikler sayfasında desteklenen bir obfuscator / packer olarak listeleniyor ?: bitbucket.org/0xd4d/de4dot
Jared Thirsk

Muhtemelen eski bir ifade olduğu ve web sayfalarını güncellemedikleri için. Artık herhangi bir gizleme aracının kullanıcısı değilim.
loraderon

de4dot çok güçlü bir araçtır. Birkaç obfuscator'a karşı denedim ve harika bir iş çıkarıyor. Ancak, .NET Reactor (v6.0) korumalı dosyaları işleyemedi. Belki de4dot güncel değil.
InputOutput

4

İşte size bir fikir: Şirketiniz tarafından barındırılan ve yazılımınızın tüm örneklerinin bağlanması gereken bir sunucunuz olabilir. Sadece bir kayıt anahtarını bağlayıp doğrulamalarını sağlamak yeterli değildir - sadece kontrolü kaldıracaktır. Anahtar kontrolüne ek olarak, sunucunun istemcinin kendi başaramayacağı bazı önemli görevleri yerine getirmesini sağlamanız gerekir, bu nedenle kaldırmak imkansızdır. Bu elbette muhtemelen sunucunuzun çok fazla işlenmesi anlamına gelir, ancak yazılımınızın çalınmasını zorlaştıracaktır ve iyi bir anahtar şemanız (varsa sahipliği kontrol et, vb.) Varsayarsak, anahtarlar da zor olacaktır. çalmak. Bu, muhtemelen istediğinizden daha invazivdir, çünkü yazılımınızı kullanmak için kullanıcılarınızın internete bağlı olmasını gerektirir.


5
sunucu çalışmıyorsa veya kullanıcılar her zaman internet erişimine sahip değilse, yönteminiz sadece bir uygulamayı kullanmak için internet sunucularına sık sık gidiş-dönüş yaparak müşterileri hayal kırıklığına uğratır.
Priyank Bolia

Tamamen katılıyorum. Bu yüzden son satırımda "muhtemelen istediğinden daha istilacı ..." dedim. Ben sadece OP, müşterileri mutlu tutmak için en iyi yaklaşım değil, teknik olarak mümkün olduğunu düşündüğüm en iyi çözümü
sunuyordum

2010'un ilk çeyreğinde (bu cevabın yazılmasından birkaç ay sonra), oyun geliştirme şirketi Ubisoft bunu denedi ve görünüşe göre sunucu tarafındaki bileşenler üzerindeki yük o kadar büyüktü ki oyunlar oynanamazdı. SW genel izlenimi: "yükleme zahmeti, çevrimdışı, invaziv ve güvenilmez kullanılamaz ". Bu nedenle, sunucu tarafı işlemenin bir yol olduğuna karar verirseniz, gerçekten talebe göre ölçeklendirebileceğinizden emin olun.
Piskvor

3

İstemcide çalışan her şey çözülebilir ve kırılabilir. Gizleme sadece zorlaştırır. Başvurunuzu bilmiyorum, ama zamanın% 99'u çabaya değeceğini düşünmüyorum.


3

Bir uygulamayı tamamen güvenli hale getirmek imkansız, üzgünüm.



2

Kullanıcılarınızın% 99'undan fazlasının, nasıl çalıştığını görmek için çalıştırılabilir dosyalarınızı incelemekle ilgilenmeyeceğini unutmayın.

Çok az insanın denemeyi bile rahatsız edeceği ve çoğu obfuscatorun etrafında çalışılabileceği göz önüne alındığında, zaman ve çabaya değer mi?

Ürününüzü geliştirmek için zaman harcamanız daha iyi olur, böylece daha fazla kişi onu kullanmak ister.


2

Sadece bir uyarı eklemek için: gizleme kullanacaksanız, her şeyin hala çalışıp çalışmadığını kontrol edin! Gizleme, sınıf ve yöntem adları gibi şeyleri değiştirebilir. Dolayısıyla, belirli yöntemleri ve / veya sınıfları çağırmak için yansıma kullanırsanız (eklenti mimarisinde olduğu gibi) uygulamanız gizlendikten sonra başarısız olabilir. Ayrıca yığın izleri hataları izlemek işe yaramayabilir.


2

.NET ile yazılmış ve CIL olarak derlenmişse yansıtılabilir. Güvenlik bir endişe ve gizlenmeden kaçınılması durumunda, uygulamanızı, doğası gereği tersine mühendislik zor olan yönetilmeyen bir dil kullanarak yazmanızı öneririm.


2

Uygulamanın kurcalanmadığından nasıl emin olunur ve kayıt mekanizmasının tersine mühendislik yapılamayacağından nasıl emin olunur.

Her ikisinin de aynı basit cevabı var: Müşterileriniz (görünüşte) gibi güvenilmeyen taraflara nesne kodu dağıtmayın. Uygulamayı makinelerinizde barındırmanın mümkün olup olmadığı yalnızca ne yaptığına bağlıdır.

Bir web uygulaması değilse , belki bir uygulama sunucusuna (veya Windows için Uzak Masaüstü Bağlantısı , sanırım, Windows için) XH yönlendirerek SSH girişine izin verebilirsiniz .

Nerdy tipi kişilere nesne kodu verirseniz ve programınızın çatlamak için eğlenceli olabileceğini düşünüyorlarsa , kırık olsun. Kaçış yok.

Bana inanmıyorsanız, çatlamayan ve korsan olmayan yüksek profilli bir uygulamaya dikkat edin.

Donanım anahtarları ile giderseniz, üretimi daha pahalı hale getirecek ve kullanıcılarınız bunun için sizden nefret edecektir. Yazılım üreticileri size güvenmediği için 27 farklı USB şeyinizi takıp çıkarırken yerde sürünmek gerçek bir orospu.

Orada EXE kullanmak şifrelemek ve kullanıcı kullanmak için izin verildiğinde şifresini çözecek paketleri vardır

Tabii ki, bunun etrafındaki yol "can-I-use-it-it" testini kırmaktır, böylece her zaman doğru döner.

Kötü bir hile, programda başka bir yerde testi gerçekleştiren opcodların bayt değerlerini, değer doğru olmadığı sürece programın yüksek olasılıkla çökmesini sağlayacak kirli bir şekilde kullanmak olabilir. Yine de sizi belirli bir mimariye bağlı kılar :-(


bir çökme noktasının hata ayıklaması kolay değildir ve bu denetimi atlamak için .NET'teki kodu geçersiz kılar. Ayrıca .NET üzerinde opcodes nasıl değiştirecek, bu konuda ayrıntılı olabilir?
Priyank Bolia

Ah. Aklımda C hileleri vardı; örneğin, doğrulama işlevinin adresini alın, bu karakter dizisindeki ilk 10 baytı toplayın (işlev işaretçisini yayınlayın); herhangi bir f işlevini seçin ve [f adresinin eksi önceki toplamı] fptr içinde saklayın. Her zaman f'yi * olarak adlandırın (fptr + bu toplam). "Bu toplamı"
önceden hesaplayın

2

Sadece iyi bir uygulama yapın ve basit bir koruma sistemi kodlayın. Hangi korumayı seçtiğiniz önemli değil, tersine çevrilecek ... Bu yüzden çok fazla zaman / para harcamayın.


2

.NET söz konusu olduğunda, bir Windows Forms yayınlıyorsanız uygulaması (veya istemcinin Taşınabilir Yürütülebilir dosyaya sahip olduğu herhangi bir uygulama) yayınlıyorsanız, çatlayabilir.

.NET'e bağlı kalmak istiyorsanız ve kaynak kodunuzun alınma olasılığını en aza indirmek istiyorsanız , bunu Windows Forms uygulaması yapmak yerine bir web sunucusu üzerinde ASP.NET uygulaması olarak dağıtmayı düşünebilirsiniz .


2

Açıkçası, bazen kodu gizlememiz gerekir (örneğin, lisans sınıflarını kaydetme vb.). Bu durumda projeniz ücretsiz değildir. IMO, iyi bir avukat için ödeme yapmalısın.

Dotfuscator kodunuzu gizler ve .NET Reflector kodunu denediğinizde bir hata gösterir.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.