【发布时间】:2012-01-08 10:51:33
【问题描述】:
我正在寻找一些指导,了解在使用带有混淆的 proto-buf 网络 (Dotfuscator) 时会发生什么。该项目的一半是 DLL,另一半是其他地方的 EXE,它们使用 proto-buf NET 完美地交换数据。直到我混淆了 DLL。
此时 P-BN 失败而没有引发异常,根据我所摆弄的内容返回不同长度的 0 字节数组或缩短的字节数组。这个类相当简单(VB):
<ProtoContract(Name:="DMailer")> _
Friend Class DMailer
Private _Lic As Cert
Private _Sys As Sys
Private _LList As List(Of LItem)
..
..
End Class
有 3 个 props 都用 ProtoMember 装饰来获取/设置组成类对象。为简洁起见截断。
再一次,在我混淆 DLL 之前,它工作得很好。然后,Dotfuscator 将这些重命名为 null,显然因为它们都是 Friend,这似乎扼杀了 proto-buff。如果我免除类重命名(只是类名,而不是道具/成员),它似乎又可以工作了。 P-BN 只能作用于具有正确名称的对象是有道理的,尽管当被要求序列化一个空命名对象时,似乎可能会出现异常。
另一方面,PB-N 的大部分魅力应该是序列化独立的 .NET 名称从属性工作 - 至少据我了解。然而在这种情况下,它似乎只适用于具有名称的类。我尝试使用如上所示的 Name 限定符或参数,但无济于事 - 它显然没有做我认为可能的事情。
所以,我很好奇:
a) ...我基本上猜对了问题
b) ...还有一些其他属性或标志可能有助于序列化 一个空命名对象
c) ...如果还有其他有用的见解。
如果我从 Dotfuscator 重命名中免除所有 3 或 4 个类(LList 尚未实际实现,留下 DMailer、Cert 和 Sys),DLL 似乎再次工作 - 至少输出是正确的大小。我可以忍受,虽然模糊的名称会更好:Dotfuscator (CE) 要么豁免它们,要么将名称设置为 Null - 我似乎无法找到强制重命名它们的方法。
我正在考虑的一种替代方法是将 Cert 和 Sys 的 Serializer 输出简单地存储为 DMailer 中的字节数组或 Base64 字符串而不是类,而不是免除 3 或 4 个类的重命名。然后让接收者分别反序列化每个对象。能够只打开一件东西,然后像施了魔法一样把玩具放在那里,真是太好了。
(许多)TIA
【问题讨论】:
标签: serialization obfuscation protobuf-net