# bobskater
An AST based Python obfuscator that robustly mangles names in Python code
### Current limitations:
* DOES NOT SUPPORT: Annotations, evals, templated strings
* No configuration but instead takes a cautious approach in determining what identifiers to mangle. Globals, kwargs, class namespace identifiers, and others are not obfuscated but this should be user 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
```
from bobskater import obfuscateFile, obfuscateString
#Takes a file path and overwrites it with the obfuscated file
obfuscateFile(filePath)
#Takes a string of Python code and obfuscates it, returning the result
output = obfuscateString(open('myfile.py', 'r').read())
```
### Developing
The library is broken up into two parts. The first is `FrameTrackingNodeVisitor` which is an `ast.NodeVisitor` that is used to read an entire file and track all identifier usages and in which scopes they were defined, internally using `FrameTrackingNodeVisitor.Frame` and `FrameTrackingNodeVisitor.FrameEntry`. Public methods then allow querying of this internal representation (TODO: maybe the representation shouldn't be internal to the walker but should output it).
The second part is the `ReleaseObfuscationTransformer` which actually transforms the given AST into the obfuscated AST. It internall creates a `FrameTrackingNodeVisitor` to then query information from.
An AST based Python obfuscator that robustly mangles names in Python code
### Current limitations:
* DOES NOT SUPPORT: Annotations, evals, templated strings
* No configuration but instead takes a cautious approach in determining what identifiers to mangle. Globals, kwargs, class namespace identifiers, and others are not obfuscated but this should be user 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
```
from bobskater import obfuscateFile, obfuscateString
#Takes a file path and overwrites it with the obfuscated file
obfuscateFile(filePath)
#Takes a string of Python code and obfuscates it, returning the result
output = obfuscateString(open('myfile.py', 'r').read())
```
### Developing
The library is broken up into two parts. The first is `FrameTrackingNodeVisitor` which is an `ast.NodeVisitor` that is used to read an entire file and track all identifier usages and in which scopes they were defined, internally using `FrameTrackingNodeVisitor.Frame` and `FrameTrackingNodeVisitor.FrameEntry`. Public methods then allow querying of this internal representation (TODO: maybe the representation shouldn't be internal to the walker but should output it).
The second part is the `ReleaseObfuscationTransformer` which actually transforms the given AST into the obfuscated AST. It internall creates a `FrameTrackingNodeVisitor` to then query information from.
Metadata
Release files for bobskater 0.0.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| bobskater-0.0.4.tar.gz | 8.5 kB | Details |
Release files / bobskater-0.0.4.tar.gz
| Download URL | bobskater-0.0.4.tar.gz |
|---|---|
| Size | 8.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
72e15d98b25d503ed377d2a4b608e99b9ed6c60c48876165982da7096ea1b20c
|
|
BLAKE2b-256 checksum How to use checksums |
8b79af9ab0d9b2e2069640f744588720f16c4a237e5c2fe2e7a0737c08db7ff6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |