我需要在一堆文件中搜索以十六进制格式存储的特定字符串数据。
例如,我有超过200个文件,其中一个包含:
60 55 8B EC 83 EC 48 56 57 83 CF FF
我如何扫描可能包含我正在寻找的字节字符串的多个文件?
运行 Windows 10 Pro 64 位。
答案1
如何在文件中搜索指定的十六进制字符串?
您可以使用免费Swiss File Knife
下载瑞士锉刀 - 在 SourceForge.net 上浏览文件。
它在 Windows CMD shell、Mac OS X Terminal 或 Linux shell 中运行。
它有一个hexfind
命令:
sfk hexfind [opts] -pat /pattern/ -dir anydir -file .ext1 [.ext2]
search text or binary data in text and binary files.
if multiple patterns are given then they are searched
independently (pattern1 OR pattern2).
this is a basic command to search only static data.
type sfk xhexfind to use wildcards and expressions.
看在命令行上查找二进制文件中的文本:适用于 Windows、Mac OS X、Linux、Raspberry Pi 的免费 sfk hexfind了解更多信息。
答案2
您可以结合格式-Hex和选择字符串Powershell 中的 cmdlet 可以找到您要查找的 Format-Hex 内容:
以十六进制显示文件或其他输入。
并选择字符串:
在字符串和文件中查找文本。
请尝试以下操作:
Get-ChildItem -File * | foreach {
$a= Format-Hex $_.FullName | Select-String "60 55 8B EC 83 EC 48 56 57 83 CF FF"
if ($a.Length -gt 0) { $_.FullName}
}
解释:
Get-ChildItem -File *
:列出文件夹中的所有文件| $a= Format-Hex $_.FullName | Select-String "60 55 8B EC 83 EC 48 56 57 83 CF FF"
:将上一个 cmdlet 的输出通过管道传输到下一个 cmdlet。然后,将每个文件的内容转换为十六进制格式,然后根据模式检查内容并将其存储在变量中if ($a.Length -gt 0) { $_.FullName}
:如果变量的长度大于0,则表示找到了模式,并显示文件名。