Как в c# проверить цифровые подписи файла?

257
31 декабря 2017, 05:14

Есть программа processhacker в ней есть такой раздел. В этом разделе выводит инфу о процессе есть сертификат или нету его. Доступ к этому разделу выдает независимо от прав (админ/ не админ). Как бы так на c# эту строчку с инфой о сертификате тоже получить???

Answer 1

Для файла проще всего, наверное, подключить nuget-пакет System.Management.Automation, и воспользоваться PowerShell-командой:

using System.Management.Automation;
static bool VerifyAuthenticodeSignature(string path)
{
    string fullPath = Path.GetFullPath(path);
    if (!File.Exists(fullPath))
        throw new FileNotFoundException("Cannot find target file", fullPath);
    using (var ps = PowerShell.Create())
    {
        ps.AddCommand("Get-AuthenticodeSignature", true);
        ps.AddParameter("LiteralPath", fullPath);
        var results = ps.Invoke();
        var signature = (Signature)results.Single().BaseObject;
        return (signature.Status == SignatureStatus.Valid);
    }
}

(код одолжен здесь и переработан).

Для получения организации, подписавшей файл, можно подсмотреть в свойства сертификата.

var issuer = signature.SignerCertificate.IssuerName;
var properties = issuer.Format(multiLine: true)
                       .Split(new[] {"\r\n" }, StringSplitOptions.RemoveEmptyEntries)
                       .Select(line => line.Split(new[] {'=' }, 2))
                       .ToDictionary(parts => parts[0], parts => parts[1]);
properties.TryGetValue("O", out var organization);

К сожалению, я не нашёл код, который разбирает X500DistinguishedName в объектную структуру, но можно данный велосипед вроде бы работает. В моём примере organization выдало "Microsoft Corporation".

Для процессов, вам нужно найти файл, из которого процесс был запущен, и проверить его точно так же.

(Впрочем, я не эксперт в вопросах безопасности, так что могу и ошибиться.)

READ ALSO
Как в поток передать параметр?

Как в поток передать параметр?

Появилась необходимость передать в поток параметрКак правильно это сделать?

262
Написать скрипт [требует правки]

Написать скрипт [требует правки]

как написать на javascript функцию которая с помощью onclick для кнопки в html,будет выдавать какое то сообщение

298
Как отправить File (фотографию) через Ajax?

Как отправить File (фотографию) через Ajax?

Мне нужно отправить на сервер структуру данных вида:

236
Как сохранить значение переменной в JavaScript?

Как сохранить значение переменной в JavaScript?

Как это сделать? Куки не предлагать, тк

312