Yürütülebilir dosyaları tersine mühendislikten korumak mı?


210

C / C ++ kodumu sökme ve tersine mühendislikten nasıl koruyacağımı düşünüyorum. Normalde kodumda kendimi asla bu davranışı gözardı ediyorum; ancak üzerinde çalıştığım protokol çeşitli insanların güvenliği için hiçbir zaman denetlenmemeli veya anlaşılabilir olmamalıdır.

Şimdi bu benim için yeni bir konu ve internet tersine mühendislikten korunmak için gerçekten becerikli değil, tersine mühendisliği nasıl tersine çevireceğine dair tonlarca bilgiyi tasvir ediyor

Şimdiye kadar düşündüğüm bazı şeyler:

  • Kod yerleştirme (gerçek işlev çağrılarından önce ve sonra sahte işlevleri çağırmak)
  • Kod engelleme (ikili kodun sökülmesini sağlar)
  • Kendi başlangıç ​​yordamlarımı yaz (hata ayıklayıcıların bağlanması daha zor)

    void startup();  
    int _start()   
    {  
        startup( );  
        exit   (0)   
    }  
    void startup()  
    {  
        /* code here */  
    }
  • Hata ayıklayıcıları için çalışma zamanı denetimi (ve algılanırsa çıkışı zorla)

  • Fonksiyonlu trambolin

     void trampoline(void (*fnptr)(), bool ping = false)  
     {  
       if(ping)  
         fnptr();  
       else  
         trampoline(fnptr, true);  
     }
  • Anlamsız tahsisler ve deallocations (yığın çok değişiyor)

  • Anlamsız kukla aramalar ve trambolin (sökme çıkışında ton atlama)
  • Tonlarca döküm (karıştırılmış sökme için)

Demek istediğim bunlar düşündüğüm şeylerden bazıları, ancak hepsi doğru zaman çerçevesi göz önüne alındığında kod analistleri tarafından çözülebilir ve çözülebilir. Başka alternatifim var mı?


172
"ancak üzerinde çalıştığım protokol, çeşitli insanların güvenliği için hiçbir zaman denetlenmemeli veya anlaşılabilir olmamalıdır." - iyi şanslar.
Amber

62
Uygulamanızı tersine çevirmek zorlaştırabilirsiniz. Diğer adamın elinde bitlerinin önemli bir kısmı olduğu sürece bunu imkansız kılamazsın. Tam güvenlik garantisi konusunda dikkatli olun, özellikle de hayat tehlikede ise, teslim edemezsiniz.
Michael Petrotta

127
Bilgisayarınız kodu anlayabiliyorsa, bir kişi de anlayabilir.
Orbit'te Hafiflik Yarışları

78
Kodu Açık Kaynak yapın ve hiç kimse kodu tersine çevirmeyecektir.
kullanıcı bilinmiyor

28
"Belirsizlik nedeniyle güvenlik hiç işe yaramadı."
bot47

Yanıtlar:


151

Amber'in söyledikleri tam olarak doğru. Tersine mühendisliği zorlaştırabilirsiniz, ancak asla önleyemezsiniz. Tersine mühendisliğin önlenmesine dayanan "güvenliğe" asla güvenmemelisiniz .

Bununla birlikte, gördüğüm en iyi tersine-mühendislik teknikleri kodu şaşırtmaya değil, insanların kodun nasıl çalıştığını anlamak için genellikle kullandıkları araçları kırmaya odaklandı. Sökücüler, hata ayıklayıcılar, vb. Kırmak için yaratıcı yollar bulmak, sadece korkunç spagetti kodu topakları üretmekten daha etkili ve aynı zamanda entelektüel olarak daha tatmin edici olabilir. Bu, belirli bir saldırganı engellemek için hiçbir şey yapmaz, ancak J Random Cracker'ın uzaklaşıp daha kolay bir şey üzerinde çalışma olasılığını artırır.


14
Bunu anlıyorum ve Skype güvenliği hakkında birkaç makale okudum ve Skype'ın protokolümü önlemekten ziyade korumak için bir yöntem olarak zaten denediği fikirleri de düşünüyorum. Skype için açık koşullar göz önüne alındığında yeterince değerli olduğu kanıtlanmış bir şey.
graphitemaster

8
Skype aslında akla gelen ilk örnektir, bu yüzden zaten yöntemlerini taklit etmeye çalıştığınıza sevindim.
Ricket

176

ancak bunların hepsi, doğru zaman dilimi göz önünde bulundurularak kod analizcileri tarafından çözümlenebilir ve çözülebilir.

İnsanlara çalıştırabilecekleri bir program verirseniz, yeterli zaman verildiğinde programı tersine çevirebilirler. Programların doğası budur. İkili onu deşifre etmek isteyen biri için kullanılabilir olur olmaz, sonunda tersine mühendislik önleyemezsiniz. Sonuçta, bilgisayar onu çalıştırmak için deşifre edebilmelidir ve insan sadece daha yavaş bir bilgisayardır.


113
+1. Apple II'deki kopya korumanın görkemli günlerini, obfuscators ve krakerler arasındaki sürekli artan savaşı, disketin step motoruyla çılgın hileleri ve belgesiz 6502 talimatlarını ve daha fazlasını okuyun ... uyku, çünkü neredeyse bu kadar özenli bir şey uygulamayacaksınız ve sonunda hepsi çatladı.
Nemo

2
bir simülatörü kullanmak daha kolay ve görsel olarak veya bir sökücü ile mühendis tersine çevirmek daha iyi görünürlük elde etmek. Güvenlik kullandığınız donanıma dahil edilmemişse, dünyanın tersine mühendisliği tersine çevirmek ve ortaya çıkan her şeyi yenmek için yaklaşık iki gün ila iki hafta arasında ortalama olduğunu düşünüyorum. Bunu oluşturmak ve uygulamak iki günden fazla sürüyorsa, çok fazla zaman harcadınız.
old_timer

5
Günümüzde makul şekilde çalışan tek DRM, bir anahtar ile bir anahtarın yalnızca bir vakasının etkin olduğunu doğrulayan bir internet sunucusunun birleşimidir.
Thorbjørn Ravn Andersen

2
@Rotsor: Bilgisayar bunu anlayamıyor çünkü bu tür zekayı bir algoritmaya indiremedik (henüz), bir tür fiziksel veya teknolojik engel olduğu için değil. İnsan bunu anlayabiliyor, çünkü bilgisayarın yapabileceği her şeyi (daha yavaş da olsa) ve nedenini yapabiliyor .
Adam Robinson

3
Bu noktada, yalnızca kontrol ettiğiniz bir ortamda mevcut değilse, birisi bilgisayarı tersine mühendislik yapmaya çalışacaktır.
Amber

41

Güvenli Net Sentinel (eski adı Aladdin). Uyarılar olsa da - API'leri berbat, dokümantasyon berbat ve her ikisi de SDK araçlarına kıyasla harika.

Donanım koruma yöntemini ( Sentinel HASP HL ) yıllardır kullandım. Yazılım için 'lisans' görevi gören tescilli bir USB anahtarlık gerektirir. SDK'ları, yürütülebilir dosyalarınızı ve kitaplıklarınızı şifreler ve gizler ve uygulamanızdaki farklı özellikleri, tuşa yazılan özelliklere bağlamanızı sağlar. Lisans veren tarafından sağlanan ve etkinleştirilen bir USB anahtarı olmadan, yazılım şifresini çözemez ve dolayısıyla çalışmaz. Anahtar, sanal bir anahtar oluşturmayı veya çalışma zamanı sarıcısı ile anahtar arasındaki iletişimi kurcalamayı zorlaştırmak için özelleştirilmiş bir USB iletişim protokolü bile (bilgi alanım dışında bir aygıt sürücüsü adamı değilim) kullanıyor. SDK'ları geliştirici dostu değildir ve ekleme koruması ile otomatik bir oluşturma sürecini entegre etmek oldukça acı vericidir (ancak mümkün).

HASP HL ​​korumasını uygulamadan önce, dotfuscator 'korumalarını' üründen çıkaran bilinen 7 korsan vardı. HASP korumasını, gerçek zamanlı olarak video üzerinde ağır hesaplama yapan yazılıma büyük bir güncelleme ile aynı zamanda ekledik. Profilleme ve kıyaslamadan anlatabileceğim en iyi şey olarak, HASP HL ​​koruması yoğun hesaplamaları sadece% 3 oranında yavaşlattı. Bu yazılım yaklaşık 5 yıl önce piyasaya sürüldüğünden, ürünün yeni bir korsanı bulunamadı. Koruduğu yazılım, pazar segmentinde yüksek talep görüyor ve müşteri, mühendisleri aktif olarak tersine çevirmeye çalışan (şimdiye kadar başarı olmadan) birkaç rakibin farkında. Yazılım korumasını kırmaya yönelik bir hizmetin reklamını yapan Rusya'daki birkaç gruptan yardım istemeye çalıştıklarını biliyoruz,

Son zamanlarda, HL ürününe aşina iseniz çalışmaya başlamak için yeterince basit olan daha küçük bir projede yazılım lisans çözümlerini (HASP SL) denedik. İşe yarıyor gibi görünüyor; rapor edilmiş bir korsanlık olayı olmadı, ancak bu ürün talep çok daha düşük.

Tabii ki, hiçbir koruma mükemmel olamaz. Birisi yeterince motive olmuş ve yakmak için ciddi parası varsa, eminim HASP tarafından sağlanan korumalar atlatılabilir.


19
Moderatör Notu: Bu cevabın altındaki yorumlar, antagonistik gürültüye kazma nedeniyle kaldırılmıştır.
Tim Post

2
Deneyim için +1, ancak bunun mükemmel olmadığını tekrarlamak istiyorum. Maya (3D suite), korsanları çok uzun süre caydırmayan bir donanım dongle'ı (HASP olup olmadığından emin değil) kullandı. Bir irade olduğunda, bir yol var.
Robert Fraser

1
AutoCAD, birçok kez kırılmış benzer bir sistem kullanır. HASP ve bunun gibi diğerleri dürüst insanları dürüst tutacak ve sıradan korsanlığı önleyecektir. Bir sonraki milyarlarca dolarlık tasarım ürününü oluşturuyorsanız, her zaman uğraşmanız gereken krakerleriniz olacaktır. Bu, azalan getirilerle ilgili - yazılım korumanızı kırmak için kaç saat çaba harcamanız gerekiyor?
RyanR

6
Ayrıca, HASP güvenlikli yazılım kullanan birisinin bakış açısına uymak istiyorum. HASP'ler , son kullanıcı için kıçından kraliyet ağrısıdır . Bir Dallas iButton ve Aladdin HASP ile uğraştım ve her ikisi de gerçekten buggy idi ve yazılımın rastgele çalışmayı durdurmasına neden oldu, HASP'nin bağlantısını kesip yeniden bağlamayı gerektiriyordu.
Sahte İsim

4
Ayrıca, HASP güvenlik önlemlerinin kod gizlemesinden sonra daha güvenli olmadığı mutlaka belirtilmelidir - mühendisleri tersine çevirmek için farklı bir yöntem gerektirdiklerinden emin olun, ancak bunları tersine çevirmek çok mümkündür - Bkz: flylogic.net/blog/?p=14 flylogic.net/blog/?p=16 flylogic.net/blog/?p=11
Sahte İsim

22

Özellikle değişken kelime uzunluğu komut setlerinde en iyi anti-sökücü püf noktaları C değil montajcı / makine kodundadır. Örneğin

CLC
BCC over
.byte 0x09
over:

Sökücü, çok baytlı bir komutta bir dal varış yerinin ikinci bayt olması sorununu çözmelidir. Bir komut seti simülatörünün sorunu olmayacak. C'den kaynaklayabileceğiniz hesaplanmış adreslere dallanma, demontajı imkansız hale getirir. Komut seti simülatörü onunla hiçbir problem yaşamayacak. Şube hedeflerini sıralamak için bir simülatör kullanmak, sökme işlemine yardımcı olabilir. Derlenmiş kod bir sökücü için nispeten temiz ve kolaydır. Bence bazı meclisler gerekli.

Sanırım Michael Abrash'in Meclis Dili Zen'in başlangıcına yakındı, burada basit bir sökücü ve hata ayıklayıcı olmayan bir hile gösterdi. 8088/6'da önceden yaptığınız bir kuyruk vardı, bir sonraki talimatı değiştiren bir talimat veya bir çift ileride. Tek adımda değiştirilmiş talimatı uyguladıysanız, talimat seti simülatörünüz donanımı tam olarak simüle etmediyse, değiştirilmiş talimatı uyguladınız. Normalde çalışan gerçek donanımda gerçek talimat zaten kuyrukta olurdu ve değiştirilen bellek konumu, bu talimat dizisini tekrar yürütmediğiniz sürece herhangi bir hasara neden olmaz. Boru hattı işlemcileri bir sonraki talimatı aldığından bugün hala böyle bir numara kullanabilirsiniz. Ya da donanımın ayrı bir talimatı ve veri önbelleği olduğunu biliyorsanız, bu kodu önbellek satırına düzgün bir şekilde hizalarsanız, bir dizi baytı önceden değiştirebilirsiniz, değiştirilen bayt talimat önbelleğinden değil, veri önbelleğinden yazılmaz ve uygun önbellek simülatörlerine sahip olmayan bir talimat seti simülatörü düzgün yürütülemez. Bence sadece yazılım çözümleri sizi çok ileriye götürmeyecek.

Yukarıdakiler eski ve iyi biliniyor, zaten bu tür şeyler üzerinde çalışıp çalışmadıklarını bilmek için mevcut araçlar hakkında yeterince bilgim yok. Kendini değiştiren kod hata ayıklayıcıyı açıp kapatabilir, ancak insan sorunu daraltabilir / küçültebilir ve daha sonra kendi kendini değiştiren kodu görebilir ve onun etrafında çalışabilir.

Bilgisayar korsanlarının örneğin bir şeyleri çözmek için yaklaşık 18 ay süreceklerdi. Şimdi ortalama 2 gün ila 2 hafta arasındadır (motive edilmişse) (mavi ışın, iphone, vb.). Bu, güvenlik için birkaç günden fazla zaman harcıyorsam, muhtemelen zamanımı boşa harcıyorum demektir. Alacağınız tek gerçek güvenlik donanımdır (örneğin, talimatlarınız şifrelenir ve yalnızca çipin içindeki işlemci çekirdeği, yürütmeden hemen önce, şifresi çözülen talimatları gösteremeyecek şekilde çözer). Bu size günler yerine aylar alabilir.

Ayrıca Kevin Mitnick'in The Art of Deception kitabını okuyun. Böyle bir kişi bir telefon alabilir ve sizin ya da bir iş arkadaşınızın, sistemin başka bir bölümündeki bir yönetici ya da başka bir iş arkadaşı ya da donanım mühendisi olduğunu düşünerek sırlarını sisteme teslim etmesini sağlayabilir. Ve güvenliğiniz patladı. Güvenlik sadece teknolojiyi yönetmek değil, insanları da yönetmektir.


1
Ayrıca, bir güvenlik boşluğu bulmak için kaynak koduna (hatta demonte kaynak koduna) erişiminizin olması gerekmez. Kazayla ya da çoğu deliğin koddaki aynı problemlerden (tampon taşmaları gibi) gelmesi olabilir.
asmeurer

2
Kendini değiştiren kodla ilgili büyük sorunlar var. Çoğu modern işletim sistemi / donanım, çok yüksek ayrıcalık olmadan bunu yapmanıza izin vermez, önbellek sorunları olabilir ve kod iş parçacığı için güvenli değildir.
Martin James

1
Modern x86 işlemcilerde, bunun gibi püf noktaları genellikle performans için kötüdür. Birden fazla komutun bir parçası olarak aynı bellek konumunu kullanmanız, muhtemelen yanlış tahmin edilen bir kolla benzer bir etkiye sahiptir. Kendini değiştiren kod, işlemcinin talimat ve veri önbellekleri arasındaki tutarlılığı korumak için önbellek satırlarını atmasına neden olur (değiştirilen kodu değiştirdiğinizden daha sık yürütürseniz, yine de bir kazanç olabilir).
jilles

2
Buna 20 yıl önce rastladım. Neler olduğunu anlamak için neredeyse yarım saat sürdü. Daha uzun korumaya ihtiyacınız varsa çok iyi değil.
Bo Persson

1
"Gerçek talimat zaten kuyrukta olacak ve değiştirilmiş hafıza konumu herhangi bir zarara yol açmayacaktı" Arada bir kesinti meydana gelene kadar, talimat boru hattını yıkayıncaya ve yeni kodun görünmesine neden oluncaya kadar. Artık gizliliğiniz meşru kullanıcılarınız için bir hataya neden oldu.
Ben Voigt

21

Örneğin, AES algoritmasını ele alalım . Çok, çok halka açık bir algoritma ve ÇOK güvenlidir. Neden? İki neden: Birçok akıllı insan tarafından gözden geçirildi ve "gizli" kısım algoritmanın kendisi değil - gizli kısım algoritmanın girdilerinden biri olan anahtar. Protokolünüzü, kodun kendisini gizli yapmaktan ziyade, kodunuzun dışında üretilen bir "sır" ile tasarlamak çok daha iyi bir yaklaşımdır. Kod, ne yaparsanız yapın her zaman yorumlanabilir ve (ideal olarak) üretilen sır, yalnızca büyük bir kaba kuvvet yaklaşımı veya hırsızlık yoluyla tehlikeye girebilir.

İlginç bir soru " Kodunuzu neden gizlemek istiyorsunuz?" Saldırganların algoritmalarınızı kırmasını zorlaştırmak mı istiyorsunuz? Kodunuzda sömürülebilir hatalar bulmalarını zorlaştırmak için? İlk etapta kod kırılmazsa, kodu gizlemenize gerek yoktur. Sorunun kökü çatlak yazılımdır. Sorununuzun kökünü düzeltin, sadece gizlemeyin.

Ayrıca, kodunuzu ne kadar kafa karıştırıcı yaparsanız, SİZİN için güvenlik hataları bulmak o kadar zor olacaktır. Evet, bilgisayar korsanları için zor olacak, ancak hataları da bulmanız gerekiyor. Kodun yıllarca sürdürülmesi kolay olmalı ve iyi yazılmış açık kodların bile korunması zor olabilir. Daha da kötüleşme.


3
Sağduyu için +1: daha iyi bir sistem tasarlayabildiğinizde neden kendiniz için daha zor hale getirebilirsiniz.
Necrolis

1
Her zaman dediğim gibi, her şeyi sunucu tarafında tutarsanız, daha güvenli
liamzebedee

20

Kodu tersine mühendislikle zorlaştırmaya kod gizleme denir.

Bahsettiğiniz tekniklerin çoğunun etrafında çalışmak oldukça kolaydır. Bazı işe yaramaz kod eklemeye odaklanırlar. Ancak işe yaramaz kodun algılanması ve kaldırılması kolaydır, böylece temiz bir program bırakırsınız.

Etkili bir gizleme için, programınızın davranışını yürütülen gereksiz bitlere bağlı hale getirmeniz gerekir. Örneğin, bunu yapmak yerine:

a = useless_computation();
a = 42;

Bunu yap:

a = complicated_computation_that_uses_many_inputs_but_always_returns_42();

Veya bunu yapmak yerine:

if (running_under_a_debugger()) abort();
a = 42;

Bunu yapın (nerede running_under_a_debuggerkodun bir hata ayıklayıcı altında çalışıp çalışmadığını test eden bir işlev olarak kolayca tanımlanmamalıdır - yararlı hesaplamaları hata ayıklayıcı algılama ile karıştırmalıdır):

a = 42 - running_under_a_debugger();

Etkili şaşkınlık sadece derleme aşamasında yapabileceğiniz bir şey değildir. Derleyici ne yapabilirse yapsın, bir kod çözücü yapabilir. Elbette, ayrıştırıcıların yükünü artırabilirsiniz, ancak çok uzağa gitmeyecek. Etkili gizleme teknikleri, var oldukları ölçüde, gizlenmiş kaynağı 1. günden itibaren yazmayı içerir. Kodunuzu kendiniz değiştiriniz. Çok sayıda girişten türetilmiş hesaplanmış atlamalarla kodunuzu boşaltın. Örneğin, basit bir çağrı yerine

some_function();

bunu, bitlerin tam olarak beklenen düzenini bildiğiniz yerde yapın some_data_structure:

goto (md5sum(&some_data_structure, 42) & 0xffffffff) + MAGIC_CONSTANT;

Gizleme konusunda ciddiyseniz, planlamanıza birkaç ay ekleyin; şaşkınlık ucuz değildir. Ve insanların kodunuzu tersine mühendislikten kaçınmanın en iyi yolunun, rahatsız etmemek için işe yaramaz hale getirmektir. Bu basit bir ekonomik husustur: eğer kendileri için değer maliyetten daha büyükse tersine mühendislik yaparlar; ancak maliyetlerini yükseltmek de maliyetinizi çok artırır, bu yüzden onlara değeri düşürmeyi deneyin.

Şimdi size şaşırtmanın zor ve pahalı olduğunu söyledim , zaten bunun sizin için olmadığını söyleyeceğim . Sen yaz

üzerinde çalıştığım mevcut protokol, çeşitli insanların güvenliği için hiçbir zaman denetlenmemeli veya anlaşılabilir olmamalıdır

Bu kırmızı bir bayrak kaldırıyor. It adlı gizli tutarak güvenliği çok kötü bir sicile sahiptir. Protokolün güvenliği protokolü bilmeyen kişilere bağlıysa, zaten kaybettiniz .

Önerilen Kaynaklar:


1
@Gilles, bu senin ifaden, çok güçlü, bu yüzden kanıt yükü senin üstünde. Ancak, basit bir örnek vereceğim: 2+2derleyici tarafından basitleştirilebilir 4, ancak decompiler onu geri getiremez 2+2(ya gerçekte olsaydı 1+3?).
Rotsor

7
@Rotsor 4ve 2+2bunlar bu nedenle, gözlemsel olarak eşdeğerdir aynı , bu amaç için yani programın ne yaptığını anlamaya. Evet, elbette, kod çözücü kaynak kodunu yeniden yapılandıramaz, ancak bu önemsizdir. Bu soru-cevap davranışı yeniden yapılandırmakla ilgilidir (algoritma ve daha kesin olarak bir protokol).
Gilles 'SO- kötü olmayı kes

1
Davranışı yeniden yapılandırmak için hiçbir şey yapmanız gerekmez. Program zaten var! Ne genellikle gerek (bir 2 yerine gibi o protokol ve değişim şey anlamaktır 2+23 ile, veya değiştirin +bir ile *).
Rotsor

1
Davranışsal olarak eşdeğer tüm programları aynı şekilde değerlendirirseniz, evet, derleyici hiçbir şey yapamaz çünkü sadece bir girinti dönüşümü gerçekleştirir. Decompiler de yine bir kimlik dönüşümü olduğu için işe yaramaz. Ancak bunu yapmazsanız, 2+2-> 4derleyici tarafından gerçekleştirilen geri döndürülemez dönüşümün geçerli bir örneğidir. Anlamayı daha kolay veya daha zor hale getirmesi ayrı bir argüman.
Rotsor

2
@Gilles Elma ile benzetmenizi uzatamıyorum çünkü yapısal olarak farklı ama davranışsal olarak eşit bir elma hayal edemiyorum. :)
Rotsor

13

Çoğu zaman, ürününüzün tersine mühendislik korkusu yanlış yerleştirilmiştir. Evet, ters mühendislik olabilir; ama kısa bir süre içinde o kadar meşhur olacak ki, bilgisayar korsanları engg'i tersine çevirmeye değer bulacaklar. o ? (bu iş, önemli kod satırları için küçük bir zaman etkinliği değildir).

Gerçekten para kazananı olursa, patent ve / veya telif hakları gibi yasal yolları kullanarak onu korumak için yeterli para toplamış olmalısınız .

IMHO, alacağınız temel önlemleri alın ve bırakın. Gerçekten iyi bir iş çıkardığınız anlamına gelen tersine mühendislik noktası haline gelirse, bunun üstesinden gelmek için daha iyi yollar bulacaksınız. İyi şanslar.


1
Yani, bu uygulanabilir ve uygulanabilir bir cevaptır, ancak başkalarının ürününüzü sizin için korumasını sağlamak için koruma ve birkaç milyon gelir elde etmek arasında çizdiğiniz çizgi gerçekten uzun bir çizgidir.
graphitemaster

12

Http://en.wikipedia.org/wiki/Security_by_obscurity#Arguments_against sayfasını okuyun . Eminim başkaları muhtemelen belirsizliğin neden güvenliğin kötü bir şey olduğuna dair daha iyi bir kaynak verebilir.

Modern kriptografik teknikler kullanarak, sisteminizin açık olması tamamen mümkün olmalıdır (açık olması gerektiğini söylemeliyim , sadece olması gerektiği gibi) ve şifreleme algoritması olmadığı sürece hala tam güvenliğe sahip olmak bir delik (Eğer iyi bir tercih değil olasılıkla ise) sahip, özel anahtarlar / şifreleri gizli kalır ve sen (kodunuzda güvenlik açıkları yok bu sen endişe verici hakkında olması gereken budur).


2
Buna katılıyorum. Bence kavramsal ya da tasarım probleminiz olabilir. Özel-ortak anahtar çifti çözümüne sahip bir analog var mı? Özel anahtarı asla ifşa etmezsiniz, güvenli istemcisi tarafından işlenen sahibi ile kalır. Güvenli kodu bilgisayarlarından uzak tutabilir ve sonuçları yalnızca kullanıcıya geri aktarabilir misiniz?
Dizzley

8

Temmuz 2013'ten bu yana , Amit Sahai'nin orijinal araştırmalarından kaynaklandığı anlaşılan kriptografik olarak sağlam gizleme ( Ayrılmazlık Gizleme şeklinde ) ilgisi yenilenmiştir .

Burada bazı damıtılmış bilgileri bulabilirsiniz Quanta Magazine makalesinde ve bu IEEE Spectrum makalesinde bulabilirsiniz .

Şu anda bu tekniği kullanmak için gerekli olan kaynak miktarı pratik değildir, ancak AFAICT fikir birliği gelecek hakkında oldukça iyimserdir.

Bunu çok rahat söylüyorum, ancak gizleme teknolojisini içgüdüsel olarak reddetmeye alışkın olan herkese - bu farklı. Gerçekten çalıştığı ve pratik hale getirildiği kanıtlanırsa, bu sadece şaşkınlık için değil, gerçekten de büyüktür.


7

Kendinizi bilgilendirmek için, kod gizleme hakkındaki akademik literatürü okuyun . Arizona Üniversitesi'nden Christian Collberg bu alanda saygın bir bilgindir; Harvard Üniversitesi'nden Salil Vadhan da iyi çalışmalar yaptı.

