C# 手动模糊处理所需的想法

C# 手动模糊处理所需的想法,c#,.net,obfuscation,C#,.net,Obfuscation,我想避免我的程序很容易从中删除许可证验证程序部分 我不想使用商业模糊器,因为: 费用的一半。尽管他们能比我做得更好,但他们 也不要让它不可能破裂,只是更难 看起来,有时混淆器会在生成的代码中引起错误 代码 显然,我将保留一份未模糊的副本以供维护。我曾经不得不在代码中隐藏一个许可证验证程序,以便客户可以修改。可想而知,如果他们知道去哪里找,他们本可以把它拿走的。以下是我当时使用的一些技巧 为您的验证程序类、程序集名称和变量名称提供看起来像它们实际执行其他操作的名称 从代码的多个部分调用验证器 为验

我想避免我的程序很容易从中删除许可证验证程序部分

我不想使用商业模糊器,因为:

  • 费用的一半。尽管他们能比我做得更好,但他们 也不要让它不可能破裂,只是更难
  • 看起来,有时混淆器会在生成的代码中引起错误 代码

  • 显然,我将保留一份未模糊的副本以供维护。

    我曾经不得不在代码中隐藏一个许可证验证程序,以便客户可以修改。可想而知,如果他们知道去哪里找,他们本可以把它拿走的。以下是我当时使用的一些技巧

  • 为您的验证程序类、程序集名称和变量名称提供看起来像它们实际执行其他操作的名称
  • 从代码的多个部分调用验证器
  • 为验证调用添加一个随机化器,以便它有时运行,有时不运行。这将使我们更难知道验证代码的实际来源

  • 我应该补充一点,所有这些都是不可行的,并且可能会导致严重的维护问题,但在我的特定场景中,它起到了作用。

    我曾经不得不在客户可以修改的代码中隐藏许可证验证程序。可想而知,如果他们知道去哪里找,他们本可以把它拿走的。以下是我当时使用的一些技巧

  • 为您的验证程序类、程序集名称和变量名称提供看起来像它们实际执行其他操作的名称
  • 从代码的多个部分调用验证器
  • 为验证调用添加一个随机化器,以便它有时运行,有时不运行。这将使我们更难知道验证代码的实际来源

  • 我应该补充一点,所有这些都是不可行的,并且可能会导致严重的维护问题,但在我的特定场景中,它起到了作用。

    如果您的目的是让它变得更难,但并非不可能,一种方法是让多个代码点检查您的许可证文件是否有效

    假设您有一个许可证文件,其中包含这样的密钥

    abc-def-fhi-asdf
    
    所以,关键有四个部分。然后,我们将创建四种不同的方法来检查密钥的各个部分

    通过这样做,并改变代码中使用的方法(理想情况下,在运行时随机选择验证方法),您将显著增加删除验证的难度

    除此之外,还有一种方法是让发布过程内联您的验证方法,每次调用时都对其进行微妙的更改

    例如,类似这样的事情:

    *user clicks a common function
    // [VALIDATION STUB]
    *perform user action
    
    新的发布过程贯穿整个代码,拉出//[VALIDATION STUB]并用您的验证代码替换它(在编译代码之前),正如我所说的,每次都应该尽可能地改变


    从我的答案中得出的主要结论是,混淆是困难的,但并非不可能。特别是如果你让自己屈服于这样一个现实,即恶意用户最终总是会破坏它

    如果你的目的是让它变得更难,但并非不可能,一种方法是让多个代码点检查你的许可证文件是否有效

    假设您有一个许可证文件,其中包含这样的密钥

    abc-def-fhi-asdf
    
    所以,关键有四个部分。然后,我们将创建四种不同的方法来检查密钥的各个部分

    通过这样做,并改变代码中使用的方法(理想情况下,在运行时随机选择验证方法),您将显著增加删除验证的难度

    除此之外,还有一种方法是让发布过程内联您的验证方法,每次调用时都对其进行微妙的更改

    例如,类似这样的事情:

    *user clicks a common function
    // [VALIDATION STUB]
    *perform user action
    
    新的发布过程贯穿整个代码,拉出//[VALIDATION STUB]并用您的验证代码替换它(在编译代码之前),正如我所说的,每次都应该尽可能地改变


    从我的答案中得出的主要结论是,混淆是困难的,但并非不可能。特别是如果你屈服于这样一个现实,即恶意用户最终总是会破坏它

    我有一些建议,你可能会觉得有用

    首先,您当然可以使用免费的模糊器,比如VisualStudio附带的模糊器。总比没有好

    其次,您可以编写许可证验证代码,一旦它工作正常,就尽可能地重构它,将类名、成员变量、局部变量和方法更改为c1、v1、l1、m1等。这基本上就是模糊处理程序所做的

    第三,完成以上所有工作


    第四,用非托管代码(C++,Delphi)编写许可证验证,并使其成为一个名为core.DLL、net.DLL等重要内容的DLL。您还可以在其中放置一些不重要的诱饵方法。从代码的多个位置多次调用该DLL,并假装对这些调用的结果进行了处理。

    我有一些建议,您可能会觉得有用

    首先,您当然可以使用免费的模糊器,比如VisualStudio附带的模糊器。总比没有好

    其次,您可以编写许可证验证代码,一旦它工作正常,就尽可能地重构它,将类名、成员变量、局部变量和方法更改为c1、v1、l1、m1等。这基本上就是模糊处理程序所做的

    第三,完成以上所有工作


    第四,用非托管代码(C++,Delphi)编写许可证验证,并使其成为一个名为core.DLL、net.DLL等重要内容的DLL。您还可以在其中放置一些不重要的诱饵方法。从代码的多个位置多次调用该DLL,并假装对这些调用的结果进行了处理。

    手动混淆也可能导致最终结果出现错误。具有更高的概率。重复?Plus VS2010包括dotfuscator Common