Zpět na domů

Reverz 9S12HY64: patčování bez disassemblera

Článek popisuje reverz firmware 9S12HY64 bez disassemblera: sniffing I²C, hledání signatur v Ghidra, patčování SREC pro změnu displeje. Dosáhnut fungující výsledek emulace indikátorů. Přístup je použitelný pro podobné úlohy.

Patčování firmware 9S12HY64: od I²C po výsledek
Advertisement 728x90

Patching statických dat v firmware 9S12HY64 bez deasemblingu

Úprava zobrazení indikátorů na displeji automobilové přístrojové desky na základě MC9S12HY64 se provádí analýzou provozu I²C a úpravou SREC souboru firmware. Tento přístup vynechává deasembling kódu a zaměřuje se na hledání signatur v statických datech pomocí Ghidry. Cílem je nahradit znaky A za P a M za D, přičemž se minimalizují artefakty číslic.

Hardwarová analýza a protokol

Mikrokontrolér 9S12HY64 je připojen ke displeji přes 6-vývodový rozhraní bez externího řadiče. Prozkoumání obvodů a referenční manuál potvrzují použití protokolu I²C. Logický analyzátor Saleae zachytává provoz mezi mikrokontrolérem a displejem ve všech režimech výběru převodovky.

Přehledná tabulka provozu odhaluje proměnlivé bajty jako potenciální signatury:

Google AdInline article slot
  • Režim A1: 5A C9 9A 8D...
  • Režim M1: 5A C9 9A 8D... (variace v prvních bajtech)

Červeně označené bajty jsou určeny pro hledání v firmware, předpokládají se jako dvourozměrné pole statických zpráv.

Hledání signatur v firmware

Ghidra se používá pro hexa-hledání bez deasemblingu architektury HCS12. Signatura 0x5A, 0xC9, 0x9A, 0x8D lokalizuje oblast paměti. Formát zpráv: číslo bajtu displeje + data.

Shoda provozu a paměti:

Google AdInline article slot
  • První bajt určuje segment (A/M).
  • Následující bajty představují vzory pro znaky.

Z nové přístrojové desky byly extrahovány zprávy pro P a D:

  • P: úprava jednoho bajtu.
  • D: oprava dvou bajtů.

Srovnání zpráv:

| Režim | Zpráva původní | Zpráva cílová |

Google AdInline article slot

|-------|------------------|--------------|

| A1 | 5A C9 9A 8D... | 5A XX XX 8D... (P) |

| M1 | 5A C9 9A 8D... | 5A YY ZZ 8D... (D) |

Patcherování SREC souboru

Struktura SREC: hlavička, adresa, data, checksum. Úprava bajtů vyžaduje přepočet KS pro jednotlivé řádky.

Python skript pro výpočet KS:

# Příklad skriptu (upraven z GitHubu)
def calc_srec_checksum(line):
    # Součet bajtů s invertací
    s = sum(bytes.fromhex(line[1:-1]))  # Vyloučeno S a KS
    return format((~s + 1) & 0xFF, '02X')

Úpravy:

  • Pro P: úprava 1. bajtu v řádku.
  • Pro D: 1. a 2. bajt ve dvou řádcích.

Přepočet KS, firmware – výsledek: částečná náhrada s artefaktem číslic.

Potlačení artefaktů číslic

Číslice (1–5) jsou tvořeny: 00. bajt + nibble z 12. bajtu (základ 0x80 + hodnota). Hledání signatur číslic v firmware, nulování dat pro '4' (ponecháno 1,2,3).

  • Formát: číslo bajtu – data.
  • Přepočet KS pro změněné řádky.

Konečný firmware poskytuje plnou emulaci P/D bez číslic.

Co je důležité

  • Sniffing provozu I²C umožňuje lokalizovat statická data bez analýzy kódu.
  • Hexa-hledání v Ghidře je efektivní i pro neznámé architektury (HCS12).
  • Patcherování SREC vyžaduje přesný výpočet KS pro platnost.
  • Přístup je škálovatelný na jiné embedded systémy s sériovými protokoly.
  • Metodika minimalizuje rizika, vyhýbá se prováděnímu kódu.

— Editorial Team

Advertisement 728x90

Číst dál