2011-10-06 35 views
10

我有一个二进制文件,我想混淆并向用户分发。让我们假设我使用我的二进制文件的未混淆版本来使用现成的.NET二进制格式化程序对数据进行序列化。那么我们可以使用混淆的二进制对数据进行抗病毒处理吗?在.NET中的序列化和模糊处理

我想将混淆的二进制文件与序列化的数据一起发出。如果上述问题的回答为 是,我可以在用户之间共享序列化的数据。否则 我将不得不为每个用户提供单独的序列化数据。

+0

请参阅http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts/ –

+0

我没有downvote。 –

回答

3

误读了这个问题。当二进制文件被混淆时,当类名称/命名空间发生变化时,你需要小心。这不仅会在混淆/非混淆的二进制文件之间崩溃,而且会在不同版本之间崩溃。

该产品显然不包括标记为:http://www.ssware.com/cryptoobfuscator/obfuscator-net.htm(这不是建议,我从未使用 - 你将不得不测试它,看看成本是否值得)。

除此之外,您可以编写一个自定义序列化程序,具体取决于您要序列化多少数据。


[原创答案]

你为什么要混淆的数据?我只能想象它是为了防止某人编辑它或阻止某人阅读内容。

如果是为了防止有人编辑它,那么我可以建议你包含一个数据散列,然后不要打扰它。

如果是为了防止有人读它,那么我建议你在序列化后加密数据。

有很多这两个例子,但如果你想要一个例子让我知道。

+0

这个问题不是关于混淆的数据,而是关于混淆的二进制。你可以用它序列化数据,并用相同程序的未混淆版本反序列化它? – tanascius

2

您是否尝试过使用EazFuscator?它允许一些自定义重命名方案允许您在某些情况下保留确切的名称,例如外部方法。尽管如此,.NET 4.0+或WCF的最新版本尚未达到最新版本。

您也可以使用.NET Reactor,这是另一种混淆器服务,它的功能远远超出了EazFuscator和Dotfuscator,但它确实有成本。

.NET Reactor还允许代码加密,而不是模糊处理,正如先前的建议将解决该问题。

10

混淆的二进制和序列化数据似乎有混淆。如果使用默认序列化器序列化您的类,那么类名称和属性/字段值将用作该序列化数据中的字符串 - 因此,如果您混淆了二进制文件,那么使用该二进制文件的序列化数据将具有混淆名称,模糊的二进制文件将无法读取混淆的二进制创建的序列化的数据,如果你做任何操作:

  1. 使用类重命名你的序列化类
  2. 使用会员重命名你的序列化类

这里有一些选项来解决这个问题:

  1. 我没有使用过这一段时间,(所以你要验证它在你的环境条件),但如果您使用的是二进制格式,那么你就可以控制数据如何存储在序列化通过提供处理SerializationInfo和StreamingContext的构造函数。如果你谷歌周围的样本,你应该找到一个(这里是我发现的一个:Serialize Objects to File)。使用这种方法你可能找不到很多新的文章,因为大多数人不觉得它很有趣,但它确实是指定你的类如何使用二进制格式化程序自我保存并重新填充的最简单的方法。

    在必须实现的构造函数中,您使用键/值对的字符串进行序列化 - 在模糊处理中,那些字符串可能会被加密(这是OK),并且属性设置语句将被重命名并保持同步与你混淆的类/成员名称 - 所以它应该适用于混淆和非混淆的程序集。

  2. 另一个选项是将您正在序列化的类从模糊处理中排除,并仅对数据文件进行加密。

+0

这里使用的实际技术称为序列化代理。在某些情况下,如果有人在序列化代理上进行搜索,可能想补充一点。 –