Bir istemcinin kodumu yorumlanmış bir dilde yazdığını görmesini nasıl engelleyebilirim?


16

Python'da oldukça karmaşık bir yorumlanmış program inşa ediyorum. Bu kodun çoğunu birkaç aydır başka amaçlar için çalışıyorum ve bu nedenle müvekkilimin sadece kopyalayıp satmaya çalışmasını istemiyorum, çünkü adil bir miktar değerinde.

Sorun, komut istemcisinin ödediği bir sunucuda çalıştırmak için komut dosyasına ihtiyacım var, bu yüzden makinedeki belirli bir klasörü kök erişiminden koruyabilmemin veya sadece belirli bir kullanımın dizine erişebilmesini sağlamanın herhangi bir yolu var ? İşletim sistemi Ubuntu.


13
Siz ve müşteriniz arasında ne tür bir sözleşme / anlaşma var? Kodun sahibi mi, yoksa yalnızca bunları kullanma lisansınız var mı? Yoksa hiç çalışmadınız mı?
matt b

2
Python kaynağını ikili dosyaya derlemenin mümkün olduğunu düşündüm. Bu proje için mümkün mü? Öyleyse bunun yerine ikili dosyayı dağıtabilirsiniz.
Sinirli

Bence nightcracker haklı. Uygun lisanslama ve sözleşmeler teknik önlemleri değil tüm bunları engellemelidir. Özellikle bir şeyi her zaman koda edebileceğiniz / bozabileceğiniz ve her şeyiroot yapmasına izin verdiğiniz için .
Bobby

Başka bir şekilde düşünün, bir sözleşmeyi veya lisansı kırırlarsa ağlayana kadar onları dava edebilirsiniz
Jakob Bowyer

9
Herkes kodlarının adil bir değere sahip olduğunu söyler.
Kaleb Brasee

Yanıtlar:


40

Lisanslayın.

Gerçekten, hepsi bu!


6
İlk düşüncem bunu bir cevap değil, aşağılamaktı, ama haklısın. Sözleşmeleri lisanslamak ve imzalamak buraya gitmek için bir yoldur.
Bobby

@Bobby: Neredeyse tek yol. Alternatif olarak, eski sürümü çalmak zaman kaybı olacak şekilde keyifli ve kullanışlı yeni özellikler eklemeye devam etmektir.
S.Lott

yaratıcı müşterekler lisans olarak yeterli olur mu?

10
-1 Soru, bir istemcinin kodu görmesini durdurmanın yollarını sorar, bu bunu yapmaz. İnsanlar her zaman lisanslara uymazlar ve dava açmak için yasal olarak kesin bir şekilde öğrenmek mümkün olmayabilir.
Orbling

8
İstemcinin Python kodunu görmesini durduramazsınız, sökmek çok kolaydır. DRM çalışmıyor (eğer çalıştırabilirlerse, sökebilirler). Dolayısıyla tek cevap yasaldır. Ve bir kez uygulama yasasına güvendiğinizde, teknik tabanı karmaşıklaştırarak hayatı kendiniz veya müşterileriniz için zorlaştırmanın bir anlamı yoktur.
ncoghlan

10

Her zaman tüm dosyaları bayt kodu pyc için derleyebilirsiniz. Dışarıda kaynak kodu üretebilen ancak ciddi bir şey olmayan dekompresörler var.

Ancak bu sadece programınızın kodunu okuma yeteneğini çözecektir. Tek yolu korumak, nightcracker'ın dediği gibi lisanslamaktır, çünkü kodunuzu derleseniz bile, makine kodunu söyleyelim, işiniz bir lisansla korunmuyorsa, yine de iradenize göre ticarileştirilebilir.

Sonuç olarak, bayt kodunu derleyin ve daha da önemlisi Lisanslayın


Bir sorum var. Bayt derleyici rasgele değişken adları mı kullanıyor yoksa eski değişken adları mı kullanıyor? (Harici modüller bu ad alanına bağlı olduğu için eskilerini kullanması gerektiğini düşünürdüm).

