├── README.md ├── logo_dumper.py └── LICENSE /README.md: -------------------------------------------------------------------------------- 1 | # logo_dumper 2 | Dump Xiaomi any logo.img file and extract bitmap pictures and repack 3 | looks like it only work on k30 5g 4 | # usage 5 | ``` sh 6 | # Unpack xiaomi logo 7 | python logo_dumper.py logo.img unpack 8 | 9 | # Repack xiaomi logo 10 | python logo_dumper.py logo.img repack 11 | 12 | ``` 13 | -------------------------------------------------------------------------------- /logo_dumper.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # Python script by affggh 3 | 4 | import os 5 | import struct 6 | 7 | class DUMPCFG: 8 | def __init__(self): 9 | self.blksz = 0x1<<0xc 10 | self.headoff = 0x4000 11 | self.magic = b"LOGO!!!!" 12 | self.imgnum = 0 13 | self.imgblkoffs = [] 14 | self.imgblkszs = [] 15 | 16 | class BMPHEAD(object): 17 | def __init__(self, buf:bytes=None): # Read bytes buf and use this struct to parse 18 | if buf == None: 19 | raise SyntaxError("buf Should be bytes not %s" %type(buf)) 20 | # print(buf) 21 | self.structstr = ">0xc) + 1 94 | self.cfg.imgblkoffs[i] = off 95 | 96 | o.seek(off<<0xc) 97 | o.write(b.read(bhead.fsize)) 98 | 99 | off += self.cfg.imgblkszs[i] 100 | # self.cfg.imgblkoffs[0] = 0x5 # override 101 | o.seek(self.cfg.headoff) 102 | o.write(self.magic) 103 | #print(self.cfg.imgblkoffs) 104 | #print(self.cfg.imgblkszs) 105 | for i in range(self.cfg.imgnum): 106 | o.write(struct.pack("