Module refinery.units.misc.autoxor
Expand source code Browse git
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import re
from refinery.units.blockwise.xor import xor
from refinery.units.misc.xkey import xkey
class autoxor(xkey):
"""
Assumes a XOR-encoded input and automatically attempts to find the correct XOR key. The method
is based on the assumption that the plaintext input contains one letter that occurs with a much
higher frequency than all other letters; this is the case for the null byte in PEs, and also
for the space character in many text files.
"""
def process(self, data: bytearray):
key = super().process(data)
if not key:
self.log_warn('No key was found; returning original data.')
return data
bin, = data | xor(key)
txt, = bin | xor(0x20)
if re.fullmatch(BR'[\s!-~]+', txt) and not txt.isspace():
key = bytes(key | xor(0x20))
bin = txt
return self.labelled(bin, key=key)
Classes
class autoxor (range=slice(1, 32, None))
-
Assumes a XOR-encoded input and automatically attempts to find the correct XOR key. The method is based on the assumption that the plaintext input contains one letter that occurs with a much higher frequency than all other letters; this is the case for the null byte in PEs, and also for the space character in many text files.
Expand source code Browse git
class autoxor(xkey): """ Assumes a XOR-encoded input and automatically attempts to find the correct XOR key. The method is based on the assumption that the plaintext input contains one letter that occurs with a much higher frequency than all other letters; this is the case for the null byte in PEs, and also for the space character in many text files. """ def process(self, data: bytearray): key = super().process(data) if not key: self.log_warn('No key was found; returning original data.') return data bin, = data | xor(key) txt, = bin | xor(0x20) if re.fullmatch(BR'[\s!-~]+', txt) and not txt.isspace(): key = bytes(key | xor(0x20)) bin = txt return self.labelled(bin, key=key)
Ancestors
Class variables
var required_dependencies
var optional_dependencies
Inherited members