Python открыть exe в HEX формате, отредактировать и сохранить под новым именем

Хочу открыть в python файл(exe) в таком же формате как в HEX редакторе допустим вот: Пример HEX редактор

Отредактировать нужную мне последовательность байт и сохранить под новым именем. Это мне нужно чтобы пропатчить программу. Как это сделать?

import binascii
filename = 'stub.exe'
with open(filename, 'rb') as f:
    content = f.read()
print(binascii.hexlify(content))

Почему в HEX редакторе файл начинается с 4D 5A, а когда я открываю его в python таким кодом, он начинается у меня с 6?

Как получить такой же тeкст как в HEX редакторе?


Ответы (1 шт):

Автор решения: Виктор

Реализуем следующим образом

filename = '111.exe'
with open(filename, 'rb') as fin:
    sourcedata = fin.read()

hex_string = ' '.join(format(x, '02X') for x in sourcedata)
print(hex_string) # Получили строку 4D 5A ...

# Тут меняем нужные байты в НЕХ формате ....

byte_arr = bytearray.fromhex(hex_string) # Тут строку 4D 5A ... -> bytearray
with open ('222.exe', 'wb') as f:
    f.write(byte_arr)

Вывод: 4D 5A 90 00 03 00 ...

Проверка:

C:\Projects\QT\taskStrings>fc /b 111.exe 222.exe
Сравнение файлов 111.exe и 222.EXE
FC: различия не найдены

С использованием binascii:

import binascii
filename = '111.exe'
with open(filename, 'rb') as fin:
    sourcedata = fin.read()
hex_string = binascii.hexlify(sourcedata, ' ').decode("utf-8").upper()
print(hex_string)

byte_arr = binascii.unhexlify(hex_string.replace(" ", ""))
with open ('222.exe', 'wb') as f:
    f.write(byte_arr)

Вывод: 4D 5A 90 00 03 00 ...

→ Ссылка