英文:
The latest dll prevents decompilation, the most effective and low-cost method
问题
我想加密主机计算机软件的一些重要dll文件,以防止竞争对手对其进行反编译。这主要涉及集成电路,对于更多信息,通知我可能会不方便。
我需要一些关于如何实现这种加密的建议。
英文:
At present, I want to encrypt some important dlls of the host computer software to prevent them from being decompiled by competitors. It mainly involves integrated circuits, and it is inconvenient to inform me of more information.
I need some advice to accomplish this encryption
答案1
得分: 1
正如John Wu所说,加密的dll在被引用时需要通过一些特殊的渠道。
您可以通过加密来混淆dll,然后通过反射调用它。这里有一个示例:
假设我们有一个项目,其输出类型是类库,项目的命名空间是TestDll,在该命名空间下有以下类:
namespace TestDll
{
public static class ImportantClass
{
private static string password = "123456";
public static string DoSomething()
{
return password + "zzz";
}
}
}
如果我们不使用加密混淆方法,点击生成,然后会生成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路径的应用程序中,然后修改主方法:
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();//类名
MethodInfo methodInfo = type.GetMethod("DoSomething");//方法名
object value = methodInfo.Invoke(null, null);// 如果方法没有参数
// 如果方法有参数
//object value = methodInfo.Invoke(null, new object[]{param1,param2});
Console.WriteLine(value);
Console.ReadKey();
}
但正如PMF所说,归根结底,各种加密方法只会增加黑客解密的难度,总会有一种方法可以破解。
英文:
As John Wu said, encrypted dlls need to go through some special channels when they are referenced.
You can obfuscate the dll by encryption and call it through reflection. Here is an example:
Suppose we have a project whose output type is class library, and the namespace of the project is TestDll, and there is the following class under this namespace
namespace TestDll
{
public static class ImportantClass
{
private static string password = "123456";
public static string DoSomething()
{
return password + "zzz";
}
}
}
If we don’t use encryption obfuscation method, we click Generate, then the file TestDll.dll will be generated, we create a new console application, the namespace is Test_Demo, add the dll reference, and then use the following method to call
namespace Test_Demo
{
internal class Program
{
static void Main(string[] args)
{
string str = ImportantClass. DoSomething();
Console.WriteLine(str);//123456zzz
Console. ReadKey();
}
}
}
But we will find that both password and DoSomething in ImportantClass are visible in plain text, which is obviously not acceptable
In order to avoid the exposure of our dll implementation details, we can use ConfuserEx for obfuscation and encryption
At this time, the methods and details of the dll are all hidden. Through this method of obfuscation and encryption, the visual studio project cannot add references, so it is necessary to use Assembly to do reflection calls, and copy the encrypted dll to the application of Confuser_Demo path, and then modify the main method
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();
}
But as PMF said, in the final analysis, various encryption methods will only increase the difficulty of decryption for hackers, and there is always a way to crack
答案2
得分: 0
如果你怀疑竞争对手(来自国外)雇佣黑客来拆解你的代码,无论如何你都已经失败了。除了尽量让他们的操作变得困难之外,你无法采取任何行动。
然而,如果竞争对手是一家值得信赖的公司,他们不会这样做,因为他们有声誉要保持,而且在诉讼案件中也可能损失大笔资金。西方国家的科技公司非常渴望确保他们严格遵守许可合同,因为他们也期望他们的客户做同样的事情(并支付他们的服务和许可费用)。
英文:
If you suspect that the competitor (from a remote country) hires hackers to disassemble your code, you have lost anyway. There's nothing you can do about it, except making it as hard as possible for them.
If the competitor however is a trustworthy company, they will not do that, as they have a reputation to loose and also a lot of cash in case of a lawsuit. Tech companies in western countries are very eager to make sure they follow license contracts to the letter, as they also expect that their customers do the same (and pay for their services and licenses).
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论