В настоящее время я работаю над приложением, которое создает / открывает файлы с использованием двоичной сериализации. Чтобы защитить свою работу, я думал о шифровании exe-файла (используя ключ, хранящийся в скрытом защищенном месте доступа) и обертке выполнения, которая расшифровывает файл и загружает приложение непосредственно в память.
У меня проблема в том, что я не могу открыть сериализованные файлы, сохраненные с использованием незашифрованного .exe, с экземпляром дешифрованного приложения, загруженного непосредственно в память с помощью моей оболочки выполнения ... Он возвращает исключение System.InvalidCastException из-за разницы в контексте.
Чтобы прояснить ситуацию, я выполнил следующие шаги:
- Разработка приложения Main C# и создание файла .exe
- Разработка * Код 1027 * для шифрования основного приложения .exe для развертывания
- Разработка оболочки выполнения C#, которая расшифровывает файл, получает сборку основного приложения из декодированного байтового массива и вызывает метод "Main", Все, что выполняется без промежуточного файла, чтобы сохранить незащищенное приложение "Хидде n "
Таким образом, в этот момент я могу запустить свое главное приложение, начиная с зашифрованного файла, без какого-либо доступа к моей исходной незашифрованной программе. Но когда я хочу десериализовать файл, созданный с помощью локальной версии моего исходного файла .exe, я получаю следующее сообщение:
System.InvalidCastException: '[A] нельзя преобразовать в [ Б]. Тип, следующий из ', Version = 0.0.0.0, Culture = нейтральный, PublicKeyToken = null' в 'Контексте по умолчанию в местоположении', Version = 0.0.0.0, Culture = нейтральный, PublicKeyToken = null 'в контексте' LoadNeither ' массив байтов.
Можно ли было бы пропустить контекст во время десериализации, чтобы обеспечить обратную совместимость с файлами, сохраненными с использованием незашифрованных версий моего приложения?
Большое спасибо за Ваша помощь и время.
С уважением