手动混淆所需的想法

时间:2012-04-18 15:43:55

标签: c# .net obfuscation

我希望避免我的程序很简单,从而删除许可证验证程序部分。

我不想使用商业混淆器,因为:

  1. 费用。虽然他们可以比我做得更好 - 他们 也不要让它变得难以破解,只是更难。
  2. 似乎有时混淆器会导致生成的错误 代码。
  3. 显然,我将保留一份未经混淆的副本以进行维护。

3 个答案:

答案 0 :(得分:2)

我曾经不得不在客户可以修改的代码中隐藏许可证验证程序。可以想象,如果他们知道在哪里看,他们就可以删除它。以下是我当时使用的一些技巧。

  1. 提供您的验证者类,程序集名称和变量名称,看起来他们实际上正在执行其他操作。
  2. 从代码的多个部分调用验证程序。
  3. 将随机化程序添加到调用验证中,以便有时运行,有时则不运行。这将使得更难以了解验证码的实际来源。
  4. 我应该补充一点,所有这些都是可以解决的,并且可能导致严重的维护问题,但在我的特定情况下,它可以工作。

答案 1 :(得分:1)

如果您的目的是使其变得更难,但并非不可能,那么一种方法是使用多个代码点来检查您的许可证文件是否有效。

假设你有一个带有某些键的许可证文件

abc-def-fhi-asdf

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

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

除此之外,一种方法是让发布过程内联您的验证方法,每次调用时都会巧妙地更改它。

例如:

*user clicks a common function
// [VALIDATION STUB]
*perform user action

新的发布过程贯穿代码,拉出// [VALIDATION STUB]并将其替换为验证代码(在编译代码之前),正如我所说,每次都应该尽可能多地改变。

从我的回答中得出的主要内容是混淆是困难的,但并非不可能。特别是如果你让自己屈服于恶意用户最终会破坏它的现实

答案 2 :(得分:0)

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

首先,您可以使用免费的混淆器,如VisualStudio附带的混淆器。它总比没有好。

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

第三,完成上述所有工作。

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