Проверка ключей реестра на подверженность перенаправлению Wow6432 (redirected, shared, reflected)

Dragokas

Angry & Scary Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
7,814
Реакции
6,593
Введение

Привет!
Для тех, кому все это в новинку поясню, что для 64-разрядных ОС некоторые ключи в реестре существуют в двух представлениях:
- для х64 битных приложений.
- для х32 битных приложений.

Пример:

1. Ключ HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID (и все его подразделы) - является 64-битным
2. Ключ HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID (и все его подразделы) - 32-битным.

Если вы попытаетесь в 64-битной ОС с помощью 32-разрядного приложения прочитать/записать/удалить и.т.п... ключ № 1, произойдет перенаправление, и действие выполнится с ключем № 2.

Это пример обычного перенаправления (redirected).

Виды перенаправлений

В плане переадресации существуют такие виды ключей реестра:
1. Перенаправляемые (redirected)
2. Общие (shared)
3. Отраженные (reflected)
4. Также выделю отдельной группой симлинки (symlink), связанные с механизмом registry redirector.

1. Перенаправляемые (redirected).

Пример таких ключей описан выше (см. Введение).

2. Общие (shared)

Возьмем для примера такие ключи:
а) HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Policies (32-битное представление)
б) HKLM\Software\Microsoft\Windows\CurrentVersion\Policies (64-битное представление)

В виду особой важности, некоторые ключи в обеих представлениях (64 и 32) физически ссылаются на один и тот же ключ. Это означает, что если Вы измените ключ под Wow6432Node (ключ а.), то изменения будут видны и в ключе б. И наоборот.

3. Отраженные (reflected).

Такие ключи использовались в ОС Windows Server 2008 / Vista / Server 2003 / XP.
Начиная с Windows 7 они были заменены на Shared (общие ключи, см. выше).

Отличием от Shared ключей является то, что физически - это 2 разных ключа. Но, как только программа завершает запись в любой из этих ключей, он автоматически копируется в другое представление. Таким образом, их состояние синхронизируется между собой.

4. Симлинки, связанные с переадресацией под Wow64.

Microsoft не рекомендует использовать для доступа к 32-разрядным ключам жестко закодированные строки, проходящие через имя Wow6432Node. Вместо этого есть цивилизованные способы.

Однако, некоторые программисты все же используют такие пути. И это могло бы плохо закончится, потому что, начиная с Windows 7 (?) путь к Wow6432Node для некоторых ключей изменился, а для других было вообще отключено 32-битное представление.

Тем не менее, MS позаботилась о таких ситуациях и ввела поправочные симлинки.
Так, согласно офф. документации, известны такие симлинки, перенаправляющие запросы от одного ключа к другому (независимо от разрядности программы):
  • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes указывает на HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node
  • HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\AppId указывает на HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppId
  • HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\PROTOCOLS указывает на HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PROTOCOLS
  • HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\Typelib указывает на HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Typelib
  • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes указывает на HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node (для ОС Windows Server 2008 / Vista / Server 2003 / XP)
Это не исключительный список и со времен Win 7 было добавлено еще многое, но в документации об этом ничего нет.
Так что мы чуть-чуть умнее, и можем сами у себя посмотреть, какие еще есть симлинки, связанные с механизмом переадресации.

Возьмем замечательную утилиту ListRegistryLinks от Helge Klein, и выполним в командной строке, например, такое для улья HKLM:
Код:
ListRegistryLinks-x64.exe HKLM | find /i "Wow6432Node"
"HKLM\SOFTWARE\Classes\Wow6432Node\AppID" -> "HKLM\SOFTWARE\Classes\AppID" (заметьте, что ключ больше не указывает на Wow6432Node, а значит в этой версии ОС просто отказались от 32-битного представления этого ключа и некоторых других (см. ниже аналогичные))
"HKLM\SOFTWARE\Classes\Wow6432Node\PROTOCOLS" -> "HKLM\SOFTWARE\Classes\PROTOCOLS"
"HKLM\SOFTWARE\Classes\Wow6432Node\TypeLib" -> "HKLM\SOFTWARE\Classes\TypeLib"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Calais\Current" -> "HKLM\SOFTWARE\Microsoft\Cryptography\Calais\Current"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Calais\Readers" -> "HKLM\SOFTWARE\Microsoft\Cryptography\Calais\Readers"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Services" -> "HKLM\SOFTWARE\Microsoft\Cryptography\Services"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\CTF\SystemShared" -> "HKLM\SOFTWARE\Microsoft\CTF\SystemShared"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\CTF\TIP" -> "HKLM\SOFTWARE\Microsoft\CTF\TIP"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Notepad\DefaultFonts" -> "HKLM\SOFTWARE\Microsoft\Notepad\DefaultFonts"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Software\Microsoft\Shared Tools\Msinfo" -> "HKLM\SOFTWARE\Microsoft\Software\Microsoft\Shared Tools\Msinfo"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Control Panel\Cursors\Schemes" -> "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Cursors\Schemes"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\explorer\AutoplayHandlers" -> "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\explorer\DriveIcons" -> "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\DriveIcons"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\explorer\KindMap" -> "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\KindMap"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Telephony\Locations" -> "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Locations"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\App Paths" -> "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Group Policy" -> "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Policies" -> "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\PreviewHandlers" -> "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\PreviewHandlers"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Setup" -> "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Console" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\FontDPI" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontDPI"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\FontLink" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\FontMapper" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontMapper"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Fonts" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\FontSubstitutes" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\GRE_Initialize" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\GRE_Initialize"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\LanguagePack" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\LanguagePack"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\NetworkCards" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Perflib" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Ports" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Print" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\ProfileList" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Time Zones" -> "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\COM3" -> "HKLM\SOFTWARE\Microsoft\COM3"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\DFS" -> "HKLM\SOFTWARE\Microsoft\DFS"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Driver Signing" -> "HKLM\SOFTWARE\Microsoft\Driver Signing"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\EnterpriseCertificates" -> "HKLM\SOFTWARE\Microsoft\EnterpriseCertificates"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\EventSystem" -> "HKLM\SOFTWARE\Microsoft\EventSystem"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\MSMQ" -> "HKLM\SOFTWARE\Microsoft\MSMQ"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Non-Driver Signing" -> "HKLM\SOFTWARE\Microsoft\Non-Driver Signing"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Ole" -> "HKLM\SOFTWARE\Microsoft\Ole"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Ras" -> "HKLM\SOFTWARE\Microsoft\Ras"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Rpc" -> "HKLM\SOFTWARE\Microsoft\Rpc"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\SystemCertificates" -> "HKLM\SOFTWARE\Microsoft\SystemCertificates"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\TermServLicensing" -> "HKLM\SOFTWARE\Microsoft\TermServLicensing"
"HKLM\SOFTWARE\Wow6432Node\Microsoft\Transaction Server" -> "HKLM\SOFTWARE\Microsoft\Transaction Server"
"HKLM\SOFTWARE\Wow6432Node\Classes" -> "HKLM\SOFTWARE\Classes\Wow6432Node"
"HKLM\SOFTWARE\Wow6432Node\Clients" -> "HKLM\SOFTWARE\Clients"
"HKLM\SOFTWARE\Wow6432Node\Policies" -> "HKLM\SOFTWARE\Policies"
"HKLM\SOFTWARE\Wow6432Node\RegisteredApplications" -> "HKLM\SOFTWARE\RegisteredApplications"


Перечень ключей реестра, подверженных переадресации

Такой перечень присутствует на сайте Microsoft, но он давно не обновлялся.
Я написал скрипт (батник), который позволяет проверить индивидуальный (введенный вами) ключ на предмет его перенаправления таких видов:
1) Shared
2) Redirected

Если ключ обычный - батник ничего не выведет.
Рекомендуется пользоваться батником на виртуальной машине, т.к. он оставляет мусор в виде пустых ключей в 32-битном представлении. Они специально не удаляются в целях безопасности (чтобы ничего лишнего не наудалять).
Также он не особо хорошо тестировался. Я на 100% не гарантирую, что он все правильно определит.
Тем не менее, по моим ручным тестам (с подтверждением) уже нашлись расхождения даже с официальной информацией, например, на Windows 7 ключ
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\HCP
является обычным, а не Shared.
CMD/BATCH:
@echo off
SetLocal EnableExtensions

echo Registry key redirection Tester by Dragokas
echo.
:: Random Data
set "Param=Wow_Test_345165894610759061862530751907892615"
set "Data=Dragokas-123"
set "x32_Reg=%SystemRoot%\SysWow64\reg.exe"

net session >NUL 2>NUL || (echo WARNING: Admin privileges required to test HKLM keys.& echo.)

:begin
set "key="
set /p "key=Enter key: "
echo.
if "%key%"=="" exit /B
echo "%key%" | find /i "\Wow6432Node" >NUL && (echo Wow6432Node is forbidden. &echo. & goto begin)
echo "%key%" | find /i "\SOFTWARE\Classes" >NUL && (
  set "key32=%key:\SOFTWARE\Classes\=\SOFTWARE\Classes\Wow6432Node\%"
) || (
  set "key32=%key:\SOFTWARE\=\SOFTWARE\Wow6432Node\%"
)
:: delete x64 data
reg delete "%key%" /v "%Param%" /f 2>NUL >&2
:: add x32 data
reg add "%key32%" /v "%Param%" /t REG_SZ /d %Data% /f >NUL
:: Checking Shared mode
reg query "%key%" /v "%Param%" 2>NUL >&2 && (
  echo Shared.
) || (
  rem Checking for redirection
  "%x32_Reg%" query "%key%" /v "%Param%" 2>NUL >&2 && echo Redirected.
)
:: Clean
reg delete "%key32%" /v "%Param%" /f 2>NUL 1>&2
echo.
echo ---------------------------
echo.
goto begin
Скрипт запускать правой кнопкой мыши "От имени администратора", если проверяете ключи HKLM.

Спасибо за чтение.
Надеюсь, Вам окажется полезной эта заметка.

Скачать: https://dragokas.com/tools/forum/Get_Key_Redirect_Info.zip
 

Вложения

  • Get_Key_Redirect_Info.zip
    743 байт · Просмотры: 12
Последнее редактирование:
Назад
Сверху Снизу