Python kodunu nasıl koruyabilirim?


632

Python'da işverenimin müşterilerine dağıtılacak bir yazılım parçası geliştiriyorum. İşverenim yazılım kullanımını zaman kısıtlamalı lisans dosyasıyla sınırlamak istiyor.

.Py dosyalarını veya hatta .pyc dosyalarını dağıtırsak, lisans dosyasını kontrol eden kodu kolayca (decompile ve) kaldırmak kolay olacaktır.

Başka bir yönü de, işverenimin, kodun çalınabileceğinden ya da en azından "yeni fikirlerden" korktuğu için kodun müşterilerimiz tarafından okunmasını istememesidir.

Bu sorunu çözmenin iyi bir yolu var mı? Tercihen kullanıma hazır bir çözelti ile.

Yazılım Linux sistemlerinde çalışacaktır (bu yüzden py2exe hile yapacağını sanmıyorum).


25
py2exe sadece .pyc bayt kod dosyalarını bir .zip arşivinde saklar, bu yüzden bu kesinlikle bir çözüm değildir. Yine de, Linux altında çalışmasını sağlamak için uygun bir başlangıç ​​komut dosyası ile birleştirildiğinde yararlı olabilir
Ber


Sorunuzun en kapsamlı yanıtı: wiki.python.org/moin/Asking%20for%20Yardım /…
Mike

Yanıtlar:


378

Bayt kodu derlenmiş bir yorumlanmış dil olan Python'un kilitlenmesi çok zordur. Eğer böyle bir exe-paketleyicisine kullansanız bile py2exe , yürütülebilir düzeni iyi bilinmektedir, ve Python bayt kodları iyi anlaşılır.

Genellikle böyle durumlarda, bir ödünleşmeniz gerekir. Kodu korumak gerçekten ne kadar önemli? Orada gerçek sırlar var mı (banka havalelerinin simetrik şifrelenmesi için bir anahtar gibi), yoksa sadece paranoyak mısınız? En iyi ürünü en hızlı şekilde geliştirmenizi sağlayan dili seçin ve yeni fikirlerinizin ne kadar değerli olduğu konusunda gerçekçi olun.

Lisans kontrolünü gerçekten güvenli bir şekilde uygulamanız gerektiğine karar verirseniz, küçük bir C uzantısı olarak yazın, böylece lisans kontrol kodunun ters mühendislik için ekstra zor (ancak imkansız değil) olması ve kodunuzun büyük kısmını Python'da bırakması .


157
C dilinde yazıldığı için lisans kontrol kodunun tersine mühendislik zor olsa bile, lisans kontrol koduna yapılan çağrıları kaldırmak nispeten kolay olmaz mıydı?
Blair Conrad

59
Evet, lisans kontrolünün yapıldığı yere göre değişir. Dahili numaraya çok sayıda çağrı varsa, ortadan kaldırılması zor olabilir. Veya uygulamanın diğer bazı önemli kısımlarını lisans kontrolüne taşıyabilirsiniz, böylece uzantıya yapılan çağrının kaldırılması uygulamayı engeller.
Ned Batchelder

103
Gerçekten, tüm bu çalışmalar modifikasyonu önlemekle ilgili değil, zorluğunun arttırılmasıyla ilgilidir, böylece artık buna değmez. Yeterli fayda varsa her şey tersine mühendislikle değiştirilebilir ve değiştirilebilir.
Ned Batchelder

11
@Blair Conrad: Lisans kontrol kodu işlevselliği de gizliyorsa değil. Ör.mylicensedfunction(licenseblob liblob, int foo, int bar, std::string bash)
Brian

8
Aslında ticari bir python kodu bir C kütüphanesi içinde gömülü python olarak sevk gördüm. Kodun bazı bölümlerini C'ye dönüştürmek yerine, tüm Python kodunu koruyucu bir C katmanının içine gizlerler. Daha sonra, python tarafından içe aktarılabilecek bir modül istiyorlarsa, C'nin üzerine ince bir python uzantısı yazarlar. Açık kaynak çok daha kolay bir yaşam biçimidir.
Mike McKerns

454

"Bu sorunu çözmenin iyi bir yolu var mı?" Hayır. Ters mühendislikten hiçbir şey korunamaz. DVD makinelerindeki bellenim bile tersine mühendislik uygulandı ve AACS Şifreleme anahtarı açıkta kaldı. Ve bu DMCA'ya rağmen bunu bir suç teşkil ediyor.

Hiçbir teknik yöntem müşterilerinizin kodunuzu okumasını engelleyemeyeceğinden, normal ticari yöntemler uygulamanız gerekir.

  1. Lisanslar. Sözleşmeler. Şartlar ve koşullar. Bu, insanlar kodu okuyabilse bile yine de çalışır. Bazı Python tabanlı bileşenlerinizin, bu bileşenleri kullanarak yazılım satmadan önce ücret ödemenizi gerektirebileceğini unutmayın. Ayrıca, bazı açık kaynak lisansları bu bileşenin kaynağını veya kökenlerini gizlemenizi yasaklar.

  2. Önemli bir değer sunun. Eşyalarınız çok iyi ise - reddedilmesi zor bir fiyata - zaman ve parayı tersine çevirmek için hiçbir şey yoktur. Tersine mühendislik pahalıdır. Ürününüzü daha az pahalı hale getirin.

  3. Tersine mühendisliği kötü bir fikir haline getiren yükseltmeler ve geliştirmeler sunun. Bir sonraki sürüm tersine mühendisliklerini bozduğunda, bir anlamı yok. Bu saçma aşırılıklara taşınabilir, ancak bir sonraki sürümü tersine mühendislikten daha değerli kılan yeni özellikler sunmalısınız.

  4. Geliştirmeleri inşa etmeyi ve desteklemeyi ödemeyi tercih edecek kadar cazip fiyatlarla özelleştirme sunun.

  5. Süresi dolan bir lisans anahtarı kullanın. Bu zalimdir ve size kötü bir itibar kazandıracaktır, ancak kesinlikle yazılımınızın çalışmasını durdurur.

  6. Bir web hizmeti olarak sunun. SaaS, müşterilere indirme işlemi içermez.


7
Nokta 2 daha da önemlidir. Ters mühendislikten daha ucuz satın alma ve yıllık güncellemeler varsa, hiç kimse denemez ve bunu yapsa bile, kimse yazılım sağlayıcısı yerine bir hacker ödemeyecektir.
m3nda

Bu doğru. Tersine mühendislik yapılabilir ancak çoğu durumda pahalıdır. @ S.Lott, inanıyorum ki 6. nokta soruya göre daha fazla önem taşıyor. Kaynak kodun gerçekten korunması gerekiyorsa, son kullanıcıdan uzak olmalıdır.
Delali

7
Soru: "Ailemi ve ben uykumuzda davetsiz misafirlerin öldürülmesini önlemenin iyi bir yolu var mı?" İnternet: "Hayır. Herkes ulaşılabilir ve hiçbir konut yüzde 100 geçilemez. Ölümlü bir insan ailesi bu iş için yanlış araçtır."
Basit Bir Algoritma

Nokta 5, tersine mühendislik ve çatlama yapabileceği varsayımıyla uygulanamadı.
jjmontes

313

Python ihtiyacınız olan araç değil

Doğru şeyi yapmak için doğru aracı kullanmanız gerekir ve Python gizlenecek şekilde tasarlanmamıştır. Aksine; Python'da her şey açık ya da kolay anlaşılabilir ya da değiştirilebilir çünkü dilin felsefesi budur.

Eğer göremediğiniz bir şey istiyorsanız, başka bir araç arayın. Bu kötü bir şey değil, farklı kullanımlar için birkaç farklı aracın olması önemlidir.

Şaşkınlık gerçekten zor

Derlenmiş programlar bile tersine mühendislikle kullanılabilir, bu nedenle herhangi bir kodu tamamen koruyabileceğinizi düşünmeyin. Gizlenmiş PHP'yi analiz edebilir, flash şifreleme anahtarını bozabilir, vb. Her zaman yeni Windows sürümleri kırılır.

Yasal bir şarta sahip olmak iyi bir yoldur

Birinin kodunuzu kötüye kullanmasını engelleyemezsiniz, ancak birisinin yaptığını kolayca keşfedebilirsiniz. Bu nedenle, bu sadece geçici bir yasal konudur.

Kod koruması abartılıyor

Günümüzde, iş modelleri ürün yerine hizmet satma eğilimindedir. Bir hizmeti kopyalayamaz, korsan veya çalamazsınız. Belki de akışa gitmeyi düşünmenin zamanı geldi ...


16
Python ihtiyacınız olan araç değil. Malbolge öyle. :)
johndodo

8
İyi cevap, ama "gündelik yasal sorun" mu? Gerçekten mi? Geçici olan herhangi bir yasal sorununuz olduğu için nerede yaşıyorsunuz ?
Mark E. Haase

1
Sanırım, bir frekansımız varsa - ne sıklıkla pahalı gizlenmiş kod saldırıya uğradı - Python ve gizlenmiş kod kullanmanın uygulanabilirliği hakkında söyleyebiliriz.
sergzach

Kodunuzun ilginç özellikleri varsa, onu kötüye kullanabilen kişi onu yeniden dağıtacaktır @Macke
Delali

1
Dünyada "birisinin kolayca yapabileceğini kolayca nasıl keşfedersiniz"?
Make42

145

Python derleyin ve ikili dosyaları dağıtın!

Mantıklı fikir:

Kullanım Cython , Nuitka , Cilt Shed sonra yerine piton ikili kütüphaneleri (PYD) olarak uygulamanızı dağıtmak veya C koduna derleme piton benzer bir şey.

Bu şekilde, hiçbir Python (bayt) kodu kalmadı ve bence herkesin (yani işvereninizin) bekleyebileceği makul miktarda belirsizlik yaptınız. (.NET veya Java bu durumdan daha az güvenlidir, çünkü bayt kodu gizlenmez ve nispeten kolay bir şekilde makul bir kaynağa dönüştürülebilir.)

Cython CPython ile gittikçe daha uyumlu hale geliyor, bu yüzden çalışması gerektiğini düşünüyorum. (Aslında bunu ürünümüz için düşünüyorum. Zaten pyd / dll olarak bazı üçüncü taraf kütüphaneleri inşa ediyoruz, bu yüzden ikili olarak kendi python kodumuzu göndermek bizim için çok büyük bir adım değil.)

Nasıl yapılacağı hakkında bir eğitim için bkz. Bu Blog Yayını (benim tarafımdan değil). (thx @hithwen)

