В Powershell:
Get-AuthenticodeSignature C:\Path\TO\File.exe
Итак, используя ваш пример explorer.exe, вы получите Redmond:
(Get-AuthenticodeSignature C:\Windows\explorer.exe).SignerCertificate.subject.split(',')[2].split('=')[1]
Поскольку вы запросили детализацию, Get-AuthenticodeSignature
возвращает объект System.Management.Automation.Signature. Вы можете узнать это несколькими способами. Лично я предпочитаю назначать его переменной, чтобы я мог поиграть с возвращенным объектом дальше. После того, как вы присвоили ей переменную, вы можете узнать о ней кое-что. Get-Member
должен быть одним из ваших командлетов в Powershell. В этом случае:
$foo = Get-AuthenticodeSignature C:\Windows\explorer.exe Get-Member -InputObject $foo TypeName: System.Management.Automation.Signature Name MemberType Definition ---- ---------- ---------- Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetType Method type GetType() ToString Method string ToString() IsOSBinary Property bool IsOSBinary Path Property string Path SignatureType Property System.Management.Automation.SignatureType SignatureType SignerCertificate Property System.Security.Cryptography.X509Certificates.X509Certificate2 SignerCertificate {... Status Property System.Management.Automation.SignatureStatus Status StatusMessage Property string StatusMessage TimeStamperCertificate Property System.Security.Cryptography.X509Certificates.X509Certificate2 TimeStamperCertific...
Таким образом, вы можете видеть, что у объекта есть некоторые методы и некоторые свойства (я знаю, все объекты имеют). В этом случае все методы являются стандартными, которые унаследованы от System.Object. Свойства, хотя и интересны. Сертификат Signer выглядит так, как вы хотели, поэтому давайте посмотрим, как это выглядит:
$foo.SignerCertificate Thumbprint Subject ---------- ------- 419E77AED546A1A6CF4DC23C1F977542FE289CF7 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
Очевидно, что отпечаток пальца важен, потому что именно он идентифицирует сертификат, но вы спросили о Redmond, который находится в теме. Итак, теперь мы знаем, как добраться до этого в виде строки:
$foo.SignerCertificate.Subject
Так что это просто разбор строки прямо отсюда.
Еще один кусочек, который я добавлю, так как кажется, что вы, возможно, изучаете Powershell. Другой командлет, который вы должны регулярно использовать, - это Get-Command. В этом случае я даже не знал, что командлет Get-AuthenticodeSignature существовал до того, как вы задали вопрос. Итак, я сделал это:
Get-Command *signature* CommandType Name Version Source ----------- ---- ------- ------ Function Update-MpSignature 1.0 Defender Cmdlet Get-AuthenticodeSignature 3.0.0.0 Microsoft.PowerShell.Security Cmdlet Save-VolumeSignatureCatalog 1.0.0.0 ShieldedVMDataFile Cmdlet Set-AuthenticodeSignature 3.0.0.0 Microsoft.PowerShell.Security