Files
rt-4d/research/probe7.py
T
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

33 строки
1.3 KiB
Python

import io,sys
data = open(r"C:/Users/vikto/Documents/Claude/rt-4d/radio-spi-dump.bin","rb").read()
out=io.open(r"C:/Users/vikto/Documents/Claude/rt-4d/analyze/out7.txt","w",encoding="utf-8")
seg=data[0x198000:0x19b800]
txt=seg.decode('gb2312', errors='replace')
out.write("BLOB1 GB2312 first 200 chars:\n")
out.write(txt[:200]+"\n\n")
out.write("BLOB1 GB2312 chars 3000..3080:\n")
out.write(txt[3000:3080]+"\n\n")
# BLOB3 filter FFFF and 0
seg3=data[0x3f0000:0x400000]
cps=[]
for i in range(0,len(seg3)-1,2):
v=(seg3[i]<<8)|seg3[i+1]
cps.append(v)
real=[v for v in cps if v not in (0,0xffff)]
out.write("BLOB3 real cps count: %d\n"%len(real))
out.write("BLOB3 first 40 chars: "+''.join(chr(v) for v in real[:40])+"\n")
out.write("BLOB3 range: %04x..%04x\n"%(min(real),max(real)))
asc=all(real[i]<=real[i+1] for i in range(len(real)-1))
out.write("BLOB3 ascending(ignoring pad): %s\n\n"%asc)
# Does BLOB1's GB2312 chars correspond to BLOB3 unicode set? Convert BLOB1 chars to codepoints
b1cps=[ord(c) for c in txt if ord(c)>0x2000]
out.write("BLOB1 first 40 unicode cps: "+' '.join('%04x'%c for c in b1cps[:40])+"\n")
out.write("BLOB1 unique cps: %d, BLOB3 unique: %d\n"%(len(set(b1cps)),len(set(real))))
inter=set(b1cps)&set(real)
out.write("intersection size: %d\n"%len(inter))
out.close()
print("done")