Çılgın fikir:

Muhtemelen Cython'un C-dosyalarını her modül için ayrı olarak depolamasını sağlayabilir, sonra hepsini birleştirebilir ve ağır satır içi ile oluşturabilirsiniz. Bu şekilde, Python modülünüz oldukça monolitiktir ve yaygın araçlarla yontulması zordur.

Çılgınlığın ötesinde:

Python çalışma zamanına ve tüm kitaplıklara (dll) statik olarak bağlanabilirseniz (ve optimize ederseniz) tek bir yürütülebilir dosya oluşturabilirsiniz. Bu şekilde, python'a / python'a ve kullandığınız çerçeve kitaplıklarına yapılan çağrıları kesmek zor olacaktır. Yine de LGPL kodu kullanıyorsanız bu yapılamaz.


Cython ile derleme bir python 3.4 Django uygulaması ile çalışır mı, yoksa çok fazla çaba harcamadan yapılabilir mi?
Daniel

@Daniel: Emin değilim. Django üzerinde denemedim. Bununla ilgili yeni bir soru göndermekten çekinmeyin.
Macke


4
@mlvljr FWIW, IMHO, ikili dosyaları derlemek, tüm sırlarınızı satmak ve NSA sınıfı tersine mühendislikten korunmaya çalışmak arasında hoş bir ödünleşmedir. Eğer büyük bir python kod tabanı ve paranoyak olmak için nedenleri Esp. ;)
Macke

2
hithwen'in POST adresi şimdi geçersiz.
qg_java_17137

58

Müşterilerinizin python'un gücünü kullanmasını istediğinizi ancak kaynak kodunu göstermek istemediğinizi anlıyorum.

İşte benim önerilerim:

(a) Kodun kritik parçalarını C veya C ++ kitaplıkları olarak yazın ve ardından C / C ++ API'lerini Python ad alanına göstermek için SIP veya swig kullanın.

(b) Python yerine cython kullanın

(c) Hem (a) hem de (b) 'de, kütüphanelerin Python arayüzü ile lisanslı ikili olarak dağıtılması mümkün olmalıdır.


1
Aynı damardaki diğer olasılıklar: Shed Skin code.google.com/p/shedskin ve Nuitka kayhayen24x7.homelinux.org/blog/nuitka-a-python-compiler
TryPyPy

Ben sadece TyPyPy tarafından önerildiği gibi Shed Skin bir göz verdi ve gerçekten iyi şeyler gibi görünüyor!
Filipe

34

İşvereniniz, başkalarının kodunuzdan aldığı fikirleri "çalabileceğini" biliyor mu? Demek istediğim, eğer işinizi okuyabilirlerse, siz de onlarınki. Belki de durumdan nasıl faydalanabileceğinize bakmak, ne kadar kaybedebileceğinizden korkmaktan daha iyi bir yatırım getirisi sağlayacaktır.

[EDIT] Nick'in yorumuna cevap verin:

Hiçbir şey kazanılmadı ve hiçbir şey kaybetmedi. Müşteri istediği şeye sahiptir (ve değişikliği kendisi yaptığı için ücretini öder). Değişikliği serbest bırakmadığı için, sanki herkes için olmadı.

Şimdi müşteri yazılımı satıyorsa, telif hakkı bildirimini değiştirmelidir (bu yasa dışıdır, böylece dava açabilir ve kazanacaksınız -> basit dava).

Telif hakkı bildirimini değiştirmezlerse, 2. düzey müşteriler yazılımın sizden geldiğini fark edecek ve neler olduğunu merak edecektir. Muhtemelen sizinle iletişime geçecekleri için çalışmanızın satışını öğreneceksiniz.

Yine iki vakamız var: Orijinal müşteri sadece birkaç kopya sattı. Bu zaten fazla para kazanmadıkları anlamına geliyor, neden rahatsız oluyorsunuz. Veya hacimli sattılar. Bu, ne yaptıklarını öğrenmeniz ve bu konuda bir şeyler yapmanız için daha iyi bir şans anlamına gelir.

Ancak sonuçta, çoğu şirket yasaya uymaya çalışır (ünleri mahvolduğunda, iş yapmak çok daha zordur). Bu yüzden işinizi çalmayacak, geliştirmek için sizinle birlikte çalışacaklardır. Bu nedenle, kaynağı eklerseniz (sizi basit satıştan koruyan bir lisansla), muhtemelen değişiklikleri bir sonraki sürümde olduğundan ve sürdürmek zorunda olmadıklarından emin olacakları için yaptıkları değişiklikleri geri itebilirler. . Bu kazan-kazan: Değişiklikler alırsınız ve resmi sürüme dahil etmek istemeseniz bile gerçekten, umutsuzca buna ihtiyaç duyarlarsa değişikliği kendileri yapabilirler.


Ya yazılımları müşterilere satarlarsa ve müşteri yeniden yayınlamadan dahili olarak değiştirirse?
Nick T

@Nick: Durumu hiçbir şekilde değiştirmez. Düzenlemelerimi görün.
Aaron Digulla

6
Fikirleri çalmak için +1. Başkalarının çözümünüzde nasıl geliştiğini ve buna bağlı olarak kendi ürününüzü nasıl geliştirdiğini görebildiğinizde, müşteri hizmet gücünüzü şirket içi çözümlerinizle sınırlandırın? "Eğer bir elmanın varsa ve bir elmam var ve bu elmaları değiştirirsek o zaman sen ve ben hala bir elmamız olacak. Ama bir fikrin varsa ve bir fikrim varsa ve bu fikirleri değiştirirsek, o zaman her birimiz iki fikir. "
Ürdün

