我要求保护我们的组件免受逆向工程,以减少IP盗窃或许可黑客攻击的风险。 .NET Reactor看起来很强大,我们已经拥有它的许可证。
通过文档阅读,除了混淆之外,似乎有几种机制可以防止反编译。我已经读过,混淆可能会导致序列化,这是我们系统的一个重要部分,我希望完全避免它。
我主要对NecroBit感兴趣,后者声称加密CIL,使其“无法进行反编译/反向工程”。在我看来,如果这是真的,混淆或任何其他设置将毫无意义。
任何有经验的.NET Reactor用户是否可以对各种选项进行更实际的解释和/或建议对序列化系统进行良好的排列?有哪些好的工具可以测试这个软件的声明?
答案 0 :(得分:1)
希望这有助于其他人使用.NET Reactor或类似工具。我知道任何工具的局限性。目标是尽可能以最小的努力降低许可黑客的风险。我的公司之前已被烧毁,老板想要它。
我们的项目特别是使用Prism的WPF桌面。我发现当我尝试将我的程序集合并到一个胖程序时,我的一些界面注册无法在Unity容器中解析。我们认为可以单独保护每个dll而不是用它来对抗。一旦我这样做,这个工具很好地工作。我确实检查了桌面的每个保护选项。
我们的服务在自托管的OWIN流程中运行SignalR集线器。在这种情况下,Native EXE File选项不起作用。我们运行服务时遇到了Bad Image Format异常。否则检查所有选项。
除此之外,我遇到了一些棘手的问题,我们使用Type.GetMethod(字符串)形式的反射。我不得不用ObfuscationAttribute排除一些方法和类。
我期待JSON序列化的问题,但没有得到任何问题。一切正常:)
答案 1 :(得分:1)
答案 2 :(得分:0)
我多年来一直在使用netreactor。我使用iserialization接口和序列化绑定器来解决混淆等问题。它适用于Netreactor的每种保护方法。
Stream s = null;
BinaryFormatter b = new BinaryFormatter();
Binder CB = new Binder();
b.Binder = CB;
try
{
s = File.Open(fileName, FileMode.OpenOrCreate);
//to serialize
b.Serialize(s, yourObject);
// to deserialize
yourObject = (YourClass)b.Deserialize(s);
}
catch
{
}
finally
{
s.Close();
}
[Serializable]
public class YourClass : System.Runtime.Serialization.ISerializable
{
//Explicit serialization function
public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
{
info.AddValue("stringVar", stringVar);
// and so forth...
}
// Deserialization
public YourClass(SerializationInfo info, StreamingContext ctxt)
{
stringvar = (string)info.GetValue("stringVar", typeof(string));
// and so forth
}
}
// the serialization binder
public class Binder : SerializationBinder
{
public override Type BindToType(string assemblyName, string typeName)
{
return System.Type.GetType(typeName); // Get it from this
//assembly
}
}