kopia lustrzana https://github.com/fagci/qs-uvk5-firmware-modder
feat: fw library ++
rodzic
9232a29a1f
commit
04fa5f08a2
18
fw.py
18
fw.py
|
@ -2,11 +2,16 @@
|
||||||
|
|
||||||
from uvk5 import UVK5, argv, eprint, Firmware
|
from uvk5 import UVK5, argv, eprint, Firmware
|
||||||
|
|
||||||
def main(path):
|
def main(cmd):
|
||||||
fw = Firmware.load(path)
|
|
||||||
argc = len(argv)
|
argc = len(argv)
|
||||||
|
fw = Firmware.load(argv[2])
|
||||||
|
|
||||||
eprint('Version:', fw.version)
|
eprint('Version:', fw.version)
|
||||||
if argc >= 4 and argv[2] == 'mod':
|
|
||||||
|
if argc < 3:
|
||||||
|
return
|
||||||
|
|
||||||
|
if cmd == 'mod':
|
||||||
eprint('mods:', argv[3])
|
eprint('mods:', argv[3])
|
||||||
fw.apply_mods(argv[3].split(','))
|
fw.apply_mods(argv[3].split(','))
|
||||||
fw.write()
|
fw.write()
|
||||||
|
@ -14,6 +19,13 @@ def main(path):
|
||||||
with UVK5(argv[4]) as uvk5:
|
with UVK5(argv[4]) as uvk5:
|
||||||
uvk5.get_version()
|
uvk5.get_version()
|
||||||
uvk5.send_firmware(fw)
|
uvk5.send_firmware(fw)
|
||||||
|
return
|
||||||
|
|
||||||
|
if cmd == 'cmp':
|
||||||
|
fw2 = Firmware.load(argv[3])
|
||||||
|
fw.compare(fw2)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main(argv[1])
|
main(argv[1])
|
||||||
|
|
24
uvk5.py
24
uvk5.py
|
@ -104,6 +104,30 @@ class Firmware(bytearray):
|
||||||
self.version = version
|
self.version = version
|
||||||
|
|
||||||
|
|
||||||
|
def compare(self, fw):
|
||||||
|
a = None
|
||||||
|
la = len(self)
|
||||||
|
lb = len(fw)
|
||||||
|
changes = {}
|
||||||
|
for i in range(min(la, lb)):
|
||||||
|
differ = self[i] != fw[i]
|
||||||
|
if not differ:
|
||||||
|
a = None
|
||||||
|
continue
|
||||||
|
|
||||||
|
if not a:
|
||||||
|
a = '0x%x' % i
|
||||||
|
changes[a] = [bytearray(), bytearray()]
|
||||||
|
|
||||||
|
changes[a][0].append(self[i])
|
||||||
|
changes[a][1].append(fw[i])
|
||||||
|
|
||||||
|
|
||||||
|
for addr, ch in changes.items():
|
||||||
|
print(addr, ch[0].hex(), ch[1].hex())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def patch_single(self, addr, new_value, size=4):
|
def patch_single(self, addr, new_value, size=4):
|
||||||
old_bytes = self[addr:addr+size]
|
old_bytes = self[addr:addr+size]
|
||||||
old_value = int.from_bytes(old_bytes, 'little')
|
old_value = int.from_bytes(old_bytes, 'little')
|
||||||
|
|
Ładowanie…
Reference in New Issue