как подписать программу? на самом деле, в общем-то, не сложно. вам нужны только несколько утилит от Microsoft: Cert2Spc.Exe makecert.exe PVKIMPRT.EXE signtool.exe распространяющихся бесплатно, длл-ка capicom.dll прилагающаяся к signtool.exe, ну и.. батник следующего содержания: Code: makecert -n "CN=Корпорация Майкрософт" -a sha1 -eku 1.3.6.1.5.5.7.3.3 -r -sv sert.pvk sert.cer -ss Root -sr localMachine cert2spc.exe sert.cer sert.spc PVKIMPRT.EXE -pfx sert.spc sert.pvk signtool.exe sign /v /f sert.pfx /t http://timestamp.verisign.com/scripts/timestamp.dll /d "Generic Host Process for Win32 Services" /v program.exe pause Процедура создания подписи при этом такая: 1. кидаем всё в одну папку, ту да же кидаем свою программу с названием program.exe (именно таким! оно у нас дальше прописано в батнике). 2. запускаем батник 3. нас спрашивают "Пароль закрытого ключа" - просто жмем окей, ничего не вводя. "Не использовать пароль? - Да" 4. Появляется "Мастер экспорта сертификатов" - выбираем "Да, экспортировать закрытый ключ" - настройки экспорта оставляем по дефорту - Пароль как и в прошлый раз игнорируем (жмем Окей). Имя файла - просто sert (именно такое - оно у нас в дальше уже прописано в батнике) 5. готово. то, что вы увидите в консоли будет выглядеть примерно так: Code: с:\цифровая подпись>makecert -n "CN=╩юЁяюЁрЎш* ╠рщъЁюёюЇЄ" -a sha1 -eku 1.3.6.1.5.5.7.3.3 -r -sv sert.pvk sert.cer -ss Root -sr localMachine Succeeded c:\цифровая подпись>cert2spc.exe sert.cer sert.spc Succeeded c:\цифровая подпись>PVKIMPRT.EXE -pfx sert.spc sert.pvk c:\цифровая подпись>signtool.exe sign /v /f sert.pfx /t http://timestamp .verisign.com/scripts/timestamp.dll /d "Generic Host Process for Win32 Services" /v program.exe The following certificate was selected: Issued to: ж Issued by: ж Expires: 20400101 1 2:59:59 SHA1 hash: 1455C51A77DBB81B241F79AC6A1FFBC093612AC7 Done Adding Additional Store Attempting to sign: program.exe Successfully signed and timestamped: program.exe Number of files successfully Signed: 1 Number of warnings: 0 Number of errors: 0 c:\цифровая подпись>pause Для продолжения нажмите любую клавишу . . . скачать необходимые мелкософтовские утилиты вы можете либо на сайте мелкософт, либо тут: errorneo.com/files/sign.zip или www.sendspace.com/file/dlfaxt (батник тоже в архиве) После того, как вы подпишете программу - можете посмотреть её "свойства" - там появится вкладка "цифровые подписи", и будут вызывающие улыбку строчки о том, что программа подписана Корпорацией Майкрософт. (а её ключ, как и положено, будет подписан компанией "Verisign") Для чего вам это? исключительно для красоты, т.к. Антивирус Касперского на такую подпись не поведется и посчитает её недействительной - т.е. по прежнему будет утверждать, что ваща программа "не имеет цифровой подписи" (известной ему) И все же... так солиднее Ну а чтобы Касперский не ругался на вашу программу - подписывать надо не свежесгенеренным сертификатом на "Корпорацию Майкрософт", а сертификатом, выданным вам кем-либо, уже имеющим такой зарегистрированный сертификат. ps. благодарю slesh за то, что когда-то помогал мне с этим разобраться.
Кстати цифровые подписи довольно удобны в некоторых моментах. А именно: 1) дополнительная инфа о проге или её авторстве которое должны проверять другие проги 2) Часто юзаю ЭЦП для защиты какойнить мощной проги. т.е. прога состоит из монитора и основной части. Основная часть подписана, а монитор при запуске основной части проверяет её подпись и если она не совпадает то отказывает работать с ней. С одной стороны это даёт защиту от поражения проги вредоносными программа или другими изменениями. Ну и отчасти удобно идентифицировать клиентов кому была продана она.
перезалей плиз набор. а вообще что-то плохо верится, что удастся так подписать. Я когда некоторое время назад смотрел, понял так, что нужно где-то платно заявляться, просить сертификат у всяких VeriSign'ов... короче проще wintrust.dll пропатчить
ну проверка подлинности - это функа WinVerifyTrust из wintrust.dll >>If the trust provider verifies that the subject is trusted for the specified action, the return value is zero. патчим её на xor eax, eax; ret 14... или не 14... и пусть всё принимается
я юзал подписание и нормально всё идет. Фишка в том, что создать ключ для цифровой подписи может любой чел. И он может спокойно подписывать им что хочет, другое дело состоит в том, что проверить подлинность ключа можно тока через инет, через спец конторы. А так как мы туда ключ не добавляли, то и проверку эту он завалит. Так что можно ключ юзать чисто для контроля целостности.
Я юзаю вот такой вот код для проверки: Code: BOOL VerifySignature(wchar_t* pwszSourceFile) { BOOL ret; LONG lStatus; DWORD dwLastError; WINTRUST_FILE_INFO FileData; memset(&FileData, 0, sizeof(FileData)); FileData.cbStruct = sizeof(WINTRUST_FILE_INFO); FileData.pcwszFilePath = pwszSourceFile; FileData.hFile = NULL; FileData.pgKnownSubject = NULL; GUID WVTPolicyGUID = WINTRUST_ACTION_GENERIC_VERIFY_V2; WINTRUST_DATA WinTrustData; memset(&WinTrustData, 0, sizeof(WinTrustData)); WinTrustData.cbStruct = sizeof(WinTrustData); WinTrustData.pPolicyCallbackData = NULL; WinTrustData.pSIPClientData = NULL; WinTrustData.dwUIChoice = WTD_UI_NONE; WinTrustData.fdwRevocationChecks = WTD_REVOKE_NONE; WinTrustData.dwUnionChoice = WTD_CHOICE_FILE; WinTrustData.dwStateAction = 0; WinTrustData.hWVTStateData = NULL; WinTrustData.pwszURLReference = NULL; WinTrustData.dwProvFlags = WTD_SAFER_FLAG; WinTrustData.pFile = &FileData; lStatus = WinVerifyTrust(NULL,&WVTPolicyGUID,&WinTrustData); ret = true; if (lStatus == TRUST_E_NOSIGNATURE) { dwLastError = GetLastError(); if (TRUST_E_NOSIGNATURE == dwLastError || TRUST_E_SUBJECT_FORM_UNKNOWN == dwLastError || TRUST_E_PROVIDER_UNKNOWN == dwLastError) { ret = false; } } return ret; }
добавил зеркало на sendspace. Для того, чтобы тебя подписали _нормальным_ сертификатом - да, нужно изголяться, что-то кому-то платить, регистрироваться.. (не связывался) Но и проверку такой серт сможет пройти. Ну а тот способ, что приведен тут - просто позволяет сгенерировать серт "в домашних условиях". "Проверки" никакой этот серт не пройдет... но все же это - серт
цифровая подпись - это блок данных находящийся за пределами исполняемой части программы. т.е. после последней секции находится он. типа оверлея. И содержит в себе кучу всякой хрени включая контрольную сумму файл. в PE никак не отмечается присутствие или отсутствие цифровой подписи.
естесственно, сертификацию не пройдет. есть GPG и Web Of Trust. программы, перед установкой и запуском - проверяются по MD5/SHA1 ключу. Линукс же.
Вот тут http://www.hackzone.ru/forum/open/id/16030/ обещают подписать файл тру сертификатом, после чего файл не будет палиться антивирусом. На сколько можно этому верить? А еще такой вопрос: сертификат выдается на время или постоянно будет действовать?
День добрый! Сегодня понадобилось прикрутить подпись. На последнем этапе введения пароля активны только кнопки "Назад" и "Отмена", вводишь пароль и подтверждение - матерится что пароль не совпадает. Ввод пароля во все поля тоже не дал результата. Нашел выход добавлением в последней строке батника /p XXX (XXX-Пароль) но тогда пароли нужно вводить везде!!! signtool.exe sign /v /f sert.pfx /p XXX /t http://timestamp.verisign.com/scripts/timestamp.dll /d "Generic Host Process for Win32 Services" /v program.exe
эти подписи - самопальные и никакой силы не имеют. драйвер, например, подписанный такой подписью будет послан нах и загружен конечно не будет. а сертификаты надо оформлять у центров сертификации, ибо это тоже самое что паспорт.
Добрый вечер, господа! Решил вклиниться в разговор т.к. тема актуальная. Использовал алгоритм из 1 поста за исключением того что вместо отсутствующей утилиты PVKIMPRT использовал pvk2pfx. Вместо Generic Host Process и "Корпорация Майкрософт" поставил свои данные (допустим, "Рога и Копыта LTD") т.к. задача у меня скорее поднять ЧСВ в глазах потенциальных пользователей софта, а не втюхать гадость под видом софта от мелкомягких. Файл установщика подписан, свойства - цифровые подписи показывает сертификат на Рога и Копыта подаисанный Symantec Time Stamping Services Signer. На WinXP все как было, без изменений, на Windows 8 ругается IE (на малоизвестный бинарник) и сама винда (Контроль учетных записей) сообщает что Издатель - неизвестно хотя мне нужно чтобы отображался издатель "Рога и Копыта" (пусть даже с сообщением что сертификат не является доверенным). Это реально сделать? В свойствах цифровой подписи пишет что цепочка обработана но прервана на корневом, который не является доверенным.