Должен ли я беспокоиться о декомпиляции моего программного обеспечения?

Я пытаюсь создать часть программного обеспечения, которая позволяет пользователю входить в систему и передавать поток байтов [] DLL для использования для инъекции. Например

public static byte[] getDLL()
{
using (WebClient wc = new WebClient())
{
Uri url = new Uri("http://mysite/dll.dll");
return wc.DownloadData(url);
}
}

Мне удалось сделать это в C # с использованием Visual Studio. Однако вы можете легко декомпилировать программу и заставить ее создавать dll в определенном месте на вашем компьютере, что приводит к ее утечке. И я почти не могу это предотвратить.

Буду ли я лучше использовать язык, который сложнее декомпилировать, например, скажем, C ++ или C, или я просто столкнусь с той же проблемой, что и язык, который я использую? И это действительно стоит усилий.

-1

Решение

Мне не очень понятен первый абзац вашего вопроса. Но вот вам идея.

Простая декомпиляция не является проблемой, если посторонние не могут использовать сгенерированный код для захвата вашей сборки.

Насколько я понимаю, существует множество инструментов для «разумной декомпиляции» или просмотра содержимого сборок .NET.
Если вы используете C ++ или C, существуют декомпиляторы. Исходный код, созданный ими, не является точным и требует много ручной работы.

Во-вторых, если вы использовали родной язык, такой как C или C ++, у него много уязвимостей. Вы должны использовать все передовые практики, чтобы избежать подобных проблем. https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=637

Есть инструменты, позволяющие избежать декомпиляции. ты можешь гуглить Obfuscator, некоторые известные — Dotfuscator, Secure Team.

А также вы можете подумать об изменениях архитектуры проекта. такие как включение кода DLL в основной EXE и т. д.

Также вы можете использовать механизм генерации ключей для проверки DLL. Сразу после загрузки DLL-файла вызовите общую функцию в DLL и получите one time key и проверить.

-2

Другие решения

Вы не можете предотвратить декомпиляцию ничего, ни C #, ни C ++, ни чего-либо еще.
Такие языки, как C ++, требуют больше ручной работы по сравнению, например, с. C # и обфускаторы могут усложнить понимание кода, но все просто замедляет то, что делает, вместо того, чтобы предотвращать это.
(И такие вещи, как DLL и шифрование не помогут вообще для защиты кода)

Если проблема в том, что какой-то пользователь программы может увидеть полный код, вы делаете что-то не так. Любые секреты, такие как пароли и т. Д., Не принадлежат файлам, которые получает пользователь, но на каком-то сервере, контролируемом вами, и доступны для пользователя только через сетевые подключения и т. Д.

2

По вопросам рекламы [email protected]