如何在 Windows 注册表 REG_BINARY 中搜索匹配数据

如何在 Windows 注册表 REG_BINARY 中搜索匹配数据

如何使用 Windows 注册表编辑器的“查找”功能(或其他方法)来搜索二进制数据包含与特定值匹配的字节序列的 REG_BINARY 键?

也就是说,许多 REG_BINARY 键值包含以 UTF-8 2 字节对格式的数据,其中对中的第一个字节代表标准 ASCII 字符,而对中的第二个字节通常为空。

我正在尝试查找这样的二进制密钥,该密钥具有引用路径名的数据。但是我无法简单地搜索“Abc”,因为二进制数据存储为 2 字节对:“A”null“b”null“c”。我如何才能搜索到所有密钥数据包含相当于“Abc”的 2 字节字符串的二进制密钥?

答案1

对于记录在案以及那些喜欢“自己动手”的人,您可以REG_BINARY使用[Byte[]][System.BitConverter\]::ToString()方法:

$path             = 'HKCU:\Control Panel\Desktop\WindowMetrics\'
$LogFontStructure = (Get-ItemProperty $path).iconfont
$HexString        = [System.BitConverter]::ToString( $LogFontStructure )

控制台捕获:

PS C:\> $path             = 'HKCU:\Control Panel\Desktop\WindowMetrics\'
>> $LogFontStructure = (Get-ItemProperty $path).iconfont
>> $HexString        = [System.BitConverter]::ToString( $LogFontStructure )
PS C:\>
PS C:\>
PS C:\> $HexString
EB-FF-FF-FF-00-00-00-00-00-00-00-00-00-00-00-00-90-01-00-00-00-00-00-01-00-00-05-00-53-00-65-00-67-00-6F-00-65-00-20-00-55-00-49-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00

然后,要将搜索字符串转换为匹配格式,请使用Encoding.GetBytes()方法将搜索文本转换为字节数组,并将其转换为十六进制字符串:

$SearchString = 'Segoe'
$enc          = [system.Text.Encoding]::Unicode
$UnicodeBytes = $enc.GetBytes($SearchString)
$HexSearch    = [System.BitConverter]::ToString( $UnicodeBytes )
# Intermediate variables used for clarity. Actual code can use:
# $HexSearch    = [System.BitConverter]::ToString( $enc.GetBytes($SearchString) )

控制台捕获:

PS C:\> $SearchString = 'Segoe'
>> $enc          = [system.Text.Encoding]::Unicode
>> $UnicodeBytes = $enc.GetBytes($SearchString)
>> $HexSearch    = [System.BitConverter]::ToString( $UnicodeBytes )
>> # Intermediate variables used for clarity. Actual code can use:
>> # [System.BitConverter]::ToString( $enc.GetBytes($SearchString) )
PS C:\>
PS C:\>
PS C:\> $HexSearch
53-00-65-00-67-00-6F-00-65-00

由于源值和搜索值都采用字符串格式,因此您可以使用标准字符串搜索技术:

PS C:\> $HexString -match $HexSearch
True
PS C:\> $matches

Name                           Value
----                           -----
0                              53-00-65-00-67-00-6F-00-65-00

相关内容