Documentation for obfuscator

Contents:

Introduction

Obfuscator is a Python package used to obfuscate a set of data (e.g. bytes). It provides no encryption! It’s strictly a “security through obscurity” tool, with limited usefulness. You have been warned!

The project is hosted on GitHub at https://github.com/mtik00/obfuscator

Install

Download the latest release tarball and install with pip install <package>.

Usage

See the unit tests for more in-depth examples. Here are the basics:

import obfuscator
original_bytes = map(ord, "testing")
_key, obfuscated_bytes = obfuscator.obfuscate_xor(original_bytes, key=0x66)
deobfuscated_bytes = obfuscator.deobfuscate_xor(key=0x66, data=obfuscated_bytes)
assert original_bytes == deobfuscated_bytes

Auto Generated API Documentation

Contents:

obfuscator.file

This module contains a file-level interface for the XOR obfuscation methods.

class obfuscator.file.ObfuscatedFile(filename)
Parameters:filename (str) – The path of the file you want to read/write.

This class represents an obfuscated data file. You can use this to store some-what sensitive information inside a file. The documentation for some of the functions is purposely light.

Example #1 - Storing a string:

>>> from obfuscator.file import ObfuscatedFile
>>> of = ObfuscatedFile('data.bin')
>>> bytes = map(ord, "my string")
>>> of.write(bytes)  # data.bin is 32 bytes long
86  # The random key used for encoding; stored in the file
>>> read_bytes = of.read()
>>> read_bytes
[109L, 121L, 32L, 115L, 116L, 114L, 105L, 110L, 103L]
>>> ''.join(map(chr, read_bytes))
'my string'

Example #2 - Storing a string with known key:

>>> from obfuscator.file import ObfuscatedFile
>>> of = ObfuscatedFile('data.bin')
>>> bytes = map(ord, "my string")
>>> my_key = 0xCF
>>> of.write(bytes, my_key)  # data.bin is 32 bytes long
207
>>> read_bytes = of.read()  # Notice how we didn't use a key
>>> ''.join(map(chr, read_bytes))
',8a253(/&'
>>> # The string is wrong because the key is not stored in the file
>>> read_bytes = of.read(key=my_key)
>>> ''.join(map(chr, read_bytes))
'my string'
>>>
read(key=None)

This function reads a file written by write, and returns the deobfuscated data.

Parameters:key (int) – The key used during write(). NOTE: If you passed in a key during write(), you must use the same key here; the key will not be stored in the file. If you let the algorithm choose the key, it is stored in the file, and will be used during read().
write(data, key=None, minimum_length=32)

Write the data to a file.

Parameters:
  • data (iterable) – The data you want to encode; the length of data must be less than 0xFF (header size limitation)
  • key (int) – The key used during encoding
  • minimum_length (int) – The minimum number of bytes to write. If the encoding operation produces fewer bytes that this, random bytes are appended to the end of the result so len(bytes) == minimum_length.

obfuscator

This module contains a simple mechanism for obfuscating a set of data. Consider this “security through obscurity”. This module contains no encryption mechanisms!

Example:

>>> from obfuscator import obfuscate_xor, deobfuscate_xor
>>> data = [1, 2, 3, 4]
>>> key, odata = obfuscate_xor(data)
>>> key, odata
(162, [163, 160, 161, 166, 166, 154, 181, 60, 131, 24, 88, 35, 137, 240, 216, 161, 247, 218, 19, 116, 54, 21, 217, 190, 137, 81, 68, 200, 35, 210, 133, 139])
>>> assert data == deobfuscate_xor(key, odata)[:len(data)]
>>>
>>> key, odata = obfuscate_xor(data, minimum_length=0)
>>> assert data == deobfuscate_xor(key, odata)
>>>
obfuscator.deobfuscate(key, data, encoder=1)

This function obfuscates the data using the default operation.

obfuscator.deobfuscate_offset(key, data)

This function deobfuscates the data using an offset operation.

The formula used is: [x - key for x in data]

Parameters:
  • key (int) – The key used for the offset operation.
  • data (iterable) – The data you want to obfuscate
obfuscator.deobfuscate_rot13(key, data)

This function performs a ROT13 decode of the data. data needs to be an iterable that contains a representation of str types. This can be either a string of type str, or a list of bytes from something like ord.

Parameters:
  • key (int) – This value is ignored; it only exists to conform to the other methods.
  • data (iterable) – The data you want to deobfuscate
obfuscator.deobfuscate_xor(key, data)

This function deobfuscates the data using an byte-wise XOR operation.

The formula used is: [x ^ key for x in data]

Parameters:
  • key (int) – The key used for the XOR operation.
  • data (iterable) – The data you want to obfuscate
obfuscator.obfuscate(data, key=None, minimum_length=32, encoder=1)

This function obfuscates the data using the default operation.

obfuscator.obfuscate_offset(data, key=None, minimum_length=32)

This function obfuscates the data using an offset operation.

The formula used is: [x + key for x in data]

Parameters:
  • data (iterable) – The data you want to obfuscate
  • key (int) – The value used for the offset operation. By default, the value will be a random integer between 40 and 127.
  • minimum_length (int) – The minimum number of bytes to return. If the encoding operation produces fewer bytes that this, random bytes are appended to the end of the result so len(bytes) == minimum_length.
obfuscator.obfuscate_rot13(data, key=None, minimum_length=32)

This function performs a ROT13 encode on the data. data needs to be an iterable that contains a representation of str types. This can be either a string of type str, or a list of bytes from something like ord.

Parameters:
  • data (iterable) – The data you want to obfuscate
  • key (int) – This value is ignored; it only exists to conform to the other methods.
  • minimum_length (int) – The minimum number of bytes to return. If the encoding operation produces fewer bytes that this, random bytes are appended to the end of the result so len(bytes) == minimum_length.
obfuscator.obfuscate_xor(data, key=None, minimum_length=32)

This function obfuscates the data using an byte-wise XOR operation.

The formula used is: [x ^ key for x in data]

Parameters:
  • data (iterable) – The data you want to obfuscate
  • key (int) – The key used for the XOR operation. By default, the key will be a random integer between 1 and 255.
  • minimum_length (int) – The minimum number of bytes to return. If the encoding operation produces fewer bytes that this, random bytes are appended to the end of the result so len(bytes) == minimum_length.
obfuscator.rot13(data, minimum_length=32)

This function performs a ROT13 encode/decode on the data. data needs to be an iterable that contains a representation of str types. This can be either a string of type str, or a list of bytes from something like ord.

Parameters:
  • data (iterable) – The data you want to obfuscate
  • minimum_length (int) – The minimum number of bytes to return. If the encoding operation produces fewer bytes that this, random bytes are appended to the end of the result so len(bytes) == minimum_length.

Indices and tables