Crypter / dé-chiffrer les scripts Python en C

doublons (dans lesquels je n’ai pas trouvé de réponses): https://stackoverflow.com/questions/4066361/how-to-obfuscate-python-code Comment protéger le code Python?

J’ai donc examiné les deux liens ci-dessus ^^ et je n’ai rien trouvé d’utile pour chiffrer des scripts python et / ou masquer du code python. Je suis donc novice en C mais j’ai une expérience du python. Si je voulais développer des projets commerciaux en python, ma meilleure idée était la suivante:

créer un script ac et un script python chiffré et compilé Le script C devrait simplement fournir une clé de chiffrement de chaîne et la déchiffrer. Juste FYI ive jamais essayé réellement le cryptage, et je sais que ce ne serait pas parfait. Mais je n’ai pas besoin de parfait. Je veux juste rendre plus difficile la décompilation de mon code source Python, réalisant que ce serait toujours facile mais pas aussi facile.

J’ai regardé actuellement Cython, et je peux facilement générer un fichier * .c, maintenant comment puis-je le comstackr en binary? (avec studio visuel)

Alors, comment pourrais-je chiffrer mon code python et le déchiffrer à partir d’un script C (que je pourrais comstackr en binary, ce qui le rendrait beaucoup plus difficile à modifier)?

Voici ce que je ferais:

1) Créer un script C qui produit une clé et la stocke dans un fichier texte

2) Prenez la clé et supprimez immédiatement le fichier texte lors de l’exécution de Python

3) Utilisez la clé pour déchiffrer les parties vraiment importantes de votre code Python (assurez-vous que le fait de ne pas avoir ces bits brisera votre script), puis importez tout.

4) Rechiffrez immédiatement les bits Python importants et supprimez le fichier .pyc

Ce sera battable, mais ça vous va.

Pour chiffrer et rechiffrer vos bits python, essayez ce code:

 from hashlib import md5 from Crypto.Cipher import AES from Crypto import Random def encrypt(in_file, out_file, password, key_length=32): bs = AES.block_size salt = Random.new().read(bs - len('Salted__')) key, iv = derive_key_and_iv(password, salt, key_length, bs) cipher = AES.new(key, AES.MODE_CBC, iv) out_file.write('Salted__' + salt) finished = False while not finished: chunk = in_file.read(1024 * bs) if len(chunk) == 0 or len(chunk) % bs != 0: padding_length = (bs - len(chunk) % bs) or bs chunk += padding_length * chr(padding_length) finished = True out_file.write(cipher.encrypt(chunk)) def decrypt(in_file, out_file, password, key_length=32): bs = AES.block_size salt = in_file.read(bs)[len('Salted__'):] key, iv = derive_key_and_iv(password, salt, key_length, bs) cipher = AES.new(key, AES.MODE_CBC, iv) next_chunk = '' finished = False while not finished: chunk, next_chunk = next_chunk, cipher.decrypt(in_file.read(1024 * bs)) if len(next_chunk) == 0: padding_length = ord(chunk[-1]) chunk = chunk[:-padding_length] finished = True out_file.write(chunk) 

Donc, pour résumer, voici un pseudo-code:

 def main(): os.system("C_Executable.exe") with open("key.txt",'r') as f: key = f.read() os.remove("key.txt") #Calls to decrpyt files which look like this: with open("Encrypted file name"), 'rb') as in_file, open("unecrypted file name"), 'wb') as out_file: decrypt(in_file, out_file, key) os.remove("encrypted file name") import fileA, fileB, fileC, etc global fileA, fileB, fileC, etc #Calls to re-encrypt files and remove unencrypted versions along with .pyc files using a similar scheme to decryption calls #Whatever else you want 

Mais juste pour souligner et point important,

Python n’est pas fait pour ça! C’est fait pour être ouvert et gratuit!

Si vous vous trouvez à ce stade sans autre alternative, vous devriez probablement utiliser une langue différente

Le regard sur le projet Nuitka. C’est un compilateur python qui comstack vos scripts python en un code exécutable natif utilisant libpython pour s’exécuter.

http://nuitka.net/

Vous n’avez pas expliqué POURQUOI vous avez ressenti le besoin de chiffrer / déchiffrer. La réponse à cette question pourrait modifier matériellement les suggestions proposées.

Par exemple, supposons que vous essayez de protéger la propriété intellectuelle, mais que vous préfériez coder en python. Si c’est votre motivation, considérez cython – http://cython.org .

Mais disons que vous êtes plus préoccupé par la sécurité (par exemple: empêcher quelqu’un de modifier votre code sans la permission de l’utilisateur). Dans ce cas, vous pouvez envisager une sorte de chargeur incorporé qui vérifie votre source python AVANT d’appeler un interpréteur python incorporé.

Je suis sûr qu’il y a une demi-douzaine d’autres raisons que vous pourriez vouloir chiffrer.