def readNewVMDK(): ''' read a new VMDK created from text file ''' #read as binary instead of text as destination file has null bytes and to be edited as binary file with open("newVMDKdesc.txt", "rb") as vmdkDescFile: vmdkDescriptor = vmdkDescFile.read() print(len(vmdkDescriptor), "bytes read from the descriptor text file") print(vmdkDescriptor) return vmdkDescriptor def replaceMetaDataDescriptor(newVmdkDescriptor): ''' replace the encrypted VMDK descriptor with new unencrypted descriptor text read from file ''' with open("Metadata.bin", "rb+") as metaDataFile: nullBytesToPad = 0x550 - 0x200 - len(newVmdkDescriptor) nullBytes = b'\x00' * nullBytesToPad metaDataFile.seek(0x200) metaDataFile.write(newVmdkDescriptor) print("VMDK descriptor replaced") metaDataFile.write(nullBytes) print("padded ", nullBytesToPad, "null bytes") def main(): newVmdkDescriptor = readNewVMDK() replaceMetaDataDescriptor(newVmdkDescriptor) if __name__ == "__main__": main()