#MIPS Camera Device Reverse Engineer Firmwar
#Video https://www.youtube.com/watch?v=hV8W4o-Mu2o
#!/usr/bin/env python3
import sys
class FirmwarePart:
def __init__(self, name, offset, size):
self.name = name
self.offset = offset
self.size = size
firmware_parts = [
FirmwarePart("uimage_header", 0x0, 0x40),
FirmwarePart("uimage_kernel", 0x40, 0x200000),
FirmwarePart("squashfs_1", 0x200040, 0x350000),
FirmwarePart("squashfs_2", 0x550040, 0xa0000),
FirmwarePart("jffs2", 0x5f0040, 11075648-0x5f0040)
]
if sys.argv[1] == "unpack":
f = open(sys.argv[2], "rb")
for part in firmware_parts:
outfile = open(part.name, "wb")
f.seek(part.offset, 0)
data = f.read(part.size)
outfile.write(data)
outfile.close()
print(f"Wrote {part.name} - {hex(len(data))} bytes")
elif sys.argv[1] == "pack":
f = open(sys.argv[2], "wb")
for part in firmware_parts[1:]:
i = open(part.name, "rb")
data = i.read()
f.write(data)
padding = (part.size - len(data))
print(f"Wrote {part.name} - {hex(len(data))} bytes")
print(f"Padding: {hex(padding)}")
f.write(b'\x00' * padding)