initial
This commit is contained in:
parent
d3c18fd3e2
commit
974d62343b
|
@ -0,0 +1,112 @@
|
||||||
|
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
""" Author: Hendrik Schutter, mail@hendrikschutter.com
|
||||||
|
Date of creation: 2021/10/16
|
||||||
|
Date of last modification: 2021/10/16
|
||||||
|
|
||||||
|
"""
|
||||||
|
import hashlib
|
||||||
|
|
||||||
|
old_entry_secure_boot_str = "AA553F0003000000000000000000000000000000000000000000000000000000000000002200000001000000C70BA3F008AF564599C4001009C93A4453006500630075007200650042006F006F00740045006E00610062006C006500000001"
|
||||||
|
new_entry_secure_boot_str = "AA55000003000000000000000000000000000000000000000000000000000000000000002200000001000000C70BA3F008AF564599C4001009C93A4453006500630075007200650042006F006F00740045006E00610062006C006500000001"
|
||||||
|
|
||||||
|
old_eeprom_dump = "with_SecBoot.bin"
|
||||||
|
new_eeprom_dump = "with_SecBoot_modified.bin"
|
||||||
|
|
||||||
|
#old_eeprom_dump = "test.bin"
|
||||||
|
#new_eeprom_dump = "test_modified.bin"
|
||||||
|
|
||||||
|
old_entry_secure_boot_bytes = [old_entry_secure_boot_str.lower()[i:i+2] for i in range(0, len(old_entry_secure_boot_str.lower()), 2)]
|
||||||
|
new_entry_secure_boot_bytes = [new_entry_secure_boot_str.lower()[i:i+2] for i in range(0, len(new_entry_secure_boot_str.lower()), 2)]
|
||||||
|
|
||||||
|
def show_file_stats():
|
||||||
|
print(" === old eeprom dump ===")
|
||||||
|
tmp_file = open(old_eeprom_dump, 'rb')
|
||||||
|
hash = str(hashlib.sha256(tmp_file.read()).hexdigest())
|
||||||
|
tmp_file.seek(0,2)
|
||||||
|
print("Size: " + str(tmp_file.tell()))
|
||||||
|
print("Hash: " + hash)
|
||||||
|
tmp_file.close()
|
||||||
|
|
||||||
|
try:
|
||||||
|
tmp_file = open(new_eeprom_dump, 'rb')
|
||||||
|
hash = str(hashlib.sha256(tmp_file.read()).hexdigest())
|
||||||
|
print("\n ===new eeprom dump === ")
|
||||||
|
tmp_file.seek(0,2)
|
||||||
|
print("Size: " + str(tmp_file.tell()))
|
||||||
|
print("Hash: " + hash)
|
||||||
|
except IOError:
|
||||||
|
pass
|
||||||
|
finally:
|
||||||
|
tmp_file.close()
|
||||||
|
|
||||||
|
def get_pattern_offset(data):
|
||||||
|
pattern_start_index = -1
|
||||||
|
byte_index = 0
|
||||||
|
for byte in data:
|
||||||
|
if(byte.hex() == old_entry_secure_boot_bytes[0]):
|
||||||
|
if pattern_start_index == -1:
|
||||||
|
pattern_start_index = byte_index
|
||||||
|
for x in range(pattern_start_index, pattern_start_index+len(old_entry_secure_boot_bytes)):
|
||||||
|
if(data[x].hex() != old_entry_secure_boot_bytes[(x-pattern_start_index)]):
|
||||||
|
pattern_start_index = -1
|
||||||
|
break
|
||||||
|
byte_index += 1
|
||||||
|
return pattern_start_index
|
||||||
|
|
||||||
|
|
||||||
|
def replace_data(data, replacement, offset):
|
||||||
|
for x in range(offset, offset+len(replacement)):
|
||||||
|
data[x] = bytes.fromhex(replacement[x-offset])
|
||||||
|
|
||||||
|
def edit_data(data, new_eeprom_dump_file):
|
||||||
|
offset = get_pattern_offset(data)
|
||||||
|
|
||||||
|
if offset != -1:
|
||||||
|
print("Pattern offset: " + str(offset))
|
||||||
|
|
||||||
|
replace_data(data, new_entry_secure_boot_bytes, offset)
|
||||||
|
|
||||||
|
for byte in data:
|
||||||
|
#print(byte.hex())
|
||||||
|
new_eeprom_dump_file.write(byte)
|
||||||
|
new_eeprom_dump_file.flush()
|
||||||
|
else:
|
||||||
|
print("unable to find pattern")
|
||||||
|
|
||||||
|
def main():
|
||||||
|
print("start ...\n")
|
||||||
|
|
||||||
|
if(len(old_entry_secure_boot_str) != len(new_entry_secure_boot_str)):
|
||||||
|
print("entries are not the same sizes")
|
||||||
|
return
|
||||||
|
|
||||||
|
old_eeprom_dump_file = open(old_eeprom_dump, "rb")
|
||||||
|
new_eeprom_dump_file = open(new_eeprom_dump, "wb")
|
||||||
|
|
||||||
|
old_eeprom_dump_data = []
|
||||||
|
|
||||||
|
byte = old_eeprom_dump_file.read(1)
|
||||||
|
while byte:
|
||||||
|
old_eeprom_dump_data.append(byte)
|
||||||
|
byte = old_eeprom_dump_file.read(1)
|
||||||
|
|
||||||
|
edit_data(old_eeprom_dump_data, new_eeprom_dump_file)
|
||||||
|
|
||||||
|
#time.sleep(100)
|
||||||
|
show_file_stats()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue