Я наткнулся на эту фразу в сети:
C# is probably not the best choice for a system-level application like this. I believe plain C++ is much better here as you will need to do lots of low-level API calls.
Я искал программы безопасности, созданные с использованием C#, такие как брандмауэр, родительский контроль, антивирус, антишпионское ПО и т. д.
Итак, правда ли, что C#, вероятно, не лучший выбор для приложения безопасности?
[править]
Я изучал программы безопасности C# и нашел 2 программы:
1) Keepass (http://keepass.info/compare.html) впечатляющий менеджер паролей, который переходит с C++ на C# !!!
2) Снова домой (http://www.codeplex.com/totty530) - сниффер пакетов, созданный с использованием C#
[/редактировать]





Такие вещи, как брандмауэры, часто нуждаются в подключениях к средствам уровня ядра, которые (тривиально) не предоставляются управляемыми средами выполнения, такими как .NET. Вы можете перепрыгивать через обручи, чтобы использовать язык C# для подобных вещей, но тогда, что ж, вы будете прыгать через обручи.
Если вы пишете брандмауэр или антивирусное программное обеспечение, как в вашем примере, его проще написать на C++, поскольку оно может получить доступ к вещам, для которых C# не был создан. C# более безопасен для написания приложений, чем C++, поскольку в нем сложнее все испортить.
C# подразумевает, что вы используете платформу .Net. Это добавляет в ваше приложение много кода, над которым у вас мало контроля. Если в этой версии .Net есть угроза безопасности, теперь она в вашем приложении.
То же самое может быть верно для любых дополнительных фреймворков, которые вы используете с C++, но также можно писать код C++ без каких-либо дополнительных фреймворков.
Однако ни один из способов не защищает от добавления небезопасного кода.
"Если в этой версии .Net есть угроза безопасности, теперь она в вашем приложении" ---> Я считаю, что это редкие версии .net с проблемами безопасности ... но такая возможность существует
Это редко - но если бы я создавал что-то, что я продавал на рынке с его превосходной безопасностью, полагаться на сторонние библиотеки становится обузой. Независимо от того, кто их предоставил.
Может, стоит взглянуть на C++ / CLI. Он будет предлагать удобства .NET, но при этом обеспечит низкоуровневый доступ, который может вам понадобиться с C++.
Что ж, если вы работаете в службе безопасности, вам наверняка понадобится пистолет. C++ - лучшее оружие, чем C#, но будьте осторожны - с C++ намного проще прострелить себе ногу.
Дать согласие. Многие из функций, которые вы хотели бы вызвать, будут функциями, которые вам нужно будет вызывать с помощью P / Invoke из C#. Обратные вызовы из ОС в вашу программу C# тоже нехорошие, с такими вещами, как System.Runtime.InteropServices.CallingConvention.
Теперь, для таких вещей, как вышеупомянутые менеджеры паролей, это может не иметь большого значения. На самом деле это просто модная база данных с умными функциями импорта / экспорта / хранения / преобразования. Тем не менее, было бы полезно, если бы они могли взаимодействовать с другими программами. Вы просто не можете внедрить C# DLL в случайные процессы.
Приложения .Net "из коробки" полностью обратимы к читаемому коду. (Попробуйте: http://www.reflector.net/) Только комментарии в коде теряются! ;) Если имеет значение, могут ли люди легко заглянуть под капот вашего приложения. Вы будете в большей безопасности с C / C++, так как его немного сложнее реконструировать. Но обфускаторы или упаковщики .Net для вашего приложения C / C++ могут значительно усложнить реверс-инжиниринг в ваших приложениях. Следовательно, это никогда не бывает невозможным. Но будьте осторожны. Некоторые обфускаторы .Net плохо обрабатывают сервисы SOAP WSDL в вашем коде и вызывают ошибки, просто запутывая ваш код!
«Системный уровень»! = «Безопасность». Кроме того, вы можете писать небезопасные программы на любом языке.