如何使用 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