Сериализация и обфускация в .NET - PullRequest
10 голосов
/ 06 октября 2011

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

Я хочу раздать запутанные двоичные файлы вместе с сериализованными данными.Если ответ на поставленный выше вопрос - «да», я могу поделиться сериализованными данными среди пользователей.В противном случае мне пришлось бы предоставлять индивидуальные сериализованные данные каждому пользователю.

Ответы [ 3 ]

11 голосов
/ 13 октября 2011

Кажется, что существует путаница между запутанными двоичными и сериализованными данными.Если вы сериализуете свой класс с использованием сериализаторов по умолчанию, то имя класса и значения свойства / поля используются в качестве строк в этих сериализованных данных - поэтому, если вы запутываете свой двоичный файл, то сериализованные данные, использующие этот двоичный файл, будут иметь запутанные имена и вашиЗапутанный двоичный файл не сможет прочитать сериализованные данные, созданные вашим запутанным двоичным файлом, если вы выполните одно из следующих действий:

  1. Использовать переименование класса в сериализованном классе
  2. Использовать переименование члена вВаш сериализованный класс

Вот некоторые варианты, чтобы обойти это:

  1. Я не использовал это некоторое время, (так что вы захотите проверить этоработает в вашей ситуации) но если вы используете двоичный форматер, то вы можете контролировать, как данные хранятся в сериализованном файле, предоставляя конструкторы, которые обрабатывают SerializationInfo и StreamingContext.Если вы поищете образец для поиска, вы должны найти его (вот что я нашел: Сериализация объектов в файл ).Вы можете не найти много новых статей об использовании этого метода, так как большинство людей не находят его очень интересным, однако это действительно самый простой способ указать, как ваш класс сохраняет себя и заполняет себя, используя двоичный форматер.

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

  2. Еще один вариант исключения класса, который вы сериализуете, из запутывания и просто шифрование файла данных.

3 голосов
/ 12 октября 2011

неправильно прочитал вопрос.Когда двоичный файл запутан, вы должны быть осторожны при изменении имен классов / пространств имен и т. Д. Это будет разрывать не только между обфусцированными / не запутанными двоичными файлами, но и между различными версиями в целом.

Этот продукт, по-видимому, исключает классыкоторые помечены как: http://www.ssware.com/cryptoobfuscator/obfuscator-net.htm (это не рекомендация, я никогда не пользовался - вам придется протестировать ее и посмотреть, стоит ли она того).

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


[Оригинальный ответ]

Почему вы запутываете данные?Я могу только представить, что это мешает кому-то редактировать его или запрещает кому-либо читать контент.

Если это мешает кому-то редактировать его, то могу ли я предложить вам включить хэш данных, а затем нене пытайтесь запутать его.

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

Существует множество примеров того и другого, но если вы хотитепример, дайте мне знать.

2 голосов
/ 12 октября 2011

Вы пробовали использовать EazFuscator ?Это позволяет использовать некоторые собственные схемы переименования, чтобы в определенных случаях сохранить точные имена, например, внешние методы.Это не соответствует последним версиям .NET 4.0+ или WCF.

Вы также можете использовать .NET Reactor , еще один сервис-обфускатор, который выходит далеко за пределы EazFuscator и Dotfuscator ввозможности, но это имеет свою стоимость.

.NET Reactor также позволяет шифровать код вместо обфускации, что, как ранее предлагалось, решит проблему.

...