- Сообщения
- 14,053
- Решения
- 2
- Реакции
- 5,746
Все знают что такое параметры реестра.
Предлагаю начать более серьезное знакомство с ними.
REG_MULTI_SZ - Многострочное поле.
Двоичные значения, содержащие список строк кодированных в шестнадцатеричном формате.
Редактор реестра отображает данные уже в удобной для чтения форме, каждую строку с новой строки.
Строки разделяются символом null 0x00,параметр заканчивается двойным символом Null 00,00,00,00-таким образом в реестре обозначается конец записи текстовых строк в параметре, конец списка.
Просмотрев его значение в редакторе реестра мы можем увидеть многостроковые значения ,разного регистра и даже языка.
Как правило о назначении параметра можно предполагать исходя из его месторасположения и содержимого.
На первый взгляд это вроде бы и все?
Но чем интересен синтаксис реестра-так это своей неординарностью и разнообразием.
Давайте попробуем произвести экспорт в reg-файл любого элемента реестра, имеющего в себе параметр REG_MULTI_SZ.
А затем откроем в любом текстовом редакторе.
Получим примерно такую абракадабру:
Тут уже становится непонятненько)))
Вот ,собственно это и разберем в деталях.
Итак, в reg-файлах параметр REG_MULTI_SZ нам виден как hex(7):
Это нам стало известно еще из этой темы.
Далее следует числовой код, который в случае чего можно интерпретировать скриптом например, или же самостоятельно.
Каждый знак ,который будет записан в реестр является комбинацией 4 чисел вида: ,,
Например из нашего примера значение 30,04, эквивалентно букве а.
Причем значение 04, присутствует всегда у символов Кириллицы, а первые две цифры будут изменяться согласно коду буквы.
А вот пример прописной (большой) буквы Б : 11,04,
Тут ситуация аналогична.
Далее следуют восемь нолей: 00,00,00,00
Это завершение параметра.
То есть если строка одна-в конце всегда будет 00,00,00,00 ,а если это несколько строк -в конце каждой строки будет по две пары нолей: 00,00, но вот в последней строке параметра конечно же будет четыре пары ноликов: 00,00,00,00
Дело в том, что regedit (при сохранении reg-файла в Unicode) в параметрах типов REG_EXPAND_SZ и REG_MULTI_SZ к каждому байту добавляет лишний нулевой байт. Для REG_EXPAND_SZ нужды в доп. обработке не возникает, т.к. там нулевые байты недопустимы по определению и они просто все обрезаются, а в REG_MULTI_SZ нулевой байт - это перевод строки.
Например запись
Будет выглядеть как:
Схема: буква(31,04)-перенос строки(00,00,)-буква(31,04,)-завершение параметра(00,00,00,00).
Думаю тут все понятно, далее просто приведу таблицу символов, которую собрал на досуге:
Таблица символов
Таблица символов
Таблица символов
Если какие либо символы нужны и их нет в таблице-пишите мне в личные сообщения, добавлю.
Предлагаю начать более серьезное знакомство с ними.
REG_MULTI_SZ
REG_MULTI_SZ - Многострочное поле.
Двоичные значения, содержащие список строк кодированных в шестнадцатеричном формате.
Редактор реестра отображает данные уже в удобной для чтения форме, каждую строку с новой строки.
Строки разделяются символом null 0x00,параметр заканчивается двойным символом Null 00,00,00,00-таким образом в реестре обозначается конец записи текстовых строк в параметре, конец списка.
Просмотрев его значение в редакторе реестра мы можем увидеть многостроковые значения ,разного регистра и даже языка.
Как правило о назначении параметра можно предполагать исходя из его месторасположения и содержимого.
На первый взгляд это вроде бы и все?
Но чем интересен синтаксис реестра-так это своей неординарностью и разнообразием.
Давайте попробуем произвести экспорт в reg-файл любого элемента реестра, имеющего в себе параметр REG_MULTI_SZ.
А затем откроем в любом текстовом редакторе.
Получим примерно такую абракадабру:
Код:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\REG]
"REG"=hex(7):30,04,00,00,00,00
Тут уже становится непонятненько)))
Вот ,собственно это и разберем в деталях.
Итак, в reg-файлах параметр REG_MULTI_SZ нам виден как hex(7):
Это нам стало известно еще из этой темы.
Далее следует числовой код, который в случае чего можно интерпретировать скриптом например, или же самостоятельно.
Каждый знак ,который будет записан в реестр является комбинацией 4 чисел вида: ,,
Например из нашего примера значение 30,04, эквивалентно букве а.
Причем значение 04, присутствует всегда у символов Кириллицы, а первые две цифры будут изменяться согласно коду буквы.
А вот пример прописной (большой) буквы Б : 11,04,
Тут ситуация аналогична.
Далее следуют восемь нолей: 00,00,00,00
Это завершение параметра.
То есть если строка одна-в конце всегда будет 00,00,00,00 ,а если это несколько строк -в конце каждой строки будет по две пары нолей: 00,00, но вот в последней строке параметра конечно же будет четыре пары ноликов: 00,00,00,00
Дело в том, что regedit (при сохранении reg-файла в Unicode) в параметрах типов REG_EXPAND_SZ и REG_MULTI_SZ к каждому байту добавляет лишний нулевой байт. Для REG_EXPAND_SZ нужды в доп. обработке не возникает, т.к. там нулевые байты недопустимы по определению и они просто все обрезаются, а в REG_MULTI_SZ нулевой байт - это перевод строки.
Например запись
Код:
б
б
Код:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\REG]
"REG"=31,04,00,00,31,04,00,00,00,00
Схема: буква(31,04)-перенос строки(00,00,)-буква(31,04,)-завершение параметра(00,00,00,00).
Думаю тут все понятно, далее просто приведу таблицу символов, которую собрал на досуге:
Таблица символов
Символ | Код символа | Символ | Код символа |
---|---|---|---|
Английские прописные (большие) | Английские строчные (маленькие) | ||
A | 41,00 | a | 61,00 |
B | 42,00 | b | 62,00 |
C | 43,00 | c | 63,00 |
D | 44,00 | d | 64,00 |
E | 45,00 | e | 65,00 |
F | 46,00 | f | 66,00 |
G | 47,00 | g | 67,00 |
H | 48,00 | h | 68,00 |
I | 49,00 | i | 69,00 |
J | 4a,00 | j | 6a,00 |
K | 4b,00 | k | 6b,00 |
L | 4c,00 | l | 6c,00 |
M | 4d,00 | m | 6d,00 |
N | 4e,00 | n | 6e,00 |
O | 4f,00 | o | 6f,00 |
P | 50,00 | p | 70,00 |
Q | 51,00 | q | 71,00 |
R | 52,00 | r | 72,00 |
S | 53,00 | s | 73,00 |
T | 54,00 | t | 74,00 |
U | 55,00 | u | 75,00 |
V | 56,00 | v | 76,00 |
W | 57,00 | w | 77,00 |
X | 58,00 | x | 78,00 |
Y | 59,00 | y | 79,00 |
Z | 5a,00 | z | 7a,00 |
Таблица символов
Символ | Код символа | Символ | Код символа |
---|---|---|---|
Русские прописные (большие) | Русские строчные (маленькие) | ||
А | 10,04, | а | 30,04, |
Б | 11,04, | б | 31,04, |
В | 12,04, | в | 32,04, |
Г | 13,04, | г | 33,04, |
Д | 14,04, | д | 34,04, |
Е | 15,04, | е | 35,04, |
Ё | 01,04, | ё | 51,04, |
Ж | 16,04, | ж | 36,04, |
З | 17,04, | з | 37,04, |
И | 18,04, | и | 38,04, |
Й | 19,04, | й | 39,04, |
К | 1a,04, | к | 3a,04, |
Л | 1b,04, | л | 3b,04, |
М | 1c,04, | м | 3c,04, |
Н | 1d,04, | н | 3d,04, |
О | 1e,04, | о | 3e,04, |
П | 1f,04, | п | 3f,04, |
Р | 20,04, | р | 40,04, |
С | 21,04, | с | 41,04, |
Т | 22,04, | т | 42,04, |
У | 23,04, | у | 43,04, |
Ф | 24,04, | ф | 44,04, |
Х | 25,04, | х | 45,04, |
Ц | 26,04, | ц | 46,04, |
Ч | 27,04, | ч | 47,04, |
Ш | 28,04, | ш | 48,04, |
Щ | 29,04, | щ | 49,04, |
Ь | 2c,04, | ь | 4c,04, |
Ъ | 2a,04, | ъ | 4a,04, |
Э | 2d,04, | э | 4d,04, |
Ю | 2e,04, | ю | 4e,04, |
Я | 2f,04, | я | 4f,04, |
Таблица символов
Символ | Код символа | Символ | Код символа |
---|---|---|---|
Цифры | Знаки | ||
1 | 31 | - | 2d,00 |
2 | 32 | _ | 5f,00 |
3 | 33 | = | 3d,00 |
4 | 34 | + | 2b,00 |
5 | 35 | \\ | 5c,00 |
6 | 36 | ! | 21 |
7 | 37 | @ | 40 |
8 | 38 | # | 23 |
9 | 39 | $ | 24 |
0 | 30 | % | 25 |
^ | 5e,00 | ||
& | 26 | ||
* | 2a,00 | ||
( | 28 | ||
) | 29 | ||
знак"вертикальный слэш" | 7c,00 | ||
/ | 2f,00 | ||
< | 3c,00 | ||
> | 3e,00 | ||
[ | 5b,00 | ||
] | 5d,00 | ||
{ | 7b,00 | ||
} | 7d,00 | ||
~ | 7e,00 | ||
` | 60 | ||
27 | |||
\ | 22 | ||
; | 3b,00 | ||
: | 3a,00 | ||
Знак пробела | 20 |
Если какие либо символы нужны и их нет в таблице-пишите мне в личные сообщения, добавлю.
Последнее редактирование модератором: