From aaea75bb087895247ee0b28bf5a9aa058271430a Mon Sep 17 00:00:00 2001 From: Markus Birth Date: Wed, 16 Oct 2019 01:48:03 +0200 Subject: [PATCH] Started parsing for hwid / version. --- grmn/devices.py | 1 + grmn/rgn.py | 13 +++++++ grmn/rgnbin.py | 91 ++++++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 101 insertions(+), 4 deletions(-) diff --git a/grmn/devices.py b/grmn/devices.py index 39316fa..1c0faea 100644 --- a/grmn/devices.py +++ b/grmn/devices.py @@ -180,6 +180,7 @@ DEVICES = { 954: "Chartplotters Minimum Software for g2 charts (954)", 955: "Chartplotters Minimum Software for g2 charts (955)", 956: "Honda Navi Gen3", + 957: "eTrex Legend H/Vista H", 960: "Dakota", 969: "Firmware Update for FMI Cables with Traffic", 970: "Mount Software", diff --git a/grmn/rgn.py b/grmn/rgn.py index 8a601ba..42b91b8 100644 --- a/grmn/rgn.py +++ b/grmn/rgn.py @@ -19,9 +19,14 @@ REGION_TYPES = { 0x000c: "boot.bin", 0x000e: "fw_all.bin", 0x0010: "logo.bin", + 0x0029: "NonVol (old)", 0x004e: "ZIP file", 0x0055: "fw_all2.bin", + 0x009a: "NonVol (new)", 0x00f5: "GCD firmware update file", + 0x00f9: "Display firmware", + 0x00fa: "ANT firmware", + 0x00fb: "WiFi firmware", 0x00ff: "pk_text.zip", } @@ -52,6 +57,7 @@ class Rgn: (length, type_id) = unpack(" hwid > swver > entry OR hwid > swver > end > entry) + (x1, x2, x3, entry_addr) = unpack(" hwid > swver > lend > entry) + (end_addr, hwid_addr, swver_addr, lend_addr, entry_addr) = unpack(" hwid > swver) + (end_addr, hwid_addr, swver_addr) = unpack(" hwid > swver > ???) + + if jmp == 0xea000004: + print(RED + "checking for 5" + RESET) + # Variant 5 + + if hwid_addr: + if hwid_addr < 0 or hwid_addr > len(self.payload)-2: + print(RED + "HWID OFFSET {:04x} OUT OF BOUNDS {:04x}".format(hwid_addr, len(self.payload)) + RESET) + else: + self.hwid = unpack(" len(self.payload)-2: + print(RED + "SWVER OFFSET {:04x} OUT OF BOUNDS {:04x}".format(swver_addr, len(self.payload)) + RESET) + else: + self.version = unpack("