Müşterilerinizden biri kodunuzu veya fikirlerinizi ücretsiz ve anonim olarak yeniden yayınlarsa ne olur? Bunu kimin yaptığını ve dava ettiklerini söyleyemezsiniz ve ondan faydalanmadıkları için siz de öyle olmayacaksınız. Müşterilerinizden biri sadece bunun için temel fiyatı öderken bu durum işinizi mahvedecektir. (Açıkçası yalnızca çözümünüz için birden fazla müşteriniz varsa çalışır)
Skandix

1
@Skandix Tam olarak nasıl çalışır? Çalışmanızı İnternet'e yüklemek size zarar vermez. Bir çok insan bulabilirse ve bu insanlar bunun yerine müşterilere ödeme yapacaksa size zarar vermeye başlar. Kod hırsızlığı bir efsanedir. "Benim bilgim ücretsiz, zamanım pahalı" (kim demiş emin değilim).
Aaron Digulla

34

Pyminifier'a bir göz attınız mı? Python kodunu Küçült, şaşırt ve sıkıştır. Örnek kod, sıradan tersine mühendislik için oldukça kötü görünüyor.

$ pyminifier --nonlatin --replacement-length=50 /tmp/tumult.py
#!/usr/bin/env python3
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲמּ=ImportError
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ燱=print
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ巡=False
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ澨=object
try:
 import demiurgic
except ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲמּ:
 ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ燱("Warning: You're not demiurgic. Actually, I think that's normal.")
try:
 import mystificate
except ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲמּ:
 ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ燱("Warning: Dark voodoo may be unreliable.")
ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲﺬ=ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ巡
class ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𐦚(ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ澨):
 def __init__(self,*args,**kwargs):
  pass
 def ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ클(self,dactyl):
  ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ퐐=demiurgic.palpitation(dactyl)
  ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𠛲=mystificate.dark_voodoo(ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ퐐)
  return ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𠛲
 def ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𐠯(self,whatever):
  ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ燱(whatever)
if __name__=="__main__":
 ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ燱("Forming...")
 ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲﺃ=ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𐦚("epicaricacy","perseverate")
 ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲﺃ.ﺭ异𞸐𐤔ﭞﰣﺁں𝕌𨿩𞸇뻛𐬑𥰫嬭ﱌ𢽁𐡆𧪮Ꝫﴹ뙫𢤴퉊ﳦﲣפּܟﺶ𐐤ﶨࠔ𐰷𢡶𧐎𐭈𞸏𢢘𦘼ﶻ𩏃𦽨𞺎𠛘𐠲䉊ﰸﭳᣲ𐠯("Codswallop")
# Created by pyminifier (https://github.com/liftoff/pyminifier)

6
Buradaki iyi nokta, işlevselliği deşifre etmeye çalışan herkesi demoralize etmektir. Bunu Cython ve modüller veya internet çağrıları üzerinde ekstra bir şifreleme ile birleştirin ve muhtemelen ödül aldınız.
m3nda

Bu paketin gerçekleştirmeyi başardığı tek şey, kodun gizlendiği 'gizleme aracını' kandırmaktır.
markroxor

denediğimde bu hata yapıyordu. Bence veri yanlış ve tamamen dönüştürmek vermedi.
Vicrobot

şablonda görüntülenmesi için değişken adına ihtiyaç duyduğu için tüm proje veya şablon motoru için çalışmaz
TomSawyer

Bu kütüphane bakımı yapılmıyor gibi görünüyor ve girinti hataları veriyor.
PV

25

Şaşkınlığa güvenmeyin. Doğru bir şekilde sonuçladığınız için çok sınırlı koruma sunar. GÜNCELLEME: Burada, Dropbox'ta gizlenmiş python kodunu tersine çeviren kağıda bir bağlantı var . Yaklaşım - opcode yeniden eşleme iyi bir engeldir, ancak açıkça yenilebilir.

Bunun yerine, birçok afişin belirttiği gibi:

  • Ters mühendislik süresine değmez (Yazılımınız çok iyi, ödeme yapmak mantıklı)
  • Bir sözleşme imzalamalarını sağlayın ve mümkünse bir lisans denetimi yapın.

Alternatif olarak, kick-ass Python IDE WingIDE'ın yaptığı gibi: Kodu verin . Bu doğru, kodu verin ve yükseltmeler ve destek için insanların geri gelmesini sağlayın.


1
Bu uç fikir gibi. Orada büyük bir şekilde ve büyük bir pazar payına sahip, o zaman destek ve eklentiler için çok büyük bir müşteri tabanınız var. Ben de bu soru ile boğuşuyor ve tüm "lisanslama" cevapları temelde boğa çünkü yaygın kopyalamaya karşı koruma sağlamaz, ancak size herhangi bir pazar payı avantajı vermez.
Thomas Browne

Ancak, yükseltmeler de sadece vermek ... Peki bunun için nasıl ücret? Sadece destek olmaz mıydı?
Make42

