Compare the best free open source Software Development Software at SourceForge. Free, secure and fast Software Development Software downloads from the largest Open Source applications and software directory
>>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:
>
>
Download Wrapper for the PyCrypto library for free. Wrapper library for PyCrypto, which simplifies usage of PyCrypto considerably, while still not barring the programmer from the underlying functionality.
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:
from yawPyCrypto.Cip her import DecryptCipher, EncryptCipher
from yawPyCrypto.Cip her import ZipDecryptCiphe r, ZipEncryptCiphe r
from yawPyCrypto.Con stants import CIPHER_BLOWFISH , MODE_CBC
# 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("clea r")
print
print "Hello !"
print
print "I just encrypted some text. It looks like this now:"
print
print base64.b64encod e(a[0])
print
print 'Please notice, that I just encoded the text once more using
"base64.b64enco de()" to make it printable.'
print
print "The password for decryption is: "
print
print base64.b64encod e(a[1])
print
print "Let's decrypt again (the original password must be passed without
b64encoding):"
print
print doDecrypt(a[0], a[1])
print
>>On Apr 6, 3:19 pm, hlubenow <hluben...@gmx. netwrote:
>>>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:
>>
>>
>
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:
>
>
Download Wrapper for the PyCrypto library for free. Wrapper library for PyCrypto, which simplifies usage of PyCrypto considerably, while still not barring the programmer from the underlying functionality.
>
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.Cip her import DecryptCipher, EncryptCipher
from yawPyCrypto.Cip her import ZipDecryptCiphe r, ZipEncryptCiphe r
from yawPyCrypto.Con stants import CIPHER_BLOWFISH , MODE_CBC
>
>
def doEncrypt(text, passw = None):
>
e = EncryptCipher(p assw, 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(encry ptedtext, passw):
d = DecryptCipher(p assw)
d.feed(encrypte dtext)
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("clea r")
>
print
print "Hello !"
print
print "I just encrypted some text. It looks like this now:"
print
>
print base64.b64encod e(a[0])
>
print
print 'Please notice, that I just encoded the text once more using
"base64.b64enco de()" to make it printable.'
print
print "The password for decryption is: "
print
print base64.b64encod e(a[1])
print
print "Let's decrypt again (the original password must be passed without
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 ...
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.
That is to say, for the user to be able to run your program, they must
have the key. They don't have to know they have the key, but they
have to have it. This isn't really secure, it's just obscure. It
depends on the user not finding the key, and on no one telling them
where it is. A determined and technically savvy user will surely find
the key (not least by debugging the start-script).
Basically, this doesn't work for the same reason that DRM doesn't
work.
--
+-----------------------------------------------------------+
| Jason F. McBrayer jmcbray@carcosa .net |
| If someone conquers a thousand times a thousand others in |
| battle, and someone else conquers himself, the latter one |
| is the greatest of all conquerors. --- The Dhammapada |
Comment