Skip to main content

Deep algorithmic code protection for Python

Project description

orendos

deep algorithmic code protection for Python

v1.0.0  |  C/C++ kernel  |  Python runtime  |  cross-platform


what is orendos?

orendos is a code protection library that transforms Python source into a custom machine language that cannot be decompiled, reversed, or read. the final output is a binary format processed by a deep algorithmic engine written in C — no bytecode, no opcodes, no readable structures.

the interpreter executes the protected code directly through layered internal algorithms without ever decoding it back to Python.

protection layers

layer engine description
feistel cipher C 16-round feistel network with dynamic S-boxes
xor stream C xorshift128+ stream cipher with entropy-derived keys
byte permutation C 256-entry permutation tables (fisher-yates)
data scattering C block interleaving with noise injection
anti-debug shield C debugger detection, timing checks, memory wiping
dynamic entropy C xoshiro256** PRNG — different output every compilation

key features

  • every compilation produces unique output — same source, different binary
  • no standard bytecode or opcodes — custom internal representation
  • the interpreter does not decode — it executes through deep algorithmic pipelines
  • anti-debugging and anti-tampering built into the C kernel
  • memory wiping after execution — no traces left in RAM
  • supports all Python features, libraries, and frameworks
  • works on Linux, Windows, macOS, Android

installation

pip install orendos

from source

git clone https://github.com/6x-u/orendos.git
cd orendos
pip install .

requires: Python >= 3.7, C compiler (gcc/clang/msvc)


usage

compile a Python file

from orendos.compiler import compile_file

oro_path, wrapper_path = compile_file("my_script.py")
print(f"protected: {oro_path}")
print(f"runner: {wrapper_path}")

run protected code

from orendos.runtime import execute_oro

execute_oro("my_script.oro")

protected file format

after compilation, a wrapper .py file is generated:

import orendos as mero
"my_script.oro"
o0o-run

as mero is required — without it the runtime will not activate.

CLI

# compile
orendos compile my_script.py

# run
orendos run my_script_protected.py
orendos run my_script.oro

# info
orendos info

interactive converter script

python scripts/convert.py

the script will:

  1. ask for the Python file path
  2. compile with deep algorithmic transformation
  3. display done save and show the output paths
  4. the generated file runs without any errors

how it works

Python Source
     |
     v
 [AST Parse]
     |
     v
 [Code Object → Marshal]
     |
     v
 [C Engine: Feistel Encrypt (16 rounds)]
     |
     v
 [C Engine: Data Scatter (8 blocks + noise)]
     |
     v
 [C Engine: Byte Permutation (256-table)]
     |
     v
 [C Engine: XOR Stream Cipher]
     |
     v
 [Container: Header + Sections + Checksum]
     |
     v
 .oro Binary File

at runtime:

.oro Binary File
     |
     v
 [Shield: Anti-Debug + Integrity Check]
     |
     v
 [VM: Load Container → Verify Checksum]
     |
     v
 [C Engine: Reverse Pipeline (deep internal)]
     |
     v
 [Direct Execution → Memory Wipe]
     |
     v
 Output

the reverse pipeline operates through the C kernel — it never exposes the original code, bytecode, or any readable representation. even if someone captures the binary, the dynamic entropy ensures every compilation is unique and the internal structures are non-deterministic.


architecture

orendos/
├── src/core/           # C kernel
│   ├── engine.c/h      # container format, serialization
│   ├── algorithms.c/h  # feistel, permutation, scatter, xor
│   ├── vm.c/h          # virtual machine, execution pipeline
│   ├── shield.c/h      # anti-debug, integrity, memory wipe
│   ├── entropy.c/h     # xoshiro256** PRNG, key derivation
│   └── orendos_core.c  # Python C extension bridge
├── orendos/            # Python package
│   ├── compiler.py     # source → .oro compilation
│   ├── runtime.py      # .oro → execution
│   ├── cli.py          # command-line interface
│   └── _compat.py      # platform compatibility
├── scripts/
│   ├── convert.py      # interactive converter
│   └── run.py          # runner script
├── examples/           # example Python files
└── tests/              # test suite