WingIDE iş modeli ile ilgili: Destek bir hizmet, yazılım ürünüdür. Ürün ölçeği, hizmet yok. Destek yalnızca başka bir iş modeli yoksa iyi bir iş modelidir - yani, hiç kimse ürününüzü satın almazsa (herhangi bir nedenle) ürünü verirsiniz, böylece en azından hizmetinizi satın alan bir müşteri tabanınız olur.
Make42

20

Cython kullanın . Modüllerinizi, daha sonra yerel ikili kitaplıklara derlenebilen yüksek performanslı C dosyalarına derleyecektir. Bu, .pyc bayt koduna kıyasla temelde geri alınamaz!

Bir Python projesi için Cython'u nasıl kuracağınız hakkında ayrıntılı bir makale yazdım, kontrol edin:

Python Kaynaklarını Cython ile Koruma


19

.Pyc dosyalarının gönderilmesinin sorunları vardır - oluşturuldukları python sürümünden başka herhangi bir python sürümü ile uyumlu değildir, bu da ürünün çalışacağı sistemlerde hangi python sürümünün çalıştığını bilmeniz gerektiği anlamına gelir. Bu çok sınırlayıcı bir faktör.


Evet, ancak tam olarak Python sürümünü gizlenmiş kodunuzla dağıtırsanız değil.
Alex

17

Bazı durumlarda, yazılımın (tümü veya en azından bir kısmı) kuruluşunuzun barındırdığı bir web hizmetine taşınması mümkün olabilir.

Bu şekilde, lisans kontrolleri kendi sunucu odanızın güvenliğinde yapılabilir.


