Files
viktorиClaude Opus 4.8 ae36c3b729 RT-4D: реверс прошивки, русификация, кастомный UI, флешеры
- Полный 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>
2026-07-08 15:47:22 +09:00

38 строки
1.1 KiB
Python

data = open(r"C:/Users/vikto/Documents/Claude/rt-4d/radio-spi-dump.bin","rb").read()
def region_stats(start, end, label):
seg = data[start:end]
from collections import Counter
c = Counter(seg)
ff = c.get(0xff,0); zero=c.get(0x00,0); e80=c.get(0x80,0)
print(f"{label} {start:#08x}-{end:#08x} len={len(seg):#x} ff={ff} zero={zero} 0x80={e80} distinct={len(c)}")
# Find real extents of DATA (non-FF) around each blob by scanning 0xFF runs
def find_ff_boundaries(approx_start, search_end):
# scan forward to find where FF-run of >=256 begins (end of data)
i = approx_start
run = 0
end = search_end
while i < search_end:
if data[i]==0xff:
run+=1
if run>=1024:
end = i-run+1
break
else:
run=0
i+=1
return end
print("=== 0x198000 blob ===")
region_stats(0x198000, 0x242000, "raw")
# check where FF starts
e = find_ff_boundaries(0x198000, 0x260000)
print("first long FF run start ~", hex(e))
print("=== 0x352000 blob ===")
region_stats(0x352000, 0x3DD000, "raw")
print("=== 0x3F0000 blob ===")
region_stats(0x3F0000, 0x400000, "raw")