Bu literatüre arkasında değilim, ama sen çalıştırır bu kodu görmesini ataklara karşı korumak değil, ancak kod ile onu çevreleyen ki ben farkındayım temel fikir değil yürütülür ve maliyeti kodunuzun hangi parçalarının yürütüldüğünü ve hangilerinin yürütülmediğini keşfetmek için bir saldırgan üstel süresi (en iyi bilinen teknikler kullanılarak).


7

" Program gizleme ve bir defalık programlar " adlı yeni bir makale var. " . Uygulamanızı korumak konusunda gerçekten ciddiyseniz. Genel olarak makale, basit ve evrensel donanımların kullanılmasıyla teorik imkansızlık sonuçları etrafında dönmektedir.

Ekstra donanım gerektirmeyi göze alamıyorsanız , aynı işlevselliğe ve aynı boyuta sahip tüm programlar arasında teorik olarak mümkün olan en iyi gizlemeyi " En iyi mümkün olan gizleme hakkında" veren başka bir makale daha vardır . Ancak makale, bilgi teorisinin mümkün olan en iyi şekilde polinom hiyerarşisinin çöküşü anlamına geldiğini göstermektedir.

Eğer bu sonuçlar ihtiyaçlarınız için işe yaramıyorsa, bu makaleler size en azından ilgili literatürde yürümeniz için yeterli bibliyografik yönlendirme sağlamalıdır.

Güncelleme: Ayrıştırılamayan gizleme adı verilen yeni bir gizleme fikri imkansızlık sonucunu azaltabilir (kağıt)


6

Birisi ikilinizi tersine çevirmek için zaman harcamak istiyorsa, onları durdurmak için yapabileceğiniz hiçbir şey yoktur. Orta derecede zorlaştırabilirsin ama bu kadar. Bunu gerçekten öğrenmek istiyorsanız, http://www.hex-rays.com/idapro/ kopyasını edinin ve birkaç ikiliyi parçalara ayırın.

CPU'nun kodu yürütmesi gerektiği gerçeği geri alma işleminizdir. CPU yalnızca makine kodunu yürütür ... ve programcılar makine kodunu okuyabilir.

Bununla birlikte, muhtemelen başka bir şekilde çözülebilecek farklı bir sorununuz var. Neyi korumaya çalışıyorsun? Sorununuza bağlı olarak, ürününüzü korumak için muhtemelen şifreleme kullanabilirsiniz.


6

Doğru seçeneği seçebilmek için aşağıdaki hususları düşünmelisiniz:

  1. "Yeni kullanıcıların" ücretini ödemek istemediğini, ancak yazılımınızı kullandığını düşünüyor musunuz?
  2. Mevcut müşterilerin sahip olduklarından daha fazla lisansa ihtiyacı olması muhtemel mi?
  3. Potansiyel kullanıcılar ne kadar ödemeye hazır?
  4. Kullanıcı / eşzamanlı kullanıcı / iş istasyonu / şirket başına lisans vermek istiyor musunuz?
  5. Yazılımınızın yararlı olması için eğitime / özelleştirmeye ihtiyacı var mı?

5. sorunun cevabı "evet" ise, yasadışı kopyalar için endişelenmeyin. Zaten faydalı olmazlardı.

1. soruya verilen cevap "evet" ise, önce fiyatlandırmayı düşünün (3. soruya bakınız).

2. sorulara "evet" yanıtını verirseniz, "kullanım başına ödeme" modeli sizin için uygun olabilir.

Deneyimlerime göre, kullanım başına ödeme + özelleştirme ve eğitim yazılımınız için en iyi korumadır, çünkü:

  • Yeni kullanıcılar fiyatlandırma modelinden etkilenmektedir (az kullanım -> az ödeme)
  • Eğitim ve kişiselleştirmeye ihtiyaç duydukları için neredeyse "anonim kullanıcı" yoktur.
  • Hiçbir yazılım kısıtlaması potansiyel müşterileri korkutmaz.
  • Mevcut müşterilerden sürekli bir para akışı var.
  • Uzun vadeli bir iş ilişkisi nedeniyle müşterilerinizden gelişim için değerli geri bildirimler alırsınız.

DRM veya şaşırtmayı tanıtmayı düşünmeden önce, bu noktaları ve bunların yazılımınız için geçerli olup olmadığını düşünebilirsiniz.


Çok iyi bir tavsiye (ve ben bunu iptal ettim), ama bu özel soruya gerçekten
değinmiyor

5

Sanal bir makinedeki korumalı kod ilk başta mühendisleri tersine çevirmek imkansız görünüyordu. Themida Paketleyici

Ama artık o kadar güvenli değil .. Ve kodunuzu nasıl paketlerseniz kullanın, her zaman yüklü herhangi bir yürütülebilir dosyanın bir bellek dökümü yapabilir ve IDA Pro gibi herhangi bir sökücü ile sökebilirsiniz.

IDA Pro ayrıca üretilen kod daha bir işaretçi / adres matematiksel karışıklık gibi görünmesine rağmen C kaynak kodu transformatöre şık bir montaj kodu ile birlikte gelir .. orijinal ile karşılaştırırsanız tüm hataları düzeltebilir ve bir şey rip olabilir.


5

Zar yok, kodunuzu sökmeye karşı koruyamazsınız. Yapabileceğiniz şey, sunucuyu iş mantığı için ayarlamak ve uygulamanıza sağlamak için web hizmetini kullanmaktır. Tabii ki, bu senaryo her zaman mümkün değildir.


8
iyi, dedi ki, insanların kodunuzu demonte etmekten kaçınmanın tek yolu, hiçbir zaman fiziksel bir erişime sahip olmalarına izin vermemektir, bu da başvurunuzu yalnızca SAAS olarak sunmak, uzak istemcilerden istek almak ve işlenen verileri geri vermek anlamına gelir. Sunucuyu, bir timsah hendek ve 5 metrelik elektrikli tıraş bıçağı ile çevrili bir yeraltı sığınağına kilitli bir odaya yerleştirin, anahtarı 10 metrelik betonarme ile örtmeden önce anahtarı atın ve daha sonra ton kurmayı unutmadığınızı umun ağına izinsiz girişleri önlemek için yazılım sistemleri.
jwenting

6
Umarım asla sunucularını korumak için sözleşme alamadım
Colin Pickard

5

Tersine mühendislikten kaçınmak için, kodu kullanıcılara vermemelisiniz. Bununla birlikte, çevrimiçi bir uygulama kullanmanızı öneririm ... ancak (bağlam vermediğiniz için) sizin için anlamsız olabilir.


Bu gerçek bir çözüm ... yani taç mücevherlerinizi kendi VPS makinenizde kendi sunucunuza koyun ve istemciden (tarayıcı veya api istemcisi) bu sunucuya API çağrılarını
gösterin

