Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Falldog/pyconcrete
Protect your python script, encrypt it as .pye and decrypt when import it
https://github.com/Falldog/pyconcrete
obfuscate obfuscation protection python python-encryption python-library
Last synced: 3 months ago
JSON representation
Protect your python script, encrypt it as .pye and decrypt when import it
- Host: GitHub
- URL: https://github.com/Falldog/pyconcrete
- Owner: Falldog
- License: apache-2.0
- Created: 2015-01-07T00:24:28.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2024-06-20T09:23:21.000Z (5 months ago)
- Last Synced: 2024-07-24T08:23:48.210Z (3 months ago)
- Topics: obfuscate, obfuscation, protection, python, python-encryption, python-library
- Language: C
- Size: 5.19 MB
- Stars: 684
- Watchers: 25
- Forks: 149
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome - Falldog/pyconcrete - Protect your python script, encrypt it as .pye and decrypt when import it (C)
README
pyconcrete
==============
[![Travis](https://img.shields.io/travis/Falldog/pyconcrete.svg?label=travis)](https://travis-ci.org/Falldog/pyconcrete)
[![AppVeyor](https://img.shields.io/appveyor/ci/Falldog/pyconcrete.svg?label=appveyor)](https://ci.appveyor.com/project/Falldog/pyconcrete)
[![PyPI Version](https://img.shields.io/pypi/v/pyconcrete.svg)](https://pypi.python.org/pypi/pyconcrete)
[![PyPI PyVersion](https://img.shields.io/pypi/pyversions/pyconcrete.svg)](https://pypi.python.org/pypi/pyconcrete)
[![PyPI License](https://img.shields.io/pypi/l/pyconcrete.svg)](https://pypi.python.org/pypi/pyconcrete)Protect your python script, encrypt .pyc to .pye and decrypt when import it
--------------
Protect python script work flow
--------------
* your_script.py `import pyconcrete`
* pyconcrete will hook import module
* when your script do `import MODULE`, pyconcrete import hook will try to find `MODULE.pye` first
and then decrypt `MODULE.pye` via `_pyconcrete.pyd` and execute decrypted data (as .pyc content)
* encrypt & decrypt secret key record in `_pyconcrete.pyd` (like DLL or SO)
the secret key would be hide in binary code, can't see it directly in HEX viewEncryption
--------------
* only support AES 128 bit now
* encrypt & decrypt by library OpenAESInstallation
--------------
* need to input your passphrase create secret key for encrypt python script.
* same passphrase will generate the same secret key
* installation will add `pyconcrete.pth` into your `site-packages` for execute `sitecustomize.py` under pyconcrete which will automatic import pyconcrete### pip
You must set up environment variable `PYCONCRETE_PASSPHRASE` for installation continuously.
```sh
$ PYCONCRETE_PASSPHRASE= pip install pyconcrete
```or, if you use an old pip version that supports --egg:
```sh
$ pip install pyconcrete --egg --install-option="--passphrase="
```
> pyconcrete installed as egg, if you want to uninstall pyconcrete will need to manually delete `pyconcrete.pth`.### source
* get the pyconcrete source code
```sh
$ git clone
```* install pyconcrete
```sh
$ python setup.py install
```Usage
--------------### Full encrypted
* convert all of your `.py` to `*.pye`
```sh
$ pyconcrete-admin.py compile --source= --pye
$ pyconcrete-admin.py compile --source= --pye
```* remove `*.py` `*.pyc` or copy `*.pye` to other folder
* *main*.py encrypted as *main*.pye, it can't be executed by normal `python`.
You must use `pyconcrete` to process the *main*.pye script.
`pyconcrete`(*exe*) will be installed in your system path (ex: /usr/local/bin)```sh
pyconcrete main.pye
src/*.pye # your libs
```### Partial encrypted (pyconcrete as lib)
* download pyconcrete source and install by setup.py
```sh
$ python setup.py install \
--install-lib= \
--install-scripts=
```* import pyconcrete in your main script
* recommendation project layout
```sh
main.py # import pyconcrete and your lib
pyconcrete/* # put pyconcrete lib in project root, keep it as original files
src/*.pye # your libs
```Test
--------------
* test in local
```sh
$ ./pyconcrete-admin.py test
```* test in docker environment
```sh
$ ./bin/run-test.sh
```* add test case for pyconcrete.exe
* reference exists test case
* add folder in `test/exe_testcases/`
* add testing code at `test/exe_testcases/src/main.py`
* add validator at `test/exe_testcases/validator.py`Example
--------------[Django with pyconcrete](example/django)
Building on Linux
--------------### Python 3.7 - fix Ubuntu 14.04 build error
```bash
x86_64-linux-gnu-gcc: error: unrecognized command line option `-fstack-protector-strong`
```
Reference by [Stackoverflow solution](https://stackoverflow.com/questions/27182042/pip-error-unrecognized-command-line-option-fstack-protector-strong)
* you should install `gcc-4.9` first
* symlink `/usr/bin/x86_64-linux-gnu-gcc` to `gcc-4.9`
* build pycocnrete again
* rollback symlinkBuilding on Windows
--------------### Python 2.7 - Visual Studio 2008
https://www.microsoft.com/en-us/download/details.aspx?id=44266* Open VS2008 Command Prompt
* `set DISTUTILS_USE_SDK=1`
* `set SET MSSdk=1`
* create `distutils.cfg` and put inside
```text
[build]
compiler=msvc
```### Python 3.5, 3.6, 3.7 - Visual Studio 2015
[MSVC 2015 Build Tools](http://landinghub.visualstudio.com/visual-cpp-build-tools)
[Document](https://matthew-brett.github.io/pydagogue/python_msvc.html#python-3-5-3-6)
* make sure setuptools >= 24.0
```sh
python -c 'import setuptools; print(setuptools.__version__)'
```* Open VS2015 Build Tools Command Prompt
* `set DISTUTILS_USE_SDK=1 `
* `setenv /x64 /release` or `setenv /x86 /release`### Reference
https://matthew-brett.github.io/pydagogue/python_msvc.html
https://github.com/cython/cython/wiki/CythonExtensionsOnWindowsAnnouncement
--------------
pyconcrete is an experimental project, there is always a way to decrypt .pye files, but pyconcrete just make it harder.