Я регулярно использую цифровую подпись
для удостоверения исполняемых файлов перед
их загрузкой на сайт. Когда вы подписываете
файл, вы шифруете хеш файла при помощи
своего приватного ключа, любой посетитель
сайта может расшифровать хеш при помощи
открытого ключа и сравнить его с полученным.
Процесс подписи осуществляется при помощи
утилиты Signtool.exe,
поставляемой с Platform SDK и .NET Framework. Передаем
ей подписной сертификат, закрытый ключ и
указываем на целевой файл - все остальное
утилита делает сама.

В один из дней я захотел подписать
обновленную утилиту Sysinternals и, к своему
удивлению, натолкнулся на ошибку:

Прошла почти неделя со времени последнего
использования утилиты, однако я не мог
вспомнить никаких существенных изменений в
системе, которые бы могли привести к такой
ошибке. Однако любой, использующий
компьютер знает, что повреждения системы
возникают случайным образом в совершенно
произвольные моменты времени. Я же пожелал
узнать причины сбоя и разрешить проблему.

Первым делом я решил найти упоминаемую
capicom.dll при помощи встроенной утилиты Where
(она присутствует в Server 2003 SP1, 64-битной Windows XP
и Windows Vista), которая ищет указанный файл в
каждой директории, указанной в переменной
среды PATH. Эта переменная используется
как раз для поиска DLL файлов, так что я
ожидал подтверждения того, что capicom.dll
потеряна:

Поиск это и показал, однако я вспомнил, что
работаю на 64-битной системе, а Signtool 32-битное
приложение и Where.exe в таком виде не смотрит в
директории %SystemRoot%\Syswow64, в которой
сохраняются все 32-битные DLL файлы. Когда я
залез туда своими руками, то благополучно
нашел злосчастную capicom.dll.

Таким образом, остался главный вопрос - где
же на самом деле ищет Signtool свою DLL? У меня
есть утилита Process
Monitor
, которая является прекрасным
инструментом для ответа на подобного рода
вопросы. Я запустил ее, настроил фильтр на
все пути, заканчивающиеся capicom.dll, и снова
запустил на выполнение нужную мне
процедуру. Вызванная ею ошибка и показала
искомое:

Очевидно, что Signtool ищет capicom.dll всего двух
местах: поддиректориях Microsoft Shared папки Common
Files и \Bin директории, где непосредственно
располагалась сама Signtool.

Для устранения ошибки я просто скопировал
файл из \Windows\Syswow64 в \Bin, и все заработало.

63ENredline

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии