6

我需要保护我们的程序集免受逆向工程的影响,以降低 IP 盗窃或许可黑客的风险。.NET Reactor 看起来很强大,我们已经获得了它的许可证。

通读文档,除了混淆之外,似乎还有几种防止反编译的机制。我读过混淆会破坏序列化,这是我们系统的重要组成部分,我希望完全避免它。

我主要对 NecroBit 感兴趣,它声称对 CIL 进行加密,使其“无法进行反编译/逆向工程”。在我看来,如果这是真的,那么混淆或任何其他设置都将毫无意义。

任何有经验的 .NET Reactor 用户能否对各种选项给出更实际的解释和/或为序列化系统建议一个好的排列?有什么好的工具可以测试这个软件的声明?

4

3 回答 3

2

只要将相应的类标记为可序列化,您就可以告诉 .NET Reactor 从混淆中排除这些类:

在此处输入图像描述

于 2020-11-12T15:23:32.440 回答
2

希望这可以帮助其他一些使用 .NET Reactor 或类似工具的人。我知道任何工具的局限性。目标是用最少的努力尽可能地降低许可黑客的风险。我的公司以前被烧过,老板想要的。

我们的项目特别是使用 Prism 的 WPF 桌面。我发现当我尝试将我的程序集合并到一个胖 exe 中时,我的一些接口注册无法在 Unity 容器中解析。我们决定单独保护每个 dll 而不是与之抗争是可以的。一旦我这样做了,这个工具就很好用。我从字面上检查了桌面的每个保护选项。

我们的服务在自托管的 OWIN 进程中运行 SignalR 集线器。在这种情况下,本机 EXE 文件选项将不起作用。运行服务时出现错误图像格式异常。否则检查所有选项。

除此之外,我遇到了一些零星的问题,我们以 Type.GetMethod(string) 的形式使用反射。我不得不排除一些带有混淆属性的方法和类。

我预计 JSON 序列化会出现问题,但没有得到任何结果。一切正常:)

于 2017-06-20T14:08:11.163 回答
1

我已经使用 netreactor 多年了。我使用序列化接口和序列化绑定器来解决混淆等问题。它适用于 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

       }
   }
于 2018-02-25T15:51:24.630 回答