Created
December 30, 2020 16:03
-
-
Save ius/26071d04b7f3dd1863f557ca22772390 to your computer and use it in GitHub Desktop.
kd20_uboot.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python2 | |
import sys | |
import struct | |
from binascii import crc32 | |
def unwrap(data): | |
b = 0 | |
out = '' | |
for i in range(len(data)): | |
shift = (i % 8) | |
if data[i] not in ('\x55', '\xaa'): | |
break | |
bit = data[i] == '\x55' | |
b |= (bit << shift) | |
if shift == 7: | |
out += chr(b) | |
b = 0 | |
return out | |
def wrap(data): | |
out = '' | |
for b in data: | |
for i in range(8): | |
if (ord(b) >> i) & 1: | |
out += '\x55' | |
else: | |
out += '\xaa' | |
return out | |
def recrc(data): | |
size, crc = struct.unpack('II', data[:8]) | |
data = data[8:] | |
calc_crc = crc32(data) & 0xffffffff | |
assert len(data) == size, 'invalid length' | |
#assert calc_crc == crc, 'bad crc' | |
hdr = struct.pack('II', size, calc_crc) | |
return hdr + data | |
def fix(data): | |
data = data.replace('loadr=nand read.e 0x62000000 240000 280000', 'loadr=nand read.e 0x62000000 240000 600000') | |
data = data.replace('load=nand read.e 0x60500000 840000 300000', 'load=nand read.e 0x60500000 840000 7c0000') | |
return data | |
fp = open(sys.argv[1]) | |
data = fp.read() | |
rdata = None | |
orig_len = len(data) | |
data = unwrap(data) | |
data = fix(data) | |
data = recrc(data) | |
data = wrap(data) | |
open('uboot_patched.bin','wb').write(data) | |
data = data.ljust(orig_len, '\xff') | |
open('uboot_patched_padded.bin','wb').write(data) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment