- Сообщения
- 13,982
- Решения
- 3
- Реакции
- 5,704
Все знают что такое параметры реестра.
Предлагаю начать более серьезное знакомство с ними.
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 |
Если какие либо символы нужны и их нет в таблице-пишите мне в личные сообщения, добавлю.
Последнее редактирование модератором: