我有一个二进制文件需要混淆并分发给用户。假设我使用未经混淆的二进制文件来使用现成的.NET二进制格式化程序序列化数据,那么我们能否使用混淆后的二进制文件对数据进行反序列化?
我想分发混淆后的二进制文件和序列化数据。如果上述问题的答案是肯定的,我可以将序列化数据分享给所有用户。否则,我将不得不为每个用户提供单独的序列化数据。
我有一个二进制文件需要混淆并分发给用户。假设我使用未经混淆的二进制文件来使用现成的.NET二进制格式化程序序列化数据,那么我们能否使用混淆后的二进制文件对数据进行反序列化?
我想分发混淆后的二进制文件和序列化数据。如果上述问题的答案是肯定的,我可以将序列化数据分享给所有用户。否则,我将不得不为每个用户提供单独的序列化数据。
似乎存在混淆二进制文件和序列化数据的混淆。如果您使用默认的序列化程序对类进行序列化,则该序列化数据中将使用类名和属性/字段值作为字符串。因此,如果您混淆了二进制文件,则使用该二进制文件的序列化数据将具有混淆的名称。如果您执行以下任何操作,则非混淆的二进制文件将无法读取由混淆的二进制文件创建的序列化数据:
以下是一些解决此问题的选项:
我已经有一段时间没有使用这个方法了(所以您需要验证它是否适用于您的情况),但是如果您使用二进制格式化程序,则可以通过提供处理SerializationInfo和StreamingContext的构造函数来控制数据在序列化文件中的存储方式。如果您搜索示例,您应该会找到一个(这是我找到的一个:将对象序列化到文件)。您可能不会找到很多关于使用此方法的新文章,因为大多数人不认为它非常有趣,但它确实是指定如何使用二进制格式化程序保存和重新填充类的最简单方法。
在您必须实现的构造函数中,您可以使用字符串作为键/值对进行序列化。在混淆中,这些字符串可能会被加密(这是可以的),并且属性设置语句将被重命名并与您的混淆类/成员名称保持同步-因此它应该适用于混淆和非混淆的程序集。
另一种选择是排除要序列化的类不参与混淆,并仅加密数据文件。