Python projemin kodlarını şifrelemek istiyorum nasıl yaparım?

Merhaba,

bir projem var bu projenin içinde projeyi kullanan kişiler tarafından erişilmemesi gereken lisans anahtarları update çektiğim sunucuların apileri , kullanıcı login apileri , bu işi yapanların eline geçtiği zaman benim tüm emek ve uğraşlarımı heba edecekleri apiler bulunmakta kullanıcıların bu apilere ulaşmasını engellemek istiyorum pyarmor kütüphanesini kullanıyordum fakat 35.000 byte üstü şifreleme yapmıyor para istiyor 60$ gibi bir ücreti var onuda şu aşamada vermek istemiyorum altarnatifi varmı bu işin nasıl bir yol izleriz olmadı 60$ vereceğim yanıt verenlere şimdiden teşekkürler

İşe yarar mı bilemiyorum ancak, Nuitka Python kodunu çalıştırabilir dosyaya çevirirken kodu C kodu oluşturup derliyor diye biliyorum. Onu deneyebilirsiniz.

hocam o kütüphaneyede baktım fakat kodları şifrelemiyor sadece okunması zorlaşıyor , kodlardan ziyada dediğim gibi içindeki api ve keyler önemli

Cython deneyebilirsiniz ya da uygulama büyük değilse upx ile sıkıştırıp pyarmor kullanmayı deneyebilirsiniz. Aklıma gelen çözüm bunlar.

1 Beğeni

Tek 1 dosya olduğunu varsayıyorum:
kodu pyinstaller ile exe yap sonra
anahtarların dosyalarda olduğunu varsayıyorum
exe yaptığın ana kodun içine cryptography kütüphanesi ile decoder encoder ekle
sanırım şurada adam açıklamış: Python ile Veri Şifreleme ve Çözme: Fernet - Onur ŞAHİN (onursahin.net)
mantığı şu şekilde olabilir:
exenin içinde bir değişkene licance.txt veyahut başka birşeyin içindeki şifreli kodu yaz sonra da çevir.
bildiğim kadarı ile çevirme anahtarına (kendiniz belirliyorsunuz) göre decode ettiği için bilmmeyen kimse elde edemez tabi benim bildiğim (az araştırmanız gerekebilir) şifrelemeti kullanırsanız.

Edit1:

Biraz göz gezdirdim ve sizi doğru anladı isem kolaylıkla bu işi başarabilirsiniz (verdiğin linkden bahsediyorum)

Merhaba,

Falldog/pyconcrete: Protect your python script, encrypt it as .pye and decrypt when import it (github.com)

Şöyle bir şey buldum.

Doğrudan derlenmiş bir kütüphane değil, benim konfigürasyonumda derleyip denememe imkan vermiyor şu an.

Pip le indirip denediğimda derlenemediği için midir nedir bir kaç hata verdi.

Normalde denemediğim kodu vermem.

Ama kısıtların arasında şifreleme de görünce bulabildiğim tek düzgün açıklaması olan link buydu.

Her ne kadar 128 bit AES şifrelese de yeter sanırım.

İnceler dener ve deneyimlerini başlayışırsan belki başka insanlara da faydası olabilir.

Kolay gelsin.

büyük hocam sıkıştırsakta projeye ekleyeceğim yeni şeyleri ekleyemem ve pyarmorun deneme sürümünü bugün yabancı bir arkadaş kodun noktasına virgülüne kadar kırıp bana gösterdi , pyarmor lisanslı sürümü alsak acaba kırabilirmi onu düşünüyorum şuan

image

hocam benim aradığım şey tam olarak bu değil , benim kaynak kodlarımın açılaması lazım kullanıcılarım hiçbir şekilde kaynak kodlarımı görmemeli yani açık vermemem lazım keylerim apilerimide koruyabilmem için kodlarımında görünmemesi lazım

hocam bu sistem örneklerine baktım fakat benim anladığım kadarıyla kodu decode yaptıktan sonra kaynak kodları gözükecek ve bir anlamı kalmayacak ve tek 1 python dosyası değil 1 den fazla python birbirine bağlı şekilde bir yapı var aynı zamanda bu pythonlar sunucularla haberleşiyor

