- Полный 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>
41 строка
1.5 KiB
Python
41 строка
1.5 KiB
Python
import io
|
|
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/out10.txt","w",encoding="utf-8")
|
|
|
|
# Render candidate glyphs at 0x19c000 as bitmaps to confirm font.
|
|
# Try 16x16 (32 bytes/glyph) and 12x12 etc.
|
|
def render(off, w_bytes, rows, label):
|
|
out.write("glyph @%#x %dx%d bytes/row=%d:\n"%(off,rows,w_bytes*8,w_bytes))
|
|
for r in range(rows):
|
|
line=""
|
|
for cb in range(w_bytes):
|
|
b=data[off+r*w_bytes+cb]
|
|
for bit in range(8):
|
|
line += "#" if (b>>bit)&1 else "."
|
|
out.write(line+"\n")
|
|
out.write("\n")
|
|
|
|
# 16x16 = 2 bytes/row, 16 rows = 32 bytes
|
|
for g in range(6):
|
|
render(0x19c000+g*32, 2, 16, "16x16 glyph %d"%g)
|
|
|
|
# Occupancy across 0x198000..0x242000: how much real font data
|
|
seg=data[0x198000:0x242000]
|
|
from collections import Counter
|
|
c=Counter(seg)
|
|
out.write("region 0x198000-0x242000 total=%d ff=%d zero=%d other=%d\n"%(len(seg),c[0xff],c[0],len(seg)-c[0xff]-c[0]))
|
|
|
|
# The font is likely: big CJK 16x16 bitmap set. count of 32-byte glyphs that fit in nonFF area
|
|
# Check periodicity of 32 in the 0x19c000+ area by counting nonzero glyph cells
|
|
out.write("\nSample far into region 0x200000:\n")
|
|
def hx(off,n=48):
|
|
s=""
|
|
for j in range(0,n,16):
|
|
ch=data[off+j:off+j+16]
|
|
s+="%08x %s\n"%(off+j,' '.join('%02x'%b for b in ch))
|
|
return s
|
|
out.write(hx(0x200000,0x40))
|
|
out.write("\n0x240000:\n"+hx(0x240000,0x40))
|
|
out.close()
|
|
print("done")
|