security model

attack defense
decompilation no standard bytecode — custom binary format
disassembly no opcodes — layered algorithmic transformation
memory dump secure memory wiping after execution
debugger attach ptrace/IsDebuggerPresent detection
binary analysis dynamic entropy — each build is unique
timing analysis timing-based anomaly detection
file tampering SHA-256 checksum + section signatures
copyright removal embedded guard markers with integrity check

examples

basic

# source: hello.py
print("hello world")

# compile
from orendos.compiler import compile_file
compile_file("hello.py")

# result: hello_protected.py
import orendos as mero
"hello.oro"
o0o-run

advanced

# any Python code works — classes, imports, frameworks
import json

class API:
    def __init__(self):
        self.data = {"status": "protected"}

    def respond(self):
        return json.dumps(self.data)

api = API()
print(api.respond())

compile it:

orendos compile api.py
orendos run api_protected.py
# output: {"status": "protected"}

platform support

platform status
Linux (x86_64, arm64) supported
Windows (x86_64) supported
macOS (x86_64, arm64) supported
Android (termux) supported

dev

# build from source
pip install -e .

# run tests
python -m pytest tests/

# test compilation
python scripts/convert.py

orendos v1.0.0
dev by mero  |  tg @QP4RM  |  github.com/6x-u

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

