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.