- Полный RE стока V3.25 (Cortex-M4F) + FM100B: карта памяти, протокол, codeplug, UI-архитектура - Русификация: свой CP1251-шрифт + патч рендера, перевод меню и надписей, ребренд Ru-4D V3.25 - Блюпринт переделки UI + C-тулчейн (clang thumbv7em), доказан инъекцией - Готовые флешеры: WebSerial .html и Windows .exe со вшитой прошивкой - Дамп SPI рации, стоковая прошивка, инструменты сборки Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
34 строки
1.0 KiB
Python
34 строки
1.0 KiB
Python
data = open(r"C:/Users/vikto/Documents/Claude/rt-4d/radio-spi-dump.bin","rb").read()
|
|
|
|
def runmap(start, end, minrun=256):
|
|
# classify each byte: F=0xff, Z=0x00, E=0x80, D=other; emit runs
|
|
def cls(b):
|
|
if b==0xff: return 'F'
|
|
if b==0x00: return 'Z'
|
|
if b==0x80: return 'E'
|
|
return 'D'
|
|
runs=[]
|
|
i=start
|
|
cur=cls(data[i]); rs=i
|
|
i+=1
|
|
while i<end:
|
|
c=cls(data[i])
|
|
if c!=cur:
|
|
runs.append((cur,rs,i))
|
|
cur=c; rs=i
|
|
i+=1
|
|
runs.append((cur,rs,end))
|
|
# merge: report runs, collapsing tiny D-noise? Just print runs >= minrun OR mark
|
|
out=[]
|
|
for c,s,e in runs:
|
|
out.append((c,s,e,e-s))
|
|
return out
|
|
|
|
for base,end,name in [(0x198000,0x242000,"BLOB1"),(0x352000,0x3dd000,"BLOB2"),(0x3f0000,0x400000,"BLOB3")]:
|
|
print("="*70, name, hex(base),hex(end))
|
|
runs=runmap(base,end)
|
|
# collapse: print segments where a class dominates for >=1KB
|
|
for c,s,e,l in runs:
|
|
if l>=512:
|
|
print(f" {c} {s:#08x}-{e:#08x} len={l:#x}({l})")
|