Files
rt-4d/research/verify_fonttable.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

36 строки
1.2 KiB
Python

data = open(r"C:/Users/vikto/Documents/Claude/rt-4d/radio-spi-dump.bin","rb").read()
# Check 0x14C000 region: is it sequential GBK codepoints?
seg = data[0x14C000:0x14C000+40]
print("bytes @0x14C000:", seg.hex(' '))
# decode as gbk pairs
try:
print("gbk:", seg.decode('gbk'))
except Exception as e:
print(e)
# Are the CJK chars strictly increasing in unicode order?
region = data[0x14C000:0x157000]
chars=[]
i=0
while i < len(region)-1:
pair = region[i:i+2]
try:
c = pair.decode('gbk')
if len(c)==1 and ord(c)>0x2000:
chars.append(ord(c))
except:
pass
i+=2
inc = sum(1 for a,b in zip(chars,chars[1:]) if b>a)
print(f"CJK chars in 0x14C000-0x157000: {len(chars)}, monotonic-increasing fraction: {inc/max(1,len(chars)-1):.2%}")
print("first codepoints:", [hex(c) for c in chars[:8]], "last:", [hex(c) for c in chars[-4:]])
# search whole dump for meaningful ascii keywords (case-insensitive)
kws = [b'RADTEL', b'Radtel', b'RT-4D', b'RT4D', b'FIRMWARE', b'VERSION', b'BOOT', b'COPYRIGHT',
b'WELCOME', b'BRANDMEISTER', b'OpenGD', b'DMR ID', b'CALLSIGN', b'\x00V1.', b'V2.', b'BETA', b'.4rdmf']
for k in kws:
idx = data.find(k)
if idx>=0:
print(f"FOUND {k!r} @0x{idx:06X}")