orendos-1.0.1.tar.gz (24.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

orendos-1.0.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (50.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

orendos-1.0.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl (50.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ i686manylinux: glibc 2.5+ i686

orendos-1.0.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (55.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

orendos-1.0.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl (50.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ i686manylinux: glibc 2.5+ i686

orendos-1.0.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (50.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

orendos-1.0.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl (50.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ i686manylinux: glibc 2.5+ i686

orendos-1.0.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (50.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

orendos-1.0.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl (50.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ i686manylinux: glibc 2.5+ i686

orendos-1.0.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (50.1 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

orendos-1.0.1-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl (49.9 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ i686manylinux: glibc 2.5+ i686

orendos-1.0.1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (50.7 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

orendos-1.0.1-cp38-cp38-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl (50.4 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.28+ i686manylinux: glibc 2.5+ i686

File details

Details for the file orendos-1.0.1.tar.gz.

File metadata

  • Download URL: orendos-1.0.1.tar.gz
  • Upload date:
  • Size: 24.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.8

File hashes

Hashes for orendos-1.0.1.tar.gz
Algorithm Hash digest
SHA256 a38b6a7bdaec259393a3cac327e5b8593a4d120020c66d7cb84424f23b209b05
MD5 6d9b90c63d9a8d0446e50a28e116ef29
BLAKE2b-256 1606ef741dfe1d806d752d1657a0a0ec784461b69523dca6429cc159285d3c31

See more details on using hashes here.

File details

Details for the file orendos-1.0.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for orendos-1.0.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bc3d6f5a77e14faa62fa338419803790cfc4f595c3f5958f8b960c322bb6a93b
MD5 f2745fae9191cfb7514acb10f49f554a
BLAKE2b-256 0427f3f092194504783a2cbae04bd0f12296e1b030c2e845fc4081944f2a77e6

See more details on using hashes here.

File details

Details for the file orendos-1.0.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl.

File metadata

File hashes

Hashes for orendos-1.0.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl
Algorithm Hash digest
SHA256 27a975114362497ff11973a698a07bbf1a569c007ba8f970a2ed13d26616c954
MD5 4fa9f5f1b5c4efd02a37dd77afdbef09
BLAKE2b-256 87be1a6d6ff02590ceaef4bcf85336b450a5c06bda936ab08b0a02c82415dd42

See more details on using hashes here.

File details

Details for the file orendos-1.0.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for orendos-1.0.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b729db403d8dac2ae62ddff4d1dcad8648ded92971d50983085f3b67a8036e2e
MD5 ea1cde115b2a19f97a0097fa3ca2e8ec
BLAKE2b-256 16c242f529a53bbd470f84beff00aee68b6e9b7e4dff5dcb46d69aac12e72dcf

See more details on using hashes here.

File details

Details for the file orendos-1.0.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl.

File metadata

File hashes

Hashes for orendos-1.0.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl
Algorithm Hash digest
SHA256 d73bf04d13746bd52e97187cb9d07205c0375a292950614ba5a690135b4d1b11
MD5 4f4ef2bd4e1a544705ae5dd02a3da731
BLAKE2b-256 02754938963bb809660f12855ed4e6931dc90e064d1b56393240dfa5fa1a39fd

See more details on using hashes here.

File details

Details for the file orendos-1.0.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for orendos-1.0.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9cb1a4e8fc52ef61806528f418a305330da725d1d0bd5f5767315d5d61616dca
MD5 41138f1b1153058cf6f642ec275366a5
BLAKE2b-256 c6a5b6e213602d3b177bdd65586b8154d2f308cc7e0b85443b175e4a4ed411e5

See more details on using hashes here.

File details

Details for the file orendos-1.0.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl.

File metadata

File hashes

Hashes for orendos-1.0.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl
Algorithm Hash digest
SHA256 3ef1aae3567829373d563f5221d69f638d2c45a0e27a7048ba1daf5a84f593a5
MD5 349f60802352d7b87728e16fbc8c2b91
BLAKE2b-256 94dcfc34cc212d9c833dd17e65dc1b85664c0548b8a1db7b1338886f8843d0a5

See more details on using hashes here.

File details

Details for the file orendos-1.0.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for orendos-1.0.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b71791f0cf6bb700da0b976438d2a60805150860883342bdfa3cd9d7e29fc29b
MD5 98d65edaf26975583f313b59532bc459
BLAKE2b-256 8014d1112d225075ac81565d01ac9b53d30a20e1e7035ec5cd1c07ec3fd6e14b

See more details on using hashes here.

File details

Details for the file orendos-1.0.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl.

File metadata

File hashes

Hashes for orendos-1.0.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl
Algorithm Hash digest
SHA256 e4adbddf902a4f2ec7c84014a92565148b415dff18774507b8ec09d88427271d
MD5 6d636e280a243315ef1637dc79cc6a60
BLAKE2b-256 99f5e6fc31e63458fe10c96a1a7548102a83fc97a5d05586cf22e54d954fa7e9

See more details on using hashes here.

File details

Details for the file orendos-1.0.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for orendos-1.0.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a50a8e024b695b5c29352fffa331bd76efb65d479df315365192ae2b701df241
MD5 e3dcae97c48d92dcaa4f34213c57c27a
BLAKE2b-256 150af9c02511bd1a64a5a7d6f8a7866e06121f2afedb0c7e2127b2e4aa4af450

See more details on using hashes here.

File details

Details for the file orendos-1.0.1-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl.

File metadata

File hashes

Hashes for orendos-1.0.1-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl
Algorithm Hash digest
SHA256 97557685adcae8e94701b7f0ed8937eaf8927eb1870a0ffd002b1e296aad1c87
MD5 2e39bb3fa0287ccf53a59219418cdc86
BLAKE2b-256 683f0ca3a3de8da30858deaf7b5bcec8a5eca3c42459f8e0361a94cc369d52a0

See more details on using hashes here.

File details

Details for the file orendos-1.0.1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for orendos-1.0.1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 473cd7d819e6540f37f82ee93d7ee733466e535de9a961ec3eba395bf132e6eb
MD5 6b4fbff456b57128c3eacf27c38a8711
BLAKE2b-256 997850340d6d0b7dbc8bdafe35551010d9362e5968ad1b98c17e6456f6d1b262

See more details on using hashes here.

File details

Details for the file orendos-1.0.1-cp38-cp38-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl.

File metadata

File hashes

Hashes for orendos-1.0.1-cp38-cp38-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl
Algorithm Hash digest
SHA256 26a952d4dcb4b35cb29375e15d2743a8d1a0c77aefae567b40b21aea3ae5e931
MD5 bb2c49da66225d444a4548cb39e34b32
BLAKE2b-256 ded2125304590f40cc46af24578f391126b41953aa52cdbdfe01eb41eaeb7371

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page