Привет.
Нужен быстрый способ проверки цифровой подписи файла на Win32/64. Условия следующие:
1. Высокая скорость работы.
2. Проверка подписи как в самом файле, так и в отдельном .cat-файле.
3. Крайне желательно чтобы не приходилось ходить в инет для проверки.
. Недостатки первого способа описаны по второй ссылке внизу, а второй способ настолько тормозной, что ну просто слов нет, и к тому же в инет зачем-то лезет.
Вот в Process Explorer'е и в Autoruns'е есть кнопка Verify, она как раз и делает то, что мне нужно, удовлетворяет всем 3 пунктам. Вопрос — кто-нибудь знает, как они это делают?
Re: Проверить подпись файла как Process Explorer
От:
Аноним
Дата:
19.10.08 15:07
Оценка:
Process Explorer использует именно WinVerifyTrust
Re[2]: Проверить подпись файла как Process Explorer
А>Process Explorer использует именно WinVerifyTrust
Ну я в общем с этим не спорю, но вопрос — как именно? Хотелось бы подробностей. Может завалялся у кого исходник какой-нибудь старой Process Explorer или Autoruns? Киньте на мыло, плиз.
>Нужен быстрый способ проверки цифровой подписи файла на Win32/64.
>Вот в Process Explorer'е и в Autoruns'е есть кнопка Verify, она как раз и делает то, что мне нужно, удовлетворяет всем 3 пунктам. Вопрос — кто-нибудь знает, как они это делают?
Да, спасибо, оно самое. Вдогонку, не знаешь по случаю как из этой подписи извлечь имя подписавшего? Т.е. например строку типа "Microsoft Windows Component Publisher", "Mozilla Corporation" или "ACD Systems International Inc".
Здравствуйте, x64, Вы писали:
x64>Вдогонку, не знаешь по случаю как из этой подписи извлечь имя подписавшего? Т.е. например строку типа "Microsoft Windows Component Publisher", "Mozilla Corporation" или "ACD Systems International Inc".
Wintrust.CryptCATAdminAcquireContext
kernel32.CreateFileA
Wintrust.CryptCATAdminCalcHashFromFileHandle
kernel32.CloseHandle
Wintrust.CryptCATAdminEnumCatalogFromHash
Wintrust.CryptCATAdminReleaseContext
Wintrust.WinVerifyTrust
WINTRUST_DATA WVTData;
if (WinVerifyTrust(NULL, WINTRUST_ACTION_GENERIC_VERIFY_V2, &WVTData) == NULL)
{
for (i ...)
{
Wintrust.WTHelperProvDataFromStateData
Wintrust.WTHelperGetProvSignerFromChain
//CRYPT32.CertNameToStrA - имя в формате LDAP т.е. "C=US, S=Washington, L=Redmond, O=Microsoft Corporation, CN=Microsoft Windows Component Publisher"
//далее идет разбор строки оставляют только "Microsoft Windows Component Publisher"
}
//потом еще раз вызываем
WinVerifyTrust(NULL, WINTRUST_ACTION_GENERIC_VERIFY_V2, NULL);
}