Hide the python-script from user

hlubenow hlubenow2 at gmx.net
Sat Apr 7 10:53:14 EDT 2007


hlubenow wrote:

> hlubenow wrote:
> 
>> ts-dev wrote:
>> 
>>> On Apr 6, 3:19 pm, hlubenow <hluben... at gmx.net> wrote:
>>>> recently there was a thread about hiding the python-script from the
>>>> user. The OP could use
>>> 
>>> Interesting - thanks
>> 
>> Well, testing it, it doesn't seem to work very well ...
>> 
>> It seems, Python-code is rather difficult to obfuscate, probably because
>> of its clear syntax and indentations. Here's yet another approach:
>> 
>>
>
http://pythonhacker.is-a-geek.net/my_programs/pyfuscate/pyfuscate-0.1.zip/view
>> 
>> H.
> 
> That didn't work very well either :(.
> 
> Ok, but now I can offer a real secure solution:
> 
> You can have real encryption in Python using this modules:
> 
> 
> http://www.amk.ca/files/python/crypto/pycrypto-2.0.1.tar.gz
> 
> and
> 
> http://sourceforge.net/projects/yawpycrypto
> 
> Below I post a code-example that I've written some time ago. With it,
> encrypting text is rather easy.
> 
> Then you have to program a start-script, that reads in your script and the
> decryption-key. The decryption-key must be encrypted too. Such a encrypted
> key can be generated by the modules if you don't pass a password to my
> function "doEncrypt(). The decryption-key must then be hidden somewhere
> within the encrypted program-script. That's because, if the user knows
> where to find the key, he can decrypt the program-script.
> 
> If your start-script is written, everything should work automatically, one
> shouldn't nearly notice the decryption-process.
> 
> Ok, here's my example code, how to encrypt and decrypt some text with the
> modules:
> 
>
----------------------------------------------------------------------------
> 
> #!/usr/bin/env python
> 
> import os
> import sys
> import base64
> 
> from yawPyCrypto.Cipher import DecryptCipher, EncryptCipher
> from yawPyCrypto.Cipher import ZipDecryptCipher, ZipEncryptCipher
> from yawPyCrypto.Constants import CIPHER_BLOWFISH, MODE_CBC
> 
> 
> def doEncrypt(text, passw = None):
> 
>     e = EncryptCipher(passw, CIPHER_BLOWFISH, MODE_CBC)
>     e.feed(text)
>     e.finish()
>     encryptedtext = e.data
> 
>     if passw != None:
>         passwr = passw
>     else:
>         passwr = e.password
> 
>     a = (encryptedtext, passwr)
>     return a
> 
> 
> def doDecrypt(encryptedtext, passw):
>     d = DecryptCipher(passw)
>     d.feed(encryptedtext)
>     d.finish()
>     decoded = (d.data)
>     return decoded
> 
> 
> # Calling the encryption routine.
> # If you just pass the text to encrypt, a password is generated:
> 
> a = doEncrypt("For your eyes only !", "Melina")
> 
> 
> # Just trying to clean the screen:
> 
> if sys.platform == "win32":
>     os.system("cls")
> else:
>     os.system("clear")
> 
> print
> print "Hello !"
> print
> print "I just encrypted some text. It looks like this now:"
> print
> 
> print base64.b64encode(a[0])
> 
> print
> print 'Please notice, that I just encoded the text once more using
"base64.b64encode()" to make it printable.'
> print
> print "The password for decryption is: "
> print
> print base64.b64encode(a[1])
> print
> print "Let's decrypt again (the original password must be passed without
b64encoding):"
> print
> print doDecrypt(a[0], a[1])
> print
> 
>
----------------------------------------------------------------------------
> 
> See you
> 
> H.

This still has a problem: The start-script has to know how to decrypt the
main-script and the start-script is visible, so the user can see how it
does it.
Perhaps one could obfuscate the start-script or write a C extension, that
does decrypting instead of the start-script.
This is getting rather complicated ...

H.



More information about the Python-list mailing list