Доброго времени суток! а никто случайно не встречал какую-нить утилиту (ну или просто набор исходников) для проверки САБЖа у РЕ фалйов? нужно разобраться как такое сделать без использования виндовой CryptoAPI (желательно на С) если вдруг у кого-то есть ссылка на полезные доки/статьи, буду благодарен!
The ChkTrust program checks the validity of a signed file by: 1. Extracting the PKCS #7 signed-data object. 2. Extracting the X.509 certificates from the PKCS #7 signed-data object. 3. Computing a new hash of the file and comparing it with the signed hash in the PKCS #7 object. If the hashes agree, ChkTrust then verifies that the signer's X.509 certificate is traceable back to the root certificate and that the correct root key was used. If all these steps are successful, it means that the file has not been tampered with, and that the vendor who signed the file was authenticated by the root authority. Форматы стандартизированые (исходники должны быть), какие участки PE попадут в хеш надо см. в отладчике ф-цию WinVerifyTrust
разумеется, что разобраться в проверке я и предлагаю ему - посмотреть как это делает MS (основной алгоритм был приведен выше), я сам когда-то там рылся т.е. запустить в отладчике ChkTrust (это можно сказать - "пустой" экзешник с вызовом одной ф-ции), поставить бряк на WinVerifyTrust и потом на бумажечку выписывать подробный алгоритм, по моей памяти он должен быть примерно таким: - размапить или прочитать PE (MSPECOFF.PDF) - вытянуть из PE_директории_сертификата PKCS #7 - вытянуть из PKCS #7 сертификат X.509 - вытянуть из сертификата X.509 публичный RSA ключ - вытянуть из PKCS #7 ЭЦП - расшифровать из ЭЦП хеш1 используя RSA ключ - посмотреть в отладчике какие участки PE попадают в хеш-объект - посчитать от них MD5 или SHA1 - сверить посчитаный хеш2 с хешем1 - если ок, то ещё сверить подпись сертификата X.509 с корневым (тем кому MS доверяет их подписывать) * - на PKCS #7, X.509, RSA, MD5 или SHA1 описание и исходники без cryptoapi должны в сети быть
bogrus: огромное спасибо! этот как раз то, что мне было нужно... пинок в нужную сторону иногда оказывается намного полезнее, чем готовое решение! спасибо!