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

50 строки
1.6 KiB
Python

data = open(r"C:/Users/vikto/Documents/Claude/rt-4d/radio-spi-dump.bin","rb").read()
# BLOB1 decode as GB2312
seg=data[0x198000:0x19b800]
try:
txt=seg.decode('gb2312', errors='replace')
print("BLOB1 as GB2312 (first 120 chars):")
print(repr(txt[:120]))
print("...middle:", repr(txt[3000:3060]))
except Exception as e:
print("err",e)
# Count of hanzi in BLOB1 (each 2 bytes)
n1 = len(seg)//2
print("BLOB1 char count:", n1)
# BLOB3: sorted UTF-16BE codepoints. Count them (until 00 00 fill)
seg3=data[0x3f0000:0x400000]
cps=[]
for i in range(0,len(seg3)-1,2):
v=(seg3[i]<<8)|seg3[i+1]
if v==0:
# zeros are padding within blocks; keep scanning but record
cps.append(0)
else:
cps.append(v)
nonzero=[v for v in cps if v!=0]
print("BLOB3 total 2-byte slots:",len(cps),"nonzero:",len(nonzero))
print("BLOB3 first cps:", [hex(v) for v in nonzero[:16]])
print("BLOB3 last cps:", [hex(v) for v in nonzero[-16:]])
print("BLOB3 min/max:", hex(min(nonzero)), hex(max(nonzero)))
# is it strictly ascending overall? check monotonic ignoring zeros
asc=all(nonzero[i]<=nonzero[i+1] for i in range(len(nonzero)-1))
print("BLOB3 nonzero ascending?", asc)
# decode a few as unicode chars
print("BLOB3 sample chars:", ''.join(chr(v) for v in nonzero[:20]))
# BLOB2 audio - measure total extent: from 0x352000 until sustained FF
i=0x352000
run=0; endaud=None
while i<0x3e0000:
if data[i]==0xff:
run+=1
if run>=2048:
endaud=i-run+1; break
else:
run=0
i+=1
print("BLOB2 audio ends ~", hex(endaud) if endaud else "not found within 0x3e0000")