Metadata-Version: 2.1
Name: bobskater
Version: 0.2.0
Summary: AST based Obfuscator for Python
Home-page: https://github.com/Cobertos/bobskater/
Author: Peter "Cobertos" Fornari
Author-email: cobertosrobertos@gmail.com
License: MIT
Keywords: bobskater obfuscator obfuscation minifier mangler python
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.4
Classifier: Topic :: Software Development :: Build Tools
Classifier: Topic :: Software Development :: Code Generators
Description-Content-Type: text/markdown
Requires-Dist: astunparse

# bobskater

An AST based Python obfuscator that robustly mangles names and other obfuscations of Python code

### Current limitations:
* DOES NOT SUPPORT: Annotations, evals, templated strings, imports of the form import xxx.yyy
* Very little configuration currently and instead takes a cautious approach in determining what identifiers to mangle. Globals, kwargs, class namespace identifiers, and others are not obfuscated but type of obfuscations should be use selected in the future.
* It is only tested with Python v3.5 and might not work with other AST versions
* Scoping for comprehensions are kind of hacky (and basically follows Python 2 comprehension scope leaking methodology)

### Installation

```
pip install bobskater
```

### Usage

`bobskater` provides a few mechanisms for direct use.

* `obfuscateString("")` obfuscates a string of source code.
* `obfuscateFile('myfile.py')` will obfuscate an entire file and overwrite the original

Both take keyword arguments for configuration:

* `removeDocstrings` will remove docstrings by replacing them with `pass` statements (to handle even cases where a function has only a docstring). Defaults to `True`
* `obfuscateNames` will obfuscate all names except globally scoped variables, kwargs, builtins, and identifiers in a class namespace. Defaults to `True`

There are no other obfuscations performed than the two mentioned above currently in `bobskater`

#### Example

```
from bobskater import obfuscateString

myFileContents = open('myfile.py', 'r').read()

#Will obfuscate myFileContents and return it into output. Names will not be mangled, only docstrings will be removed
output = obfuscateString(myFileContents, obfuscateNames=False)
```

### Developing

See CONTRIBUTING.MD