5

Muhtemelen en iyi alternatif yine / şaşırtmaca baypas tarafından gerekli indirection başka düzeyini tanıtır sanallaştırma, kullanıyor, ancak SSpoke onun dediği gibi cevap , bu teknik, aynı zamanda% 100 güvenli değildir.


Mesele şu ki, nihai koruma elde edemezsiniz, çünkü böyle bir şey yoktur ve eğer olacaksa, uzun sürmez, bu da ilk etapta nihai koruma olmadığı anlamına gelir.

İnsan ne olursa olsun, sökülebilir.

Genellikle (uygun) sökülmenin genellikle (biraz veya daha fazla) daha zor bir görev olduğu doğrudur, bu yüzden rakibiniz daha yetenekli olmalıdır , ancak her zaman böyle kalitede birisinin olduğunu ve güvenli bir bahis olduğunu varsayabilirsiniz.

RE'lere karşı bir şey korumak istiyorsanız, RE'lerin kullandığı en az yaygın teknikleri bilmelisiniz.

Böylece kelimeler

İnternet tersine mühendislikten korunmak için gerçekten yararlı değildir, tersine mühendisliğin nasıl tersine çevrileceğine dair tonlarca bilgiyi tasvir eder

kötü tutumunu göster. Korumayı kullanmak veya gömmek için onu nasıl kıracağınızı bilmeniz gerektiğini söylemiyorum, ancak onu akıllıca kullanmak için zayıflıklarını ve tuzaklarını bilmelisiniz. Bunu anlamalısın .

