Get-Command查询伪EXE返回0.0.0.0,能否作为可执行文件校验依据?
核心结论
0.0.0.0是开发者可正常使用的合法版本号,不能单独将其作为非法文件的判断依据。
很多早期开发版本、内部测试用的可执行文件,或是开发者未主动配置版本信息时,都会直接将版本号设为0.0.0.0,这类文件是真实可运行的PE可执行文件。
现象原因说明
你遇到的改后缀TXT文件返回0.0.0.0的情况,是Windows系统读取文件版本资源的默认规则:当目标文件没有嵌入标准的版本信息资源块时,相关接口会默认返回0.0.0.0的版本值,和文件本身是不是真的可执行文件无关。
更可靠的EXE合法性校验方案
你可以结合以下多个维度判断,避免误判:
- 首先校验文件是不是真实的PE格式可执行文件,不要仅判断后缀名:
PE文件的头部固定以MZ字符开头,你可以通过PowerShell直接读取文件头2个字节判断:
改后缀的非PE文件(比如TXT、图片等)都无法通过这个校验。$header = [System.IO.File]::ReadAllBytes($path, 2) $isPE = [char]$header[0] -eq 'M' -and [char]$header[1] -eq 'Z' - 如需结合版本信息判断,不要读取转换后的
Version属性,直接读取原始版本字符串:
直接获取未被自动转换的原始版本字段,判断是否为空即可,避免和真实填写的0.0.0.0版本号混淆:$fileVersion = (Get-Item $path).VersionInfo.FileVersion $productVersion = (Get-Item $path).VersionInfo.ProductVersion $hasValidVersionInfo = ![string]::IsNullOrWhiteSpace($fileVersion) -and ![string]::IsNullOrWhiteSpace($productVersion) - 对安全性要求更高的场景,可以额外校验文件的数字签名:
使用Get-AuthenticodeSignature $path命令查看文件的签名状态,正规发布的可执行文件通常会带有有效数字签名。
内容的提问来源于stack exchange,提问作者Gordon
相关产品推荐
相关产品推荐

