2011-10-06 21 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

這裏使用的實際技術稱爲序列化代理。在某些情況下,如果有人在序列化代理上進行搜索,可能想補充一點。 –