import sys # Encrypt bytes until this file offset maxOffset = 20580 # Number of bytes to be skipped # It will encrypt bytes at position: 0, 2049, 4098, 6147 and so on inc = 2048 inFname = sys.argv[1] dataEnc = open(inFname, "rb").read() # Encrypt: NOT, XOR 0x31, NOT, XOR 0x6A # Decrypt: XOR 0x6A, NOT, XOR 0x31, NOT # In Python ~ operator works with signed integers. # Need to implement the binary NOT operator def bit_not(n, numbits=8): return (1 << numbits) - 1 - n def decrypt(c): return bit_not(bit_not(ord(c) ^ 0x6A) ^ 0x31) dataDec = [ decrypt(dataEnc[idx]) if ((idx % inc == idx / inc) and (idx < maxOffset)) else ord(dataEnc[idx]) for idx in range(len(dataEnc)) ] with open(inFname + ".dec", "wb") as fOut: fOut.write("".join([chr(c) for c in dataDec]))