bunu araştıracağım sağlam bir şeye benziyor hocam teşekkürler deneyimlerimi bu konu altında yada ekstra bir konu olarak paylaşacağım eğer olumlu bir sonuç alırsam tabi , iyi akşamlar

Bunun neden mümkün olmadığı alıntıladığım konuda anlatılıyor. Sizin yazdığınız kod metni birebir görülemese bile kodun ne yaptığı görülebilir. Eğer internet üzerinden haberleşirken kullanacağınız şifreler varsa bunları kullanıcının bulması için kodu incelemesine bile gerek kalmayabilir.

Bunun çözümü gizli bilgileri kullanıcının erişebileceği bir yere koymamak. Yetkilendirme sisteminizi gözden geçirmek isteyebilirsiniz.

3 Beğeni

Zaten bende sizin bu durumunuz için böyle birşey yaptım ayrıca bir soru sormak istiyorum exe ye dönüştürmeyi pilanlıyor musunuz? Ona göre bir çözüm yöntemim var:
Runner.pyw ← konsol gözükmeyecek istersen bunu exe de yaparsın
main.py
a.py
b.py
c.py
bunların arasında bir decode encode bağlantısı olabilir kilit nokta şu bence → decode ettiğin şifrelemeleri program içinde bir değişkene ata exec() vb. bi komut ile de çalıştırabilirsin.

Merhaba,

Python kodlarını şifrelemenin iyi bir çözüm olduğunu düşünmüyorum. Ben olsaydım 7/24 aktif olarak çalışacak bir sunucu oluştururdum. Programı da bu sunucuyla bağlantı kuracak şekilde tasarlardım. Programı kullanacak kullanıcıların yetkilerini tanımlamak için sunucu tarafında bir yönetici paneli oluştururdum. Programa da bir doğrulama paneli yerleştirirdim. Programın daha önce yetki verilmiş bir hesapla aynı anda oturum açamaması için de sunucu tarafında birkaç düzenleme yapardım. Kullanıcıların ihtiyaç duyacağı anahtar veya şifreleri de kodun içine gömmezdim; bunun yerine doğrulama işleminden geçebilen kullanıcılara bu bilgileri sunucu ile gönderirdim.

Programın aynı hesap ile farklı bilgisayarlarda kullanılmasını engellemek için uuid (Universal Unique Identifier) kullanılabilir. Diyelim yetki verilmiş bir kullanıcı programı farklı bir makinede kullanmaya çalışıyor olsun. Kullanıcı giriş yapmaya çalıştığında, sunucu, giriş yapmaya çalışılan bilgisayarın uuid numarası ile hesabın kayıt edildiği esnada kullanılan uuid numarasını karşılaştırabilir. Şayet karşılaştırma sonucunda, giriş yapmaya çalışan kullanıcının farklı bir bilgisayar kullandığı ortaya çıkarsa, bu kez de giriş için kullanıcı adı ve şifreye ek olarak kullanıcının token girmesini şart koşabilirsiniz. Kullanıcının adresine otomatik olarak bir unique token gönderilebilir. Kullanıcı, bu unique token, kullanıcı adı ve şifreyi kullanarak giriş yaptığında, hesabın uuid bilgisi ve token hemen değiştirilir ki aynı token bir daha kullanılamasın. Hatta tokene 1 dakikalık veya 30 saniyelik ömür de biçebilirsiniz. Ama her halükarda token’i sadece bir kez kullanabilecek şekilde düzenlemek gerek.

Özetle, ürünü şifrelemek yerine, ürünün bazı özelliklerini servislere dönüştürmek ve bu servisleri de ancak yetkileri olan insanlara vermek daha uygun bir yöntem gibi görünüyor.

Benim aklıma gelenler bunlar. Umarım faydası olur.

2 Beğeni

Doğru anladığım kadarıyla şöyle bir şey diyorsunuz:

code = 'print("Hello world")' 

encrypted_code = encrypt_array(code)

Bu kodu lisans anahtarı olacak bir Key ile şifreleyelim ve çalıştığı sırada şifreli kodu çözelim diyorsunuz (kod temsili):

KEY = 1234 #Lisans anahtarı gibi

exec(decrypt_encrypted_array(encrypted_code, KEY))

Bu kodu decrypt ettiğimizde kod bir değişkene dolayısıyla hafızaya aktarılacak. Kod hafızaya aktarıldığında ise kaynak kod OpenProcess ve ReadProcessMemory ile kolaylıkla alınabilir. Kaynak kod alınınca da lisans anahtarını da kimse iplemez zaten.

Ben şahsen, kaynak kodları şifreleyip kullanıcıya göndermek yerine gerekli işlemleri bir sunucudan lisans doğrulaması yaparak gizli kalması gereken işlemleri sunucu tarafında yapardım. Sonuç hem daha güvenli hem daha temiz olurdu. Diğer türlü kaynak kodunu şifreli veya şifresiz haliyle karşı tarafa gönderildiği için günün sonunda illaki çözülebilir. Hele hele şifrenin anahtarını ve kendisini de aynı dosyada gönderdiğimiz için bu yöntem sadece program çalıştırılmadığında kodun gizli kalmasını sağlayacaktır. Ancak programı çalıştırmak istediğimizde kodu şifreli olarak çalıştıramayacağımız için kodu çalıştırılan bilgisayarda çözmek zorunda kalırız. Bu yüzden kodu şifreli olarak gönderip çalıştırıldığında kodu kendi kendine çözmesinin pek mantıklı olacağını sanmıyorum.

1 Beğeni

Mantıklı aslında size öneride bulunabilirim github bu konuda çok destek veriyor github codespaces ile hep açık kalan discord botu yapmıştım biara veya bs4 gibi şeyler ile şifrelenmiş veriyi gitub pagesden çekebilirsin ama bunlar işe hoşunuza gider mi bilmem.

evet hocam exeye dönüştüreceğim , yani decode etmekten çok şöyle bir şey düşünüyordum ben araştırmadan önce ben py yi şifreleyeceğim daha sonra exe yapacağım ve çalışabilir bir şey ortaya çıkacak olarak düşünüyordum bu konuda bilgim azdı , şimdi baktığımda böyle bir şeyin mümkün olamaycağını anladım yani şifreleme yaptığım zaman bu şifrelemin açılması lazım açıldığı zamanda şifrelemenin bir anlamı kalmıyor sunuculardan çektirme gibi bir sistem düşünüyorum ama bundada kullanıcların yapacağı işlemler benim sunucularıma yük bindirecek ve sunucu maliyeti olarak bana geri dönüşü olacak inanın çıkmazdayım bir örnek kodunuz varsa yani kaynak kodlarını alınmasını engelleyecek bir sistem atarsanız bir incelerim hocam fazlada bir yorum yapamıyorum konu hakkında çünkü bildiklerimin hepsini konuyu detaylı araştırdıktan sonra unuttum gibi oldu yanlış biliyormuşum hep

sunucuya kurduğum zaman en başta kullanıcıların kullandığı zaman sunucularıma yüksek yük bindirecek ve bana sunucu mağliyeti olarka geri dönüşü olacak bir diğer konuda sunucularıma bağlanmak için gene bir client yazmam lazım ve bu clienti gene şifreleme gibi bir durum söz konusu oluyor şifrelemezsem sunucu bağlantı bilgilerimi görcekler ip:port şeklinde yani buda sunucu tarafında bana fazlaca iş çıkartacak sunucunun firewallı olsun korunması olsun loadbalancer ı olsun yani sunucu tarafında çalıştırmak kodu ne kadar mantıklı bilmiyorum kodları sunucudan çektirme gibi bir şey varmı onu bilmiyorum yani aklımda baya karıştı hocam , uuid aklımda var fakat şifrelemeyi çözmeden onunda bir işe yaracağını sanmıyorum yani kod açıksa istediğimiz önlemi alalım her türlü geçilir diye düşünüyorum ve öylede olur gibi duruyor açıkcası

Executing Encrypted Python with No Performance Penalty (soroco.com)

soroco/pyce: Encrypted Python Execution (github.com)

Şu konlara da göz atmak isteyebilirsiniz.

1 Beğeni

Programın kendisi zaten istemci olacak, sunucunuz da django veya flask ile oluşturabileceğiniz bir web sunucu. Yani bu sitenin de giriş yaparken bir doğrulama sistemi var değil mi? Buna benzer bir doğrulama sistemi tasarlayacaksınız aslında.