System.InvalidCastException при десериализации файла с экземпляром сборки потока памяти приложения exe - PullRequest
0 голосов
/ 10 февраля 2020

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

У меня проблема в том, что я не могу открыть сериализованные файлы, сохраненные с использованием незашифрованного .exe, с экземпляром дешифрованного приложения, загруженного непосредственно в память с помощью моей оболочки выполнения ... Он возвращает исключение System.InvalidCastException из-за разницы в контексте.

Чтобы прояснить ситуацию, я выполнил следующие шаги:

  1. Разработка приложения Main C# и создание файла .exe
  2. Разработка * Код 1027 * для шифрования основного приложения .exe для развертывания
  3. Разработка оболочки выполнения C#, которая расшифровывает файл, получает сборку основного приложения из декодированного байтового массива и вызывает метод "Main", Все, что выполняется без промежуточного файла, чтобы сохранить незащищенное приложение "Хидде n "

Таким образом, в этот момент я могу запустить свое главное приложение, начиная с зашифрованного файла, без какого-либо доступа к моей исходной незашифрованной программе. Но когда я хочу десериализовать файл, созданный с помощью локальной версии моего исходного файла .exe, я получаю следующее сообщение:

System.InvalidCastException: '[A] нельзя преобразовать в [ Б]. Тип, следующий из ', Version = 0.0.0.0, Culture = нейтральный, PublicKeyToken = null' в 'Контексте по умолчанию в местоположении', Version = 0.0.0.0, Culture = нейтральный, PublicKeyToken = null 'в контексте' LoadNeither ' массив байтов.

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

Большое спасибо за Ваша помощь и время.

С уважением

1 Ответ

0 голосов
/ 11 февраля 2020

Я наконец нашел выход из этой ситуации.

Я создал DLL, содержащую мой сериализованный / десериализованный объект. Этот способ может не защищать содержимое библиотеки DLL, но, по крайней мере, он защищает «мозг» приложения, который содержится в зашифрованном .exe.

С уважением

...