(Korumayı yanlış kullanan yazılım örnekleri vardır, bu korumayı pratikte var olmaz. Belirsiz konuşmaktan kaçınmak için size internette kısaca açıklanan bir örnek vereceğim: CD-ROM v4'te Oxford İngilizce Sözlük İkinci Baskı. SecuROM'u aşağıdaki sayfada başarısız kullanmıştır: 16-, 32- veya 64-bit Windows ortamında CD-ROM'da Oxford İngilizce Sözlük (OED): Sabit disk kurulumu, hatalar, kelime işlemci makroları, ağ oluşturma, yazı tipleri ve böyle )

Her şey zaman alır.

Konuya yeniyseniz ve RE işlerine düzgün bir şekilde girebilmek için aylarınız veya yıllarınız yoksa, başkaları tarafından yapılan çözümlerle devam edin. Buradaki sorun açıktır, zaten oradalar, bu yüzden% 100 güvenli olmadıklarını zaten biliyorsunuz, ancak kendi yeni korumanızı yapmak, tersine mühendislik ve koruma (ama en azından şu anda değil).

Yazılım korumanın amacı, yenileri korkutmak, ortak RE'leri durdurmak ve başvurunuzun merkezine (umarım ilginç) yolculuğundan sonra deneyimli RE'nin yüzüne bir gülümseme koymaktır.

İş konuşmalarında bunun mümkün olduğunca rekabetin ertelenmesi olduğunu söyleyebilirsiniz.

( Black Hat 2006'da gösterilen Philippe Biondi ve Fabrice Desclaux'un Skype'taki Silver Needle sunumuna bir göz atın ).


Orada RE ile ilgili çok şey olduğunu biliyorsunuz, bu yüzden okumaya başlayın. :)

Sanallaştırma hakkında dedim, bu yüzden size EXETOOLS FORUM'un örnek bir iş parçacığına bir bağlantı vereceğim : En iyi yazılım koruyucusu: Themida veya Enigma Protector? . Sonraki aramalarda size yardımcı olabilir.


4

Herhangi bir kodun kırılmaz olduğunu düşünmüyorum ama ödüller birinin denemek istemek için harika olması gerekiyor.

Yapmanız gereken şeyler olduğunu söyledikten sonra:

  • Mümkün olan en yüksek optimizasyon seviyesini kullanın (tersine mühendislik sadece montaj sırasını elde etmekle ilgili değildir, aynı zamanda kodu anlamak ve C gibi daha üst düzey bir dile taşımakla da ilgilidir). Son derece optimize edilmiş kod takip etmek için b --- h olabilir.
  • Gerekenden daha büyük veri türlerine sahip olmadan yapıları yoğunlaştırın. Resmi kod sürümleri arasında yapı üyelerini yeniden düzenleyin. Yapılardaki yeniden düzenlenmiş bit alanları da kullanabileceğiniz bir şeydir.
  • Değiştirilmemesi gereken belirli değerlerin olup olmadığını kontrol edebilirsiniz (telif hakkı mesajı bir örnektir). Bir bayt vektörü "vwxyz" içeriyorsa, "abcde" içeren başka bir bayt vektörüne sahip olabilir ve farklılıkları karşılaştırabilirsiniz. Bunu yapan işlev vektörlere işaretçilerden geçirilmemeli, ancak diğer modüllerde (sözde-C kodu) "char * p1 = & string1 [539];" ve "char p2 = & string2 [-11731];". Bu şekilde, tam olarak iki dizeyi işaret eden herhangi bir işaretçi olmaz. Daha sonra karşılaştırma kodunda " (p1-539 + i) - * (p2 + 11731 + i) == bir değer" ile karşılaştırırsınız. Kraker, dize1'i değiştirmenin güvenli olduğunu düşünecektir, çünkü kimse ona başvurmuyor gibi görünüyor. Testi beklenmedik bir yere gömün.

Neyin kolay ve neyin zor olduğunu görmek için montaj kodunu kendiniz hacklemeye çalışın. Kodları tersine çevirmek ve hata ayıklamayı daha zor hale getirmek için denemeler yapabileceğiniz fikirler ortaya çıkmalıdır.


2
ilk noktanız bir anlam ifade etmiyor, optimize edilmiş kod, işi kesiyor, bu da tersine çevirmeyi kolaylaştırıyor (deneyimden söz ediyorum). üç nokta da zaman kaybı ve tuz değerinde ters mühendis bellek erişim kesme nasıl biliyorum. bu yüzden bir sistemi kendiniz tasarlamamak en iyisidir, ancak henüz 'çatlak' olmayan 3. parti kütüphanelerimiz, bir '
çaylak'ın

Görünüşe göre konu hakkında hiçbir şey bilmiyorum belki de kendim herhangi bir kod yazmak yerine yazılım geliştirme ihtiyaçları için sizin gibi bir profesyonel dönmeliyim.
Olof Forshell

4

Birçoğunun söylediği gibi: Normal bir CPU'da onları durduramazsınız, sadece geciktirebilirsiniz. Eski kripto öğretmenimin söylediği gibi: Mükemmel şifrelemeye ihtiyacınız yok, kodu kırmak kazançtan daha pahalı olmalı. Aynı şey sizin şaşkınlığınız için de geçerlidir.

Ancak 3 ek not:

  1. Tersine mühendisliği imkansız hale getirmek mümkündür, AMA (ve bu çok büyük ama), geleneksel bir cpu üzerinde yapamazsınız. Ayrıca çok fazla donanım geliştirme yaptım ve genellikle FPGA kullanılıyor. Virtex 5 FX'in üzerinde bir PowerPC CPU bulunur ve APU'yu donanımınıza kendi CPU opcodes'lerini uygulamak için kullanabilirsiniz. Bu özelliği, dışarıdan veya başka bir yazılımdan erişilemeyen PowerPC'ye yönelik talimatları gerçekten çözmek veya hatta donanımdaki komutu yürütmek için kullanabilirsiniz. FPGA, yapılandırma bit akışı için AES şifrelemesi oluşturduğundan, tersine mühendislik uygulayamazsınız (biri AES'i kırmayı başarırsa, ancak sanırım başka sorunlarımız var ...). Bu şekilde donanım IP satıcıları da çalışmalarını korurlar.

  2. Protokolden konuşuyorsun. Ne tür bir protokol olduğunu söylemezsiniz, ancak bir ağ protokolü olduğunda, en azından ağ koklamasına karşı korumalısınız. Bu gerçekten şifreleme ile yapabilirsiniz. Ancak, en / şifre çözmeyi yazılımın bir sahibinden korumak istiyorsanız, şaşkınlığa geri dönersiniz.

  3. Programınızın hata ayıklanamaz / çalıştırılamaz olmasını sağlayın. Bir tür hata ayıklama tespiti kullanmaya çalışın ve bunu örneğin bir formülde sihirli sabite bir hata ayıklama kaydı içeriği ekleyerek uygulayın. Programınız hata ayıklama modunda görünüyorsa normal çalışıyorsa, ancak tam bir yanlış hesaplama, işlem veya başka bir şey yaparsa çok daha zordur. Örneğin, gerçekten kötü bir kopya koruması olan bazı eko oyunlar biliyorum (kopya korumayı istemediğinizi biliyorum, ancak benzer): Çalınan sürüm, 30 dakikalık oyundan sonra mayınlı kaynakları değiştirdi ve aniden sadece bir tane aldınız kaynak. Korsan onu çatlattı (tersine değiştirdi) - çalışıp çalışmadığını kontrol etti ve volia serbest bıraktı. Bu tür hafif davranış değişimlerini tespit etmek çok zordur, özellikle. anında tespit için görünmez, sadece gecikir.

Sonunda şunu öneririm: Yazılımınızı tersine çeviren insanların kazancının ne olduğunu tahmin edin, bunu bir süreye dönüştürün (örneğin en ucuz Hint maaşını kullanarak) ve tersine mühendislik yapın, böylece zamanın daha büyük olması gerekir.


3

Çoğu insanın söylediklerinin aksine, sezgileri ve kişisel deneyimlerine dayanarak, kriptografik olarak güvenli program gizliliğinin genel olarak imkansız olduğunu düşünmüyorum.

Bu, benim açımdan göstermek için mükemmel bir gizlenmiş program ifadesinin bir örneğidir:

printf("1677741794\n");

Asla gerçekte ne yaptığı tahmin edilemez.

printf("%d\n", 0xBAADF00D ^ 0xDEADBEEF);

Bu konuda bazı imkansızlık sonuçları kanıtlayan ilginç bir makale var. Buna "Programların Gizlenmesi (Im) olasılığı Üzerine" denir .

Her ne kadar makale, programı uyguladığı işlevden ayırt edilemez kılan gizlemenin imkansız olduğunu kanıtlasa da, daha zayıf bir şekilde tanımlanan gizleme yine de mümkün olabilir!


7
1. Örneğiniz burada alakalı değildir; gösterdiğiniz iki program davranışsal olarak eşdeğerdir ve bu soru, bir programın davranışını bulmak, kaynak kodunu yeniden yapılandırmamakla ilgilidir (ki bu açıkça imkansızdır). 2. Bu makale teorik bir makaledir; mükemmel obfuscator'ı yazmak imkansızdır, ancak mükemmel dekomperi yazmak da imkansızdır (aynı nedenlerle mükemmel program analizörü yazmak imkansızdır). Pratikte, bu bir silahlanma yarışı: kim daha iyi (de) obfuscator yazabilir.
Gilles 'SO- kötü olmayı kes

1
@Gilles, (doğru) deobfüzyonun sonucu her zaman davranışsal olarak gizlenmiş koda eşdeğer olacaktır. Bunun sorunun önemine nasıl zarar verdiğini görmüyorum.
Rotsor

Ayrıca, silahlanma yarışı hakkında: bu, araştırmaya kimin daha fazla yatırım yaptığıyla değil, kimin haklı olduğuyla ilgilidir. Doğru matematiksel kanıtlar yanlış gitmez, çünkü biri gerçekten çok kötü olmasını ister.
Rotsor

1
Tamam, belki de pratikte silahlanma yarışı konusunda haklısın. Sanırım bunu yanlış anladım. :) Umarım bir çeşit kriptografik olarak güvenli bir gizlilik mümkündür.
Rotsor

İlginç bir gizlilik durumunda, saldırganın fiziksel erişime sahip olması (beyaz kutu gizleme) olan akıllı kartları deneyin. Yanıtın bir kısmı fiziksel yollarla erişimi sınırlamaktır (saldırgan gizli anahtarları doğrudan okuyamaz); ancak yazılım gizliliği de rol oynar, özellikle DPA gibi saldırıların faydalı sonuçlar vermemesi. Sunacak iyi bir referansım yok, üzgünüm. Cevabımdaki örnekler, bu alanda kullanılan tekniklerden belirsiz bir şekilde ilham alıyor.
Gilles 'SO- kötü olmayı bırak'

3

Müstehcenlik yoluyla güvenlik, ikimizden de daha zeki insanlar tarafından kanıtlandığı gibi çalışmaz. Müşterilerinizin iletişim protokolünü korumanız gerekiyorsa, o zaman ahlaki olarak açık olan ve uzmanlar tarafından tam olarak incelenen en iyi kodu kullanmak zorundasınız.

Bu, insanların kodu inceleyebileceği durum içindir. Uygulamanız gömülü bir mikroişlemcide çalışacaksa, mühürleme özelliğine sahip olanı seçebilirsiniz, bu da kodun incelenmesini veya çalışırken geçerli kullanım gibi önemsiz parametrelerden daha fazlasını gözlemlemeyi imkansız hale getirir. (Donanım istila teknikleri hariç, çipi dikkatlice söktüğünüz ve bireysel transistörlerdeki akımları incelemek için gelişmiş ekipman kullandığınız yerdir.)

Ben x86 için tersine mühendislik montajcısının yazarıyım. Soğuk bir sürpriz için hazırsanız, bana en iyi çabalarınızın sonucunu gönderin. (Web sitelerim aracılığıyla bana ulaşın.) Yanıtlarda gördüğüm az sayıda kişi bana önemli bir engel teşkil edecek. Karmaşık tersine mühendislik kodunun nasıl çalıştığını görmek istiyorsanız, tersine mühendislik zorlukları olan web sitelerini gerçekten incelemelisiniz.

Sorunuz biraz açıklama yapabilir. Bilgisayar kodu tersine mühendislik için uygunsa, bir protokolü gizli tutmayı nasıl beklersiniz? Protokolüm bir RSA şifreli mesaj (hatta ortak anahtar) göndermek olacaksa, protokolü gizli tutarak ne kazanırsınız? Tüm pratik amaçlar için, bir müfettiş bir dizi rastgele bitle karşı karşıya kalacaktır.

Groetjes Albert


3

Geleneksel tersine mühendislik teknikleri, kodla ilgili soruları cevaplamak için akıllı bir ajanın bir sökücü kullanma yeteneğine bağlıdır. Güçlü bir güvenlik istiyorsanız, ajanın bu tür cevapları almasını engelleyecek şeyleri yapmanız gerekir.

Bunu genel olarak çözülemeyen Durdurma Programına ("X programı durur mu?") Dayanarak yapabilirsiniz. Programınıza akıl yürütmesi zor programlar eklemek, programınızı akıl yürütmenizi zorlaştırır. Bu tür programları oluşturmak, onları parçalamaktan daha kolaydır. Ayrıca, muhakeme için çeşitli zorluk derecelerine sahip programlara kod da ekleyebilirsiniz; büyük bir aday takma adlarla ilgili akıl yürütme programıdır ("işaretçiler").

Collberg ve arkadaşları, bu konuları tartışan ve kod hakkında akıl yürütmeyi çok zorlaştırabilecek çeşitli "opak" tahminleri tanımlayan bir makaleye ("Ucuz, Dayanıklı ve Gizli Opak Yapılar Üretmek") sahiptir:

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.39.1946&rep=rep1&type=pdf

Özellikle C veya C ++ kaynak kodu için değil, üretim koduna uygulanan Collberg'in özel yöntemlerini görmedim.

DashO Java obfuscator benzer fikirler kullanıyor gibi görünüyor. http://www.cs.arizona.edu/~collberg/Teaching/620/2008/Assignments/tools/DashO/


2

KODUNUZU GİZLEME İLE İLGİLİ HATIRLAYAN İLK ŞEY : Tüm kodunuzun gizlenmesi gerekmez.

SON HEDEF : Çoğu yazılım programı için son hedefim, programlarımdaki belirli özellikleri açıp kapatacak farklı lisansları satma yeteneğidir.

EN İYİ TEKNİK : WordPress'in sunduğu bir kanca ve filtre sisteminde inşa etmenin, rakiplerinizi karıştırmaya çalışırken mutlak en iyi yöntem olduğunu düşünüyorum. Bu, kodu gerçekten şifrelemeden belirli tetikleyici ilişkilendirmelerini şifrelemenize olanak tanır.

Bunu yapmanın nedeni, mümkün olan en az miktarda kodu şifrelemek isteyeceğinizdir.

KIRICILARINIZI TANIN : Bunu bilin: Kod kırmanın ana nedeni, lisanslamanın kötü bir şekilde dağıtılması nedeniyle değil, aslında kodunuzu değiştirmeniz GEREKİR ve gerçekten ücretsiz kopyaları dağıtmak GEREKMEZ.

BAŞLARKEN : Şifreleyeceğiniz az miktarda kodu bir kenara koyun, kodun geri kalanı karmaşıklığı ve anlayışı artırmak için BİR dosyaya sıkıştırılmalı ve denenmelidir.

ŞİFRELEME HAZIRLIĞI : Sistemimle katmanlar halinde şifreleme yapacaksınız, aynı zamanda çok karmaşık bir prosedür olacak, bu nedenle şifreleme işleminden sorumlu olacak başka bir program oluşturun.

BİRİNCİ ADIM : Her şey için base64 adlarını kullanarak gizleyin. Tamamlandığında, gizlenmiş kodu base64 yapın ve daha sonra bu kodun şifresini çözmek ve çalıştırmak için kullanılacak geçici bir dosyaya kaydedin. Mantıklı olmak?

Bunu tekrar tekrar yapacağınız için tekrar edeceğim. Bir base64 dizesi oluşturacak ve şifresini çözülecek ve oluşturulacak bir değişken olarak başka bir dosyaya kaydedeceksiniz.

İKİNCİ ADIM : Bu geçici dosyayı bir dize olarak okuyacak ve gizleyecek, daha sonra temel64 yapacak ve şifresini çözmek ve son kullanıcı için oluşturmak için kullanılacak ikinci bir geçici dosyaya kaydedeceksiniz.

ÜÇÜNCÜ AŞAMA : İkinci adımı istediğiniz kadar tekrarlayın. Bu, şifresini çözmeden düzgün bir şekilde çalıştıktan sonra, rakipleriniz için kara mayınları inşa etmeye başlamak isteyeceksiniz.

ARAZİ MADENİ : Mutlak bir sır olarak bilgilendirildiğini saklamak isteyeceksin. Bu yüzden katman 2 için bir kraker girişimi güvenlik uyarı posta sistemi inşa edin.

ARAZİ MADENİ İKİ : Bağımlılıklar. Rakibinizin katman 3, 4 veya 5 veya hatta tasarlandığı asıl programı olmadan birinci katmanı çalıştırmasını istemezsiniz. Birinci katmana, program yoksa veya diğer katmanları etkinleştirecek bir tür kill komut dosyası eklediğinizden emin olun.

Eminim kendi kara mayınlarını bulup eğlenebilirsin.

UNUTMAYACAK ŞEY : Kodunuzu base64 yerine kullanmak yerine şifreleyebilirsiniz. Bu şekilde basit bir base64 programın şifresini çözmez.

ÖDÜL : Bunun aslında sizinle rakibiniz arasında simbiyotik bir ilişki olabileceğini unutmayın. Her zaman birinci katmanın içine bir yorum koyarım, yorum krakeri tebrik eder ve sizden nakit ödül almak için kullanacakları bir promosyon kodu verir.

Herhangi bir önyargı olmaksızın nakit ödülü önemli hale getirin. Normalde 500 dolar gibi bir şey söylerim. Eğer kodunuzu ilk kıran adamınız ona parasını öde ve onun arkadaşı olun. Eğer bir arkadaşınız ise, yazılımınızı dağıtmayacaktır. Ona nasıl yaptığını ve nasıl gelişebileceğini sorun!

İYİ ŞANSLAR!


4
Soruyu bile okudun mu? Korsanlıktan nasıl korunacağım hakkında hiçbir zaman yöntem istemedim. Uygulama ücretsiz olacak, güvenliğin doğası gereği korunması gereken temel protokol.
graphitemaster

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.