winforms 最新的dll防止反编译,最有效和低成本的方法

e5njpo68  于 2023-10-23  发布在  其他
关注(0)|答案(2)|浏览(166)

目前,我想对主机软件的一些重要dll进行加密,以防止它们被竞争对手反编译。主要涉及集成电路,不方便告知我更多信息。
我需要一些建议来完成这个加密

a1o7rhls

a1o7rhls1#

正如John Wu所说,加密的dll在被引用时需要经过一些特殊的通道。
您可以通过加密来混淆dll,并通过反射调用它。下面是一个示例:
假设我们有一个输出类型为类库的项目,该项目的命名空间为TestDll,在这个命名空间下有下面的类

namespace TestDll
{
     public static class ImportantClass
     {
         private static string password = "123456";

         public static string DoSomething()
         {
             return password + "zzz";
         }

     }
}

如果我们不使用加密混淆方法,我们点击Generate,那么就会生成文件TestDll.dll,我们新建一个控制台应用程序,命名空间为Test_Demo,添加dll引用,然后用下面的方法调用

namespace Test_Demo
{
     internal class Program
     {
         static void Main(string[] args)
         {
             string str = ImportantClass. DoSomething();
             Console.WriteLine(str);//123456zzz
             Console. ReadKey();
         }
     }
}

但我们会发现,在ImportantClass中password和DoSomething都是明文可见的,这显然是不能接受的
为了避免暴露我们的dll实现细节,我们可以使用ConfuserEx进行混淆和加密。

此时,dll的方法和细节都被隐藏了。通过这种混淆和加密的方法,visual studio项目无法添加引用,所以需要使用Assembly做反射调用,并将加密的dll复制到Confuser_Demo路径的应用程序中,然后修改main方法

static void Main(string[] args)
     {
         string dllPath = @"C:\Users\Administrator\source\repos\TestDll\TestDll\bin\Debug\TestDll.dll";
         Assembly dll = Assembly. LoadFrom(dllPath);
         Type[] types = dll. GetTypes();
         Type type = types.Where(arg => arg.Name.Equals("ImportantClass")).FirstOrDefault();//class name
         MethodInfo methodInfo = type.GetMethod("DoSomething");//Method name
         object value = methodInfo.Invoke(null, null);// If the method has no parameters
                                                      // if the method has parameters
                                                      //object value = methodInfo.Invoke(null, new object[]{param1,param2});
         Console. WriteLine(value);
         Console. ReadKey();
     }

但正如PMF所言,归根结底,各种加密方式只会增加黑客解密的难度,破解之道总有破解之道

iezvtpos

iezvtpos2#

如果你怀疑竞争对手(来自一个遥远的国家)雇佣黑客来拆解你的代码,你无论如何都输了。你什么也做不了,除了让他们尽可能地困难。
然而,如果竞争对手是一家值得信赖的公司,他们就不会这样做,因为他们有一个松散的声誉,也有大量的现金,以防诉讼。西方国家的科技公司非常渴望确保他们严格遵守许可合同,因为他们也希望他们的客户也这样做(并为他们的服务和许可付费)。

相关问题