Подпишите или пароль любой exe в c #

У меня есть исполняемые файлы, написанные на C #. Я хочу попробовать эту ситуацию в своей службе Windows. Обычно мы запускаем исполняемый файл в нашей программе, используя следующий код:

Process process = new Process(); 
process.StartInfo.FileName = applicationpathandname.exe; 
process.Start();

Я хочу сравнить свой исполняемый файл на предмет наличия знака или пароля перед его запуском. Если знак или пароль не совпадают, необходимо выйти из основной программы в службе Windows. Итак, мой псевдокод будет таким:

*/load exe
*/compare sign or password of my assembly
*/if match start exe 
*/else exit main program

По сути, у меня есть два вопроса:

  1. Могу ли я подписать или защитить паролем любой исполняемый файл или сборку?
  2. Могу ли я получить доступ к этому исполняемому файлу знака или пароля в другой моей программе на C #?

person engcmreng    schedule 25.08.2011    source источник
comment
вы хотите зашифровать exe? конечно, вы можете это сделать (зашифровать exe-конец, расшифровать его перед его вызовом), но зачем вам это? Это ваш сервер, зачем защищать бывших от собственной службы?   -  person Random Dev    schedule 25.08.2011
comment
MSFT имеет signtool для выполнения фактической подписи кода, и его можно автоматизировать. Проверка подлинности подписи выполняется ОС при запуске приложения.   -  person    schedule 25.08.2011
comment
о ... Думаю, я понял - вы хотите запускать только бывших, вы можете быть уверены, что все в порядке - например, ситуация с XBox, WinPhone и т. д., где программы должны быть подписаны Microsoft для запуска на устройствах - Правильно?   -  person Random Dev    schedule 25.08.2011
comment
Точно вы сказали, что CKoenig, я хочу начать, могу быть точно уверен, что подписанный exe, сначала я добавил файлы snk в свои решения, но я не могу прочитать, что файлы snk включают пароль.   -  person engcmreng    schedule 25.08.2011


Ответы (2)


Я не уверен, правильно ли я понял ваши вопросы, но я постараюсь изо всех сил.

Вы можете strong-name создавать свои сборки с помощью sn инструмента. Вот краткое руководство: http://sharpertutorials.com/creating-strong-named-assemblies/ введите здесь описание ссылки

Затем вы можете добавить созданный файл snk к своим проектам в решении. как другой вариант, вместо того, чтобы добавлять его вручную в

[assembly: AssemblyKeyFile("c:\\mykey.sn")]

атрибут (как сказано в статье), вы можете еще проще определить его в свойствах каждого проекта на вкладке Подписание => Подписать сборку и ввести путь в ваш snk файл.

После строгого именования сборок вы можете выполнить некоторые проверки его пароля:

Проверка сборки на наличие строгого имени

person Jens H    schedule 25.08.2011
comment
спасибо за ваш ответ, но это очень дорого для меня, потому что, когда у меня будет больше (например, 10 или более) исполняемых файлов, это решение принесет столько веса ключа, так что этот способ привязки к сохранению открытых ключей. - person engcmreng; 26.08.2011
comment
Вам не нужен новый ключ для каждой сборки! Желательно, чтобы вы создавали только один, чтобы всегда подписывать их, чтобы убедиться, что это вы их создали. Или вы создаете по одному для каждого приложения, если хотите различать их. - person Jens H; 26.08.2011

Я думаю, что в конце концов вы хотите хешировать полный exe с помощью SHA или другого криптографического хеша и использовать некоторый алгоритм шифрования (может быть симметричным, как вы сами подписываете, я думаю) со значением соли для шифрования этого хеша. Затем либо упакуйте содержимое файлов вместе с зашифрованным хешем и солт-значением в другой файл, либо добавьте только хэш + соль в дополнительный файл, помимо exe.

Во время выполнения снова сделайте то же самое: получите байты хэша exe (или из объединенного файла) и сравните, совпадает ли хеш с дешифрованным хешем.

Если да, вы можете запустить программу, если нет, то происходит какая-то неприятность или некоторые байты перевернуты;)

person Random Dev    schedule 25.08.2011
comment
CKoenig; путь ближайший, что я хочу. Но я сомневаюсь в этом, могут ли мои исполняемые файлы иметь такой же хеш, если это не такая дорогая загрузка, потому что я должен сохранять хеш-значения для своих исполняемых файлов таким образом. - person engcmreng; 26.08.2011
comment
нет, если вы зашифруете их, вы можете сохранить их рядом с исполняемым файлом (или записать их вместе с exes-байтами в новый файл) - вам просто нужно проверить перед запуском - person Random Dev; 26.08.2011