Короткий ответ таков: кроме очевидных вещей, вы мало что можете сделать.
Очевидные вещи, которые вы, возможно, захотите рассмотреть (примерно в порядке увеличения сложности и уменьшения вероятности):
- Статическая ссылка, поэтому нет DLL для атаки.
- Уберите все символы.
- Используйте файл .DEF и библиотеку импорта, чтобы иметь только анонимный экспорт, известный только по их идентификаторам экспорта.
- Храните библиотеку DLL в ресурсе и открывайте ее в файловой системе (под соответствующим неясным именем, возможно, даже генерируемым во время выполнения) только при запуске.
- Скрыть все реальные функции за фабричным методом, который обменивает секрет (лучше, доказательство знания секрета) для таблицы указателей функций на реальные методы.
- Используйте методы анти-отладки, заимствованные из мира вредоносных программ, для предотвращения обратного инжиниринга. (Обратите внимание, что это, вероятно, даст вам ложные срабатывания от AV-инструментов.)
Несмотря на это, достаточно решительный пользователь все еще может найти способы его использования. Приличный дизассемблер быстро предоставит всю необходимую информацию.
Обратите внимание, что если ваша DLL на самом деле является COM-объектом или, что еще хуже, сборкой CLR, то существует огромное количество информации о типах среды выполнения, которую вы не можете удалить, не нарушив ее предполагаемого использования.
РЕДАКТИРОВАТЬ: Так как вы пометили, чтобы подразумевать, что C # и .NET являются средой, а не чистой Win32 DLL, написанной на C, тогда я действительно должен изменить вышеприведенное на «Вы не можете Но ... "
В течение длительного времени существует рынок инструментов для запутывания, чтобы иметь дело со средами, в которых доставка компилируемого источника является обязательной, но вы не хотите предоставлять полезный источник. Есть продукты C #, которые играют на этом рынке, и похоже, что по крайней мере один присоединился.
Поскольку загрузка сборки требует от платформы очень больших усилий, вполне вероятно, что есть биты разрешений, которые обеспечивают некоторый контроль для честных поставщиков и потребителей сборок. Я не видел никакого обсуждения реальной безопасности, обеспечиваемой этими методами, и просто не знаю, насколько они эффективны против решительной атаки.
Многое будет зависеть от вашего варианта использования. Если вы просто хотите предотвратить случайное использование, вы можете найти решение, которое подходит именно вам. Если вы хотите защитить ценные торговые секреты от обратного проектирования и повторного использования, вы, возможно, не будете так счастливы.