Q: Win32 CryptAPI

Граждане программисты,

а ткните носом, как проверить валидность подписи EXE-файла (MS Authenticode) без WinVerifyTrust, а с использованием только CryptoAPI. Ведь должно же быть можно?

Comments

Это известное (мне) уже место, но оно не про то.
You can use the WinVerifyTrust() API to verify an Authenticode signed executable.
Although a signature is verified, a program may also have to do the following:

И таки этот код (уверенно) возвращает подробности про сертификат даже если целостность самого EXE была нарушена.

P.S. А спрашиваю я по той причине, что вот есть юзер (адын штук) у которого WinVerifyTrust похоже не работает (выясняем подробности), а проверка подписи "через свойства файла" - работает ок.

Но попробую, да, через CryptMsgControl c флагом verify, интересно ж

Закончилось чем?
Я видел тут ещё была запись про антивирь(?).Я б копнул бы п посмотрел бы п, если этот самый антивирь какой хук на системколл или библиотечный ставит может.

Пока не закончилось (это у клиента).

Но. У этого клиента WinVerifyTrust возвращает 0x80096005, что означает "не могу проверить timestamp" (до вчера я не знал что там за код ошибки и предполагал что WinVerifyTrust не работает по каким-то другим причинам т.е. надо писать свой :)

Отчего моя научная мысль пока выдвинула гипотезу, что там очень старый Win7, который вообще никогда не обновлялся - и проблема решается просто через Dual Sign, SHA-256+SHA1.

Если это решение поможет (а оно хорошо тем, что программировать ничего не надо) - то и проблема снимется.

Закончилось вот чем: у клиента Win7, которая never connected to Internet, соответственно без обновлений вовсе.
Соответственно, SHA-256 валидируется даже, а вот RFC-3xxx (забыл номер) timestamp - уже нет.

Проблема решена через dual sign приложения (хотя казалось бы, оно Win7+, т.е. у вменяемых юзеров SHA256 достаточно, однако вот нашелся герой).