@Garrett: Bayt kodu değişken adlarını içerir. Demonte zaman (deneyin hala nispeten okunmaz karmaşa sökme sindiren bir bu tarifi ) ve herhangi bir (yeni) decompilerlar bulunmamaktadır.

7

Cython kullanın. Bu, programınızı yerel bir yürütülebilir dosya olarak derlemenizi sağlar. O zaman çalmak çok daha zor olmalı .

Dizine gelince, size verebileceğim tek tavsiye, izinlerinizi doğru ayarladığınızdan emin olmaktır. ACL'ler arkadaşınız olabilir, ancak köklerin bir dosyaya erişmesini kısıtlayabileceklerinden% 100 emin değilim. Yapabilseler bile, root hala izni değiştirebilirdi. Kök, tanrı - bu şeyler böyle işliyor.

http://www.korokithakis.net/node/109


1

Yukarıdaki kullanıcının gösterdiği gibi, sökücüler kodu geri alabilir, ancak henüz çok okunabilir değildir (en azından açık kaynaklı sökücüler için değil).

Bu konuda düşünüyordum ve (zorla açık kod bir sorun çağırırsanız) bu sorunu çözebilir düşünüyorum bir yolu otomatik yeniden faktoring komut yazmaktır. Aslında bu oldukça basit olurdu. Komut dosyasını modülünüze beslersiniz ve modüle özgü tüm değişkenleri yeniden adlandırırsınız. Bu, yalnızca derlenmiş dosyayı serbest bırakmanın yanı sıra, kodunuzu gizlemek için çok şey yapar.

PyPI'de bir arama yaparken, şunu buldum: http://pypi.python.org/pypi/pyfuscate/0.1 . Bunu kontrol etmelisiniz ve diğerleri gibi ve rapor etmelisiniz: D

Ayrıca: Elbette Lisanslamanız da gerekir.


1

Ben de lisans öneririm. Lisanslamanın üstünde, ana rutinlerin kaynak kodunu asimetrik anahtar algoritması kullanarak şifreleyelim, böylece sadece müşterinizin makinesi çalıştırabilir. Çiftteki anahtarlardan biri, istemcinizin makinesinin donanımından (örneğin: ağ kartı seri numarası) elde edilen bir şey olabilir. Programı çalıştırırken kaynak kodun şifresini çözmek için çiftteki diğer anahtarı kullanın. Düz metinde teslim edilen tek şeyin şifre çözme rutini ve geri kalanının şifre metninde olacağını unutmayın.

Bu şekilde, müşteriniz görünüşte anlamsız kodunuzu kopyalayıp yapıştırabilir, ancak başka bir yerde çalıştıramaz. Benim önerim tamamen kurşun geçirmez değil: tercüman şifresi çözülmüş programı bellekte bir yerde saklayabilir. O zaman bazı hackerlar sanırım yürütme sırasında programınızı düz metin olarak almak mümkündür.

Klasörlerin root erişimini önlemeye gelince, root'un herhangi bir dosyaya / klasöre erişiminin durdurulamayacağını kabul ediyorum.


Bu sadece şaşkınlıktır, doğru araçlarla, kodun düz metinde olduğu her zaman bir nokta olacaktır . Çözümünüzü yenmenin basit bir yolu, özel bir programla yürütme API'sini yansıtan ruby/ python/ nodekodunu değiştirip kodun çıktısını almaktır.
Jamo

Ek olarak, özel anahtarın (şifre çözme için) çevreye, dolayısıyla bir saldırgana da erişilebilir olması gerekir.
Fixee

0

Lisanslama burada en iyi cevaptır. Bununla birlikte, neden kendi ekipmanlarında koşmak zorunda? Bu kadar kritik bir öneme sahipse, bir hizmet için yaylanmak ve bazı şeyler için hizmet API'sı oluşturmak isteyebilirsiniz, böylece insanlar fikri mülkiyetinizi çalmak için bile göremezler.

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.