main

Частичный разбор формата uxc

Во время попытки русификации SCIF'овской сониевской хреновины, пришлось покопаться в прошивке. Один из "нескучных" форматов файлов почти получилось разобрать по запчастям.

Возможно кому-то пригодится.

string_ukrainian.uxc: если в файле ничего нет - он заполняется 'FF' байтами

0000000: 7578 6307 0000 0000 0800 2700 d88c cd00  uxc.......'.....
         [      header     ] []   []   [     ][]
         |                   |    |    |      `-  флаг?
         |                   |    |    `--------  идентификатор?
         |                   |    `-------------  тип ресурса?
         |                   `------------------  ?
         `--------------------------------------  заголовок

01 E0 04 1E
[] [      ]
|  `------- заголовок записи?
`---------- номер записи

0000 19C0: - начало записей локализованных строк в string_danish.uxc / string_dutch.uxc да, похоже на то, string_english.uxc подтверждает

В самой строке не указана её длина, это странно, возможно строится индекс при загрузке

Сами строки - в UTF8, дополняются нулём до размера, кратного 2м

00000010 - 000019C0 - массив двухбайтных чисел, похожи на смещения (это было бы логично, учитывая фиксированную позицию начала данных, но смущает размер чисел)

string_dutch.uxc:
               |   len   |
  offset  | #  |  D |  H |   #  |len|
-------------------------------------
0000 19C0 | 00 |  8 |  8 | 0002 | 2 |
0000 19C8 | 01 | 16 |  F | 0006 | 4 |
0000 19D8 | 02 | 20 | 14 | 000B | 5 |
0000 19EC | 03 | 12 |  C | 000E | 3 |
0000 19F8 | 04 | 12 |  C | 0011 | 3 |
0000 1A04 | 05 | 16 |  F | 0015 | 4 |
0000 1A14 | 06 | 16 |  F | 0019 | 4 |
0000 1A24 | 07 | 12 |  C | 001C | 3 |
0000 1A30 | 08 | 12 |  C | 001F | 3 |
0000 1A3C | 09 | 12 |  C | 0022 | 3 |
0000 1A48 | 0A |

Это что касается файлов string*.uxc

view*.uxc имеют другой формат:

00 1B 57 22
[] [      ]
|  `------- заголовок записи?
`---------- уже не номер записи

viewSettingMenu.uxc:

0000 0072: 02 1B 57 22
0000 00B6: 00 1B 57 22
0000 00F2: 00 1B 57 22
0000 0137: 00 1B 57 22
0000 01E5: 00 1B 57 22
0000 0284: 00 1B 57 22
0000 0323: 00 1B 57 22
0000 0368: 00 1B 57 22
0000 03F1: 00 1B 57 22
0000 042D: 00 1B 57 22
0000 0472: 00 1B 57 22
0000 0510: 00 1B 57 22
0000 059F: 00 1B 57 22
0000 05E4: 00 1B 57 22
0000 064C: 02 1B 57 22
0000 06B4: 03 1B 57 22

lang_cmn.uxc:

01 60 06 36
|  `------- заголовок записи?
`---------- номер записи

начало записей - 0x0068

0000 0068 | 00 - FONT_UNIVERS
0000 007C | 01 - FONT_JAPANESE
0000 0090 | 02 - FONT_KOREAN
0000 00A0 | 03 - FONT_S_CHINESE
0000 00B4 | 04 - FONT_T_CHINESE
-----
заголовок меняется на
05 60 06 26
|  `------- заголовок записи?
`---------- номер записи
-----
0000 00C8 | 05 | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 00DC | 06 | 60 06 26 | 01 00 00 00 01 60 06 02 00 00 00 FF 00 00 00 00
0000 00F0 | 07 | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 0104 | 08 | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 0118 | 09 | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 012C | 0A | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 0140 | 0B | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 0154 | 0C | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 0168 | 0D | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 017C | 0E | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 0190 | 0F | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 01A4 | 10 | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 01B8 | 11 | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 01CC | 12 | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 01E0 | 13 | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 01F4 | 14 | 60 06 26 | 01 00 00 00 02 60 06 02 00 00 00 FF 00 00 00 00
0000 0208 | 15 | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 021C | 16 | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 0230 | 17 | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 0244 | 18 | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 0258 | 19 | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 026C | 1A | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 0280 | 1B | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 0294 | 1C | 60 06 26 | 01 00 00 00 03 60 06 02 00 00 00 FF 00 00 00 00
0000 02A8 | 1D | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 02BC | 1E | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 02D0 | 1F | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 02E4 | 20 | 60 06 26 | 01 00 00 00 04 60 06 02 00 00 00 FF 00 00 00 00
0000 02F8 | 21 | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 030C | 22 | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 0320 | 23 | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00
0000 0334 | 24 | 60 06 26 | 01 00 00 00 00 60 06 02 00 00 00 FF 00 00 00 00