CCCPaste

Reverse Engineer Firmware

#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)