Python Programınızı Korumak

Python programınızı korumanın birkaç yollarını yazdım. Umarım işinize yarar.

Birinci Yöntem:
Oma adlı bir kişi tarafından bulunan bir sistem bu. Python’ı bilen bir kişi rahatlıkla anlar ve bunu çözebilir.
Yaptığı şey ise dosyanın ilk satırını okuyor ve #oma yazısını arıyor. Eğer #oma yazısı değiştirilmişse “Kod kopyalanmıştır.” diyor. Kodunuzu çalan kişi “Bunu ben yaptım.” diye tanıtırken rezil olabilir :slight_smile:
Kod:

#oma did this //bu kısım silinirse "Kod kopyalanmıştır" yazısı gelecektir.
print("Here")
print("is")
print("oma")
#önemli kısım:
with open(__file__) as f:
    mylist = f.readlines(3)
    secret = (mylist[0][0:7])
    if secret != "#oma":
        print("code is copied")

İkinci Yöntem:
Çok basit bir yöntem yine. Python’ı bilen bir kişi rahatlıkla çözebilir.
Yaptığı şey dosya kendi üzerinden çalıştırılıyorsa “Kod kopyalanmıştır.” diyor. Yani kodu içeri aktarmak gerek.
Bu sistem yazdığınız koda göre değişkendir. Bu yüzden sistemi sizin çözüp yapmanız gerek.
Gereken kod:

#En son satıra yazın:
if __name__ == '__main__':
    print("Kod kopyalanmıştır.")

Üçüncü Yöntem:
Yapılması basit fakat geri çevrilmesi zor. Kodunuzu .pyc (Compiled Python File) haline getiriyorsunuz.
Yapmanız gerekenler sadece şunlar:

  1. Komut Satırı ya da Terminal’i açmak.
  2. Verilen komutu yazmak : python -m py_compile <dosya_ismi>.py

Bu size şöyle bir dosya verecek : “dosyanın_ismi.pyc”. Bu pyc dosyasını geri çevirmek çok zor. Bu yüzden bu sistem güzel.
Not: Eğer birden fazla dosyası .pyc yapmak istiyorsanız şu komutu deneyebilirsiniz:

python -m py_compile <dosya1>.py <dosya2>.py

Bulabildiğim Son Yöntem:
Dosyanızı .exe haline çevirmek. Bunu için birçok Python modülü mevcut. Örneğim py2exe.
Bu yöntem yazdığım diğer yöntemlere göre yapılması daha zor fakat zorluğunun karşılığını veriyor.

Yardım ettiysem ne mutlu bana :slight_smile:

Daha detaylı bakmak isterseniz aşağıdaki kaynaklar işinize yarar.

Kaynaklar:
Quora
Stackoverflow

5 Beğeni

Öncelikle konu için teşekkürler fakat bir kaç düzeltme şart gibi. İlk olarak şunu belirteyim: kodları korumak iki anlama gelebilir:

  1. Kodların size ait olduğunu kanıtlamak. Bunun için bir lisans kullanırsınız. Kodlarınızın içeriği herkese açık (open source) veya kapalı olabilir, her koşulda eserinize sahip çıkmak en doğal hakkınız.

  2. Sizin bahsettiğiniz gibi kodların kendilerini korumak. Diğer bir ifadeyle yazdıklarınızı diğerlerinden saklamak. Bunun için farklı yollar mevcut.

Bunun dışında sizin bahsettiğiniz birinci yöntem kodlarınızın içeriğini korumak konusunda hiçbir işe yaramaz ne yazık ki. Çünkü kodlara sahip olan kişi, sizin yazdığınız haliyle elinde tuttuğu için, kodlarınızı rahatlıkla görebilir, değiştirebilir, kopyalayabilir vs. Ayrıca programlamada başlangıç seviyesindeki biri bile bu korumayı(!) rahatlıkla farkedebilir ve kaçınabilir.

İkinci yöntem ise Python’un kendi içerisinde kullanılan bir özellik. Amacını şu konuda anlatmıştım. Koruma sağlamaktan çok bize betikler üzerinde kontrol sağlıyor.

Öte yandan üçüncü yöntem ciddi anlamda bir koruma için ilk adım sayılabilir. Compiled Python File (.pyc), kodlarınızın bytecode çevrilmiş halidir. Sizin de dediğiniz gibi geri çevrilmesi zordur. Fakat imkansız değildir. Deneyimli ve azimli bir programcı kodları geri çevirebilir. Okuduğum bazı tartışmalarda sunulan bir yöntem vardı: kodlarınızı yazdıktan sonra değişkenlerin isimlerini karmaşık ifadelerde değiştirmek. Bu sayede kodlar geri çevrilse bile çeviren kişi kodları anlamakta iyice zorlanacaktır.

Son yöntem bir öncekinden daha çok koruma sağlayacaktır. Fakat eksisi yalnızca Windows platformunda işe yaraması. Ayrıca PyInstaller daha güncel ve önerilen bir alternatif.

Ekleme: Şu ana kadar okuduğum tartışmalarda çıkarılan genel sonuç Python’un kod saklama konusunda pek uygun bir dil olmadığı. Yine de gördüğüm en iyi çözüm kodların çekirdek kısmını (core) Cython ile yazmak. Alabileceğiniz en güçlü çözüm şimdilik bu.

2 Beğeni

Teşekkürler. Aslında if main’i çok kullanıyorum fakat hep aynı şekilde kullanmaktansa böyle bir küçük koruma eklemeye çalıştım. Pek başarılı mıdır bilemem. Buraya zaten sadece bildiğim yöntemleri yazmak istedim. Daha eklemek istediğiniz bir şeyler olursa makalemi düzenleyebilirsiniz.

Pytoapp tarzında modüller kullanarak son yöntemi macos için de kullanabilirsiniz.

2 Beğeni

Apk yaptıktan sonra kodlar çözülebilir mi.

Javada şifrelenmezse çözülebilir ancak python için denemek gerekli.

Obfuscating da bir yöntem sayılabilir.

https://liftoff.github.io/pyminifier/

Obfuscating fazla düzenli çalışmıyor. Komut İstemi aracılığıyla birkaç test yaptım ve neredeyse çoğunda IndentError aldım. Halbuki normal kodda hiçbir sıkıntı yok.

kullandığınız yazılımdan (pyinifier) dan kaynaklanıyor olabilir.Obsufcating çalışmıyor demeniz saçma olmuş.Eğer düzgün yaparsanız gayet iyi bir sistemdir.Kullanışlıdır.