DMI-блок начинается в этих дампах с адреса 0x6A0000
Разобрал, как смог структуру записи переменных:
[ DMI ]LENV = сигнатура
4 байта = не разобрался чего
4 байта = количество переменных
0x00 = 1 байт нулей
XOR-byte = байт, которым заксорены данные (в одном дампе ксор 28, в другом ксор DF)
2 байта = Checksum-16 заксоренных данных: начиная со следующего байта до конца блока (впритык пойдёт следующий блок DMI с сигнатурой LENV). Пример суммы: A16F -> 6F A1 (hex)
--
Со смещения 0x10 от начала DMI (сигнатура LENV) до конца блока DMI нужно расксорить данные. Т.е. первые 16 байт от начала DMI пропускаем, остальное копируем в WinHex, выделяем всё и делаем Edit\Modify Data...\* XOR [XOR-byte].
17 байт = не разобрался чего
0x00*15 = 15 байт нулей
:loop
55570EC26911564CA48A9824AB43 = маркер начала переменной
2 байта = тип данных (SN/ProductName/UUID/MB NAME/WINKEY...) - (прим.
RsM)
1 байт = длина данных (исключая 7 нулей)
0x00*7 = 7 байт нулей
data = данные
goto loop
--------------------------------------------------------------------------------
Если нужно поправить данные, то правим расксоренные данные, заксориваем, подсчитываем сумму, прописываем сумму и обновлённые ксор-данные в дамп.
ЗЫ: написал программу DMI_decrypter для полуавтоматической правки таких DMI -
тут.