+1 (0'a geri dön): ayar için pratik olabileceği varsayılarak, sorunun tek gerçek çözümü gibi görünüyor.
2010'da

10
Lisanslama web sunucunuz düşerse veya müşterilerin internet erişimi kapalıysa, müşterinizin lisans kontrollerine erişim kaybı nedeniyle işlerini yürütemedikleri için mutlu olmayacaklarını unutmayın.
DevPlayer

1
@DevPlayer Bunun çözümleri var. Yazılım uzak lisans sunucusuna erişemediğinde geçici erişime izin veren yerel bir anahtar mekanizması uygulayabilirsiniz.
Jeffrey

1
@Jeffrey: Bu sizi başladığınız yere geri götürür - bu kodu nasıl korursunuz. Daha güvenli olmak için, temel işlevlerden bazılarını kendi sunucunuza koymanız gerekir, bu yüzden onu değiştirmek büyük ölçüde çaba gerektirecektir (hangi noktada, neden sadece açık kaynaklı bir rakibi
başlatmıyorsunuz

14

Mükemmel bir çözüm olmamasına rağmen, aşağıdakiler yapılabilir:

  1. Kritik başlangıç ​​kodu parçasını yerel bir kütüphaneye taşıyın.
  2. Yerel kütüphanede lisans kontrolünü zorunlu kılın.

Yerel kod çağrısı kaldırılsaydı, program yine de başlamazdı. Kaldırılmazsa lisans uygulanır.

Bu bir çapraz platform veya saf Python çözümü olmasa da işe yarayacak.


3
Yerel kütüphane yaklaşımı, lisans anahtar sisteminizi lisanslarını doğrulamak için kendi kodunuzu ve API'nizi kullanabildikleri için programlı olarak kaba zorlamalarını kolaylaştırır.
Tom Leys

8
Yani? 1024 bit içeren diyelim ki lisansınızı imzalamak ve özel anahtarınızı kaba zorlamalarını sağlamak için RSA kullanın. Mümkün, ama çok zaman alıyor ... ve dolayısıyla - para.
Abgan

12

Bence Python kodunuzu korumak için bir yöntem daha var; Gizleme yönteminin bir parçası. Mount ve Blade veya kendi python yorumlayıcılarını (açık kaynak olduğuna inandığım orijinal yorumlayıcı) değiştiren ve yeniden derleyen bir oyun olduğunu ve OP kod tablosundaki OP kodlarını standart python OP'den farklı olacak şekilde değiştirdiğime inanıyorum kodlar.

Bu nedenle python kaynağı değiştirilmemiştir ancak * .pyc dosyalarının dosya uzantıları farklıdır ve op kodları genel python.exe yorumlayıcısıyla eşleşmez. Oyun veri dosyalarını kontrol ettiyseniz, tüm veriler Python kaynak biçimindeydi.

Bu tür olgunlaşmamış bilgisayar korsanları ile karışıklık yapmak için her türlü pis numara yapılabilir. Bir grup deneyimsiz bilgisayar korsanını durdurmak kolaydır. Muhtemelen yenmeyeceğiniz profesyonel bilgisayar korsanları. Ancak çoğu şirket profesyonel bilgisayar korsanlarını uzun süredir hayal ettiğim personelde tutmuyor (muhtemelen işler hacklendiğinden). Ancak olgunlaşmamış bilgisayar korsanları her yerde (meraklı BT personeli olarak okuyun).

Örneğin, değiştirilmiş bir yorumlayıcıda, kaynağınızdaki belirli yorumları veya belge dizelerini kontrol etmesine izin verebilirsiniz. Bu tür kod satırları için özel OP kodlarınız olabilir. Örneğin:

OP 234 kaynak satırı için "# Telif Hakkı Bunu yazdım" veya bu satırı "if False:" ile eşdeğer olan op kodlarına derleyin. Temelde, belirsiz bir neden gibi görünen bir kod bloğunun tamamını devre dışı bırakmak.

Değiştirilmiş bir yorumlayıcıyı yeniden derlemenin mümkün olabileceği bir kullanım örneği, uygulamayı yazmadığınız, uygulamanın büyük olduğu, ancak bir finansal uygulama için özel bir sunucu yöneticisi olduğunuzda olduğu gibi, bunu korumak için size ödeme yapılır.

Kaynağı veya opcode'ları gözbebekleri için açık bırakmak biraz çelişkili buluyorum, ancak ağ trafiği için SSL kullanıyorum. SSL de% 100 güvenli değildir. Ama ÇOK gözlerin okumasını durdurmak için kullanılır. Çirkin bir önlem mantıklı.

Ayrıca, yeterince insan Python kaynağının ve opcodların çok görünür olduğunu düşünürse, muhtemelen sonunda en azından bunun için basit bir koruma aracı geliştirecektir. Yani "Python uygulaması nasıl korunur" sorusu daha fazla kişi sadece bu gelişimi teşvik eder.


11

Kodu korumanın güvenilir tek yolu kodu kontrol ettiğiniz bir sunucuda çalıştırmak ve istemcilerinize bu sunucu ile arayüz oluşturan bir istemci sağlamaktır.


10

Herhangi bir cevapta birbirini görmemeye şaşırdım . Belki de sorudan daha yeni olduğu için?

Tam olarak ihtiyacınız olan şey olabilir (ed).

Kodu gizlemek yerine, kodu şifreler ve yükleme sırasında şifresini çözer.

Gönderen pypi sayfa :

Python komut dosyası iş akışını koruyun

  • your_script.py import pyconcrete
  • pyconcrete ithal modülü kanca
  • senaryonuz ithalat yaparken MODULE, pyconcrete ithalat kanca bulmaya çalışacağız MODULE.pyebirinci ve daha sonra şifresini MODULE.pyearacılığı _pyconcrete.pydile (.pyc içeriği gibi) şifresi verileri yürütmek
  • _pyconcrete.pyd (DLL veya SO gibi) gizli anahtar kaydını şifreleme ve şifresini çözme gizli anahtar ikili kodda gizlenir, doğrudan HEX görünümünde göremez

9

Müşterinin kim olduğuna bağlı olarak, makul bir lisans sözleşmesiyle birleştirilen basit bir koruma mekanizması, karmaşık lisanslama / şifreleme / gizleme sistemlerinden çok daha etkili olacaktır .

En iyi çözüm, kodu hizmet olarak satmak, örneğin hizmeti barındırarak veya destek sunmaktır - bu her zaman pratik olmasa da.

Kodun .pycdosyalar olarak gönderilmesi , korumanızın birkaç #s tarafından engellenmesini önleyecektir , ancak neredeyse etkili bir korsanlıkla mücadele (böyle bir teknoloji varmış gibi) ve günün sonunda, şirket ile iyi bir lisans anlaşması olacak.

Kodunuzu mümkün olduğunca güzel hale getirmeye odaklanın - mutlu müşterilere sahip olmak, şirketinizi bazı teorik korsanlığı önlemekten çok daha fazla para kazanacaktır.


8

Kodunuzu çalmayı zorlaştırmak için başka bir girişim, jython kullanmak ve sonra java obfuscator kullanmaktır .

Jythonc python kodunu java'ya çevirdiğinden ve java bayt koduna derlendiğinden bu oldukça iyi çalışmalıdır. Yani sınıfları gizleyin, ayrıştırmadan sonra neler olduğunu anlamak gerçekten zor olacak, gerçek kodu kurtarmadan bahsetmiyoruz.

Jython ile ilgili tek sorun, c ile yazılmış python modüllerini kullanamamanızdır.


6

Önemli dosyaları karma yapıp imzalayarak ve açık anahtar yöntemleriyle kontrol ederek kodunuzu standart şifreleme düzenleriyle imzalamaya ne dersiniz?

Bu şekilde, her müşteri için ortak bir anahtarla lisans dosyası verebilirsiniz.

Ek olarak bunun gibi bir python obfuscator kullanabilirsiniz (sadece googled).


1
+1 İmza için; Obfuscator için -1 En azından kodun değiştirilmesini engelleyebilirsiniz.
Ali Afshar

2
İmzalama bu bağlamda çalışmaz. İmza kontrol yükleyiciyi atlamak her zaman mümkündür. Yararlı yazılım koruması için ihtiyacınız olan ilk şey opak bir önyükleme mekanizmasıdır. Python'un kolaylaştırdığı bir şey değil.
ddaa

Evet, python'da olmayan bootstrap.
Ali Afshar

Veya lisansı yalnızca başlangıçta değil, başka yerlerde de doğrulayın. Kolayca uygulanabilir ve baypas süresini ciddi şekilde artırabilir.
Abgan

6

Getdropbox.com adresindeki çocukların bunu, Linux da dahil olmak üzere istemci yazılımları için nasıl yaptığına bir göz atmalısınız. Çatlamak oldukça zor ve koruma mekanizmalarını aşmak için oldukça yaratıcı bir sökme gerektiriyor.


8
ancak geçmişe ulaşmış olmaları, başarısız olmaları anlamına geliyordu - sonuç olarak sadece denemek değil, yasal korumaya gitmek.
Chii

Bu koruma mekanizmalarından nasıl geçileceği konusunda yayınlanmış herhangi bir bilgi var mı?
Mitar

6

Python ile yapabileceğiniz en iyi şey şeyleri gizlemektir.

  • Tüm öğretileri çıkarın
  • Yalnızca .pyc derlenmiş dosyalarını dağıtın.
  • dondur
  • Bir sınıfın / modülün içindeki sabitlerinizi gizleyin, böylece yardım (yapılandırma) her şeyi göstermez

Bir kısmını şifreleyerek ve şifresini çözerek ve eval () öğesine ileterek bazı ek belirsizlikler ekleyebilirsiniz. Ama ne yaparsanız yapın birisi onu kırabilir.

Bunların hiçbiri, kararlı bir saldırganın bayt kodunu sökmesini veya api'nizi yardım, dir vb.


5

Zaman kısıtlamalı lisansa sahip olma ve yerel olarak kurulmuş programda kontrol etme fikri çalışmaz. Mükemmel gizleme ile bile, lisans kontrolü kaldırılabilir. Ancak uzak sistemde lisansı kontrol ederseniz ve programın önemli bir bölümünü kapalı uzak sisteminizde çalıştırırsanız, IP'nizi koruyabilirsiniz.

Rakiplerin kaynak kodunu kendileri gibi kullanmasını veya aynı koddan ilham alan sürümlerini yazmasını önlemek için, korumanın bir yolu program mantığınıza imza eklemektir (kodun sizden çalındığını kanıtlayabilmeniz için bazı sırlar) ve python kaynak kodu bu yüzden, okumak ve kullanmak zor.

İyi gizleme, kodunuza yürütülebilir (ve ikili sıyırma) için derleyen temelde aynı korumayı ekler. Gizlenmiş karmaşık kodun nasıl çalıştığını anlamak, kendi uygulamanızı yazmaktan daha zor olabilir.

Bu, programınızın saldırıya uğramasını önlemeye yardımcı olmaz. Gizleme kodu ile bile lisans şeyler kırılacak ve program biraz farklı davranışa sahip olacak şekilde değiştirilebilir (kodun ikili dosyaya derlenmesi yerel programların korunmasına yardımcı olmaz).

Sembol gizliliğine ek olarak, kodu çözmemek için iyi bir fikir olabilir, bu da, örneğin, arama grafikleri, aslında bu farklı yerler sonunda aynı şeyi yapsa bile, birçok farklı yere işaret ediyorsa her şeyi daha da karmaşık hale getirir.

Gizlenmiş kodun içindeki mantıksal imza (örneğin, program mantığı tarafından kullanılan, ancak imza olarak da kullanılan değerler tablosu oluşturabilirsiniz); bu, kodun sizden kaynaklandığını belirlemek için kullanılabilir. Birisi gizlenmiş kod modülünüzü kendi ürününün bir parçası olarak kullanmaya karar verirse (farklı görünmesi için yeniden sıraladıktan sonra bile) gösterebilirsiniz, bu kod gizli imzanızla çalınır.


4

Kendi projelerim için genel olarak yazılım korumasına baktım ve genel felsefe, tam korumanın imkansız olduğudur. Elde etmeyi ümit edebileceğiniz tek şey, müşterinizi başka bir lisans satın almaktan daha fazla atlamaya mal olacak bir seviyeye koruma eklemektir.

Bununla birlikte ben sadece google python obsfucation için kontrol ve bir şey çok değil çevirdi dedi. Bir .Net çözümünde, obsfucation, Windows platformunda sorununuza ilk yaklaşım olacaktır, ancak Linux'ta Mono ile çalışan çözümlerin olup olmadığından emin değilim.

Bir sonraki şey, kodunuzu derlenmiş bir dilde yazmak ya da gerçekten sonuna kadar gitmek istiyorsanız, o zaman montajcı olacaktır. Sökülen bir yürütülebilir dosya, yorumlanan bir dilden daha kolay ayrıştırılacaktır.

Her şey ödünleşmeden gelir. Bir ucunda, sırları gizlemenin çok zor olduğu python'da yazılım geliştirme kolaylığı var. Öte yandan, montajcıda yazılmış, yazmak çok daha zor, ancak sırları gizlemek çok daha kolay bir yazılıma sahipsiniz.

Patronunuz, bu süreklilik boyunca, gereksinimlerini destekleyen bir nokta seçmelidir. Ve sonra size istediği şeyi yapabilmeniz için araçlar ve zaman vermesi gerekiyor. Ancak bahse girerim, potansiyel parasal kayıplara karşı gerçek geliştirme maliyetlerine itiraz edeceği.


4

Uzun lafın kısası:

  1. Kaynak kodunuzu şifreleyin
  2. İçe aktarırken kodunuzun şifresini çözmek için kendi python modülü yükleyicinizi yazın
  3. Modül yükleyiciyi C / C ++ 'da uygulayın
  4. Modül yükleyiciye hata ayıklayıcı, lisans kontrolü, donanım parmak izi bağlama vb. Gibi daha fazla özellik ekleyebilirsiniz.

Daha fazla ayrıntı için bu cevaba bakınız .

Eğer konu ile ilgileniyorsanız, bu proje size yardımcı olacaktır - pyprotect .


3

Py2exe bayt kodunu, belleğe yükleyen ve yürüten bir C başlatıcısı için şifreli bir kaynakta bulundurmak mümkündür. Burada ve burada bazı fikirler .

Bazıları tersine mühendislik pahalı hale getirmek için kendi kendini değiştiren bir program düşündüm .

Ayrıca hata ayıklayıcıları önlemek , sökücü başarısız yapmak, yanlış hata ayıklayıcı kesme noktaları ayarlamak ve kodunuzu sağlama toplamları ile korumak için öğreticiler bulabilirsiniz . Daha fazla bağlantı için ["şifreli kod" yürütme "bellekte"] arayın.

Ancak diğerlerinin söylediği gibi, kodunuz buna değerse, ters mühendisler sonunda başarılı olacaktır.


3

Yazılım lisanslamasına odaklanırsak, lisans anahtarı doğrulama sisteminin nasıl oluşturulabileceğinden ilham almak için burada yazdığım başka bir Stack Overflow cevabına göz atmanızı tavsiye ederim .

GitHub'da lisans doğrulama biti konusunda size yardımcı olabilecek açık kaynaklı bir kütüphane var .

Tarafından yükleyip pip install licensingaşağıdaki kodu ekleyebilirsiniz:

pubKey = "<RSAKeyValue><Modulus>sGbvxwdlDbqFXOMlVUnAF5ew0t0WpPW7rFpI5jHQOFkht/326dvh7t74RYeMpjy357NljouhpTLA3a6idnn4j6c3jmPWBkjZndGsPL4Bqm+fwE48nKpGPjkj4q/yzT4tHXBTyvaBjA8bVoCTnu+LiC4XEaLZRThGzIn5KQXKCigg6tQRy0GXE13XYFVz/x1mjFbT9/7dS8p85n8BuwlY5JvuBIQkKhuCNFfrUxBWyu87CFnXWjIupCD2VO/GbxaCvzrRjLZjAngLCMtZbYBALksqGPgTUN7ZM24XbPWyLtKPaXF2i4XRR9u6eTj5BfnLbKAU5PIVfjIS+vNYYogteQ==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"

res = Key.activate(token="WyIyNTU1IiwiRjdZZTB4RmtuTVcrQlNqcSszbmFMMHB3aWFJTlBsWW1Mbm9raVFyRyJd",\
                   rsa_pub_key=pubKey,\
                   product_id=3349, key="ICVLD-VVSZR-ZTICT-YKGXL", machine_code=Helpers.GetMachineCode())

if res[0] == None not Helpers.IsOnRightMachine(res[0]):
    print("An error occured: {0}".format(res[1]))
else:
    print("Success")

RSA genel anahtarının vb . Yapılandırılma şekli hakkında daha fazla bilgiyi buradan edinebilirsiniz .


2

C / c ++ ikili dosyasını korumak için aynı yolu kullanın, yani yürütülebilir veya kütüphane ikili dosyasında her işlev gövdesini gizleyin, her işlev girişinin başına bir komut "atlama" ekleyin, gizlenmiş kodu geri yüklemek için özel işleve atlayın. Bayt kodu Python betiğinin ikili kodudur, bu nedenle

  • İlk kod nesnesine python komut dosyası derleme
  • Sonra her kod nesnesini tekrarlayın, her kod nesnesinin co_code'unu aşağıdaki gibi gizleyin
    0 JUMP_ABSOLUTE n = 3 + len (bayt kodu)

    3
    ...
    ... Burada gizlenmiş bayt kodu var
    ...

    n LOAD_GLOBAL? (__Pyarmor__)
    n + 3 CALL_FUNCTION 0
    n + 6 POP_TOP
    n + 7 JUMP_ABSOLUTE 0
  • Gizlenmiş kod nesnesini .pyc veya .pyo dosyası olarak kaydedin

Bu gizlenmiş dosya (.pyc veya .pyo), bu kod nesnesi ilk kez çağrıldığında normal python yorumlayıcısı tarafından kullanılabilir

  • İlk op JUMP_ABSOLUTE, n ofsetine atlayacak

  • Ofset n'de, talimat bir PyCFunction çağırmaktır. Bu işlev, ofset 3 ve n arasındaki gizlenmiş bayt kodunu geri yükler ve orijinal bayt kodunu ofset 0'a koyar. Gizli kod aşağıdaki kodla alınabilir

        char * obfucated_bytecode;
        Py_ssize_t len;
        PyFrameObject * frame = PyEval_GetFrame ();
        PyCodeObject * f_code = frame-> f_code;
        PyObject * co_code = f_code-> co_code;      
        PyBytes_AsStringAndSize (co_code, & obfucated_bytecode, & len)
    
  • Bu işlev döndükten sonra, son komut ofset 0'a atlamaktır. Şimdi gerçekten bayt kodu yürütülür.

Pyarmor komut dosyalarını bu şekilde gizlemek için bir araç Pyarmor vardır .



1

Burada bulabileceğiniz python kaynak kodunun gizlenmesi konusunda kapsamlı bir cevap var .

Tartışılan olası teknikler şunlardır:
- derlenmiş bytecode ( python -m compileall) kullanın
- çalıştırılabilir içerik oluşturucular (veya PyInstaller gibi yükleyiciler )
- hizmet olarak yazılım (bence kodunuzu gizlemek için en iyi çözüm)
- python kaynak kodu gizleyicileri


Bağlantı example.com'a gider.
Darian

@Darian bunu işaret ettiğiniz için teşekkür ederim. Bağlantıyı güncelledim.
Mike
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.