从反向工程保护.NET代码?

混淆是一种方式,但它不能保护应用程序的打击盗版保护安全。 如何确保应用程序不被篡改,以及如何确保注册机制不能被反向devise?

也可以将C#应用程序转换为本机代码, Xenocode代价太高。

C#提供了很多function,并且是我的代码的理想语言,所以再次用C ++编写整个代码库是不成问题的。

.NET中的签名程序集可以轻松地将安全证书删除。

你不能。

有些步骤可以让它变得更加困难,但最终本地机器上的任何可执行文件都是可破解的。 最终,该代码必须转换为本地机器代码,每个可运行的应用程序都是易受攻击的。

你想要做的只是让它难以破解,使它不值得人们的麻烦。

我有一些build议可以帮助您保护您的应用程序:

  • 混淆你的代码。 Dotfuscator有一个免费版,并附带Visual Studio。
  • 使用公钥/私钥或非对称encryption来生成您的产品许可证。 这确保只有可以生成您的许可证代码。 即使您的应用程序破解,您也可以确定它们不会为您的应用程序释放密钥生成器,因为不可能扭转密钥生成algorithm。
  • 使用第三方打包程序将.NET可执行文件打包到encryption的Win32包装应用程序中。 Themida是更好的之一。 这阻止了人们在.NETreflection器中reflection你的应用程序,并且使得解压缩反转成为一个痛苦。
  • 写你自己的定制打包机 。 如果第三方包装太贵,可以考虑自己写。 有时候定制的打包程序可能会非常有效,因为没有很好的发布方法来解压它们。 本教程如何编写自己的打包程序可以为编写自己的Win32打包程序提供大量的信息。

但最终,如果人们希望你的应用程序破解,他们会。 看看那些有大量资源来保护他们的应用程序的商业软件,然而在这些应用程序甚至公开发布之前就已经被破解了。

一个熟练的反向工程师可以启动IDA-Pro ,不pipe你做什么,都可以像黄油一样切片。 打包的应用程序可以解压缩和混淆只能防止它在公园散步。 用复杂的许可证代码所做的所有努力都可以通过单字节补丁来解决。

你只需要接受一个非常现实的机会就是盗用你的软件。 有些人永远不会为你的申请付钱,不pipe这些是你不需要担心的人。

然而,那里有许多企业,他们永远不会冒风险,高兴地购买软件许可证,许多计算机用户不想冒险,发现错误,或者没有足够的技术来打击盗版。 这些是你的真正的客户,你应该集中精力为他们提供良好的用户体验,而忽视破解软件的人。

以前我的申请是盗版的,我把它作为个人的冒犯者。 在这里,我是一个小时候的开发者,把我的心和灵魂灌输给了一个应用程序,这些人胆怯地从我身上偷盗? 他们直接从我口袋里拿钱!

我立即join了一堆严厉的DRM代码,并试图用任何非法或破解的副本来破坏任何人。 我当然应该努力使自己的应用程序更好,而不是试图阻止不可避免的。 不仅如此,但是我伤害了我的真正的顾客,所有这些额外的保护我将投入。

经过漫长的战斗之后,我意识到自己正在与潮汐作斗争,而这一切浪费都是徒劳的。 我拿出除了准系统许可证function之外的所有的电话家庭代码,从不回头。

你不能完全保护任何应用程序(托pipe或不)。 如果像Playstation和iPad这样的系统能够被破解,供应商甚至可以控制硬件,那么你的应用有什么希望? 谢天谢地,你并不是真的想要。 在我看来,你需要确保你的应用程序足够好,以至于有人不小心剽窃你的产品, 而不会再有。

例如,如果您使用每台计算机的许可证,则在安装到新的第二台计算机上时,它不应该正常工作。 你会想要一个很好的错误信息来防止额外的支持电话,但是不要花费额外的时间来解决这个问题,而且不要让用户头疼。

另一个例子是时间限制试验。 甚至不用担心简单的事情,如用户可以回滚系统时钟。 有人谁知道他们正在打破你的许可证,只要用户知道什么时候他们违规,你已经做得够多了。

您需要这么做,因为用户不关心您的许可证。 许可证是一些没有人关心的东西,直到他们需要为止。 没有人阅读他们,他们真的不应该。 因此,如果您的应用程序的开箱即用行为符合许可证,则告知用户边界位置的最佳方式是。 在第一种情况下,这意味着第二次安装或试用版模式安装失败。 对于后者,它可能仅仅意味着检查configuration文件中的纯文本date。 无论哪种方式,确保您以优雅,乐于助人和尊重的方式处理它。

所以这就解释了这意味着什么。 但为什么不去呢? 为什么不插入你能find的每一个小洞? 答案分两部分。 首先,如果有人会自觉地违反许可条款的道德标准 – 即使以简单的方式 – 他们也会愿意做一些更困难或更危险的事情,比如将您的应用程序从一个洪stream网站 – 而且有一定的数量涉及运行从不受信任来源下载的应用程序的危险。 让这些用户感到困扰只是一个小小的烦恼,并且会给付费用户带来问题。 保持简单可能会阻止某人挖掘您的应用程序并发布更全面的破解。 其次,你很less有眼睛可以find缺陷; 黑客有很多,他们有更多的实践find他们。 你只需要错过一个小小的缺陷,你的应用程序就会在海盗网站上分发,就好像你什么都不做。 你每次都要正确; 他们只有幸运一次。 所以所需的努力是非常高的,任何成功的可能性都很低。

最终,如果有人想盗用你的应用程序(而不是仅仅使用它),那么这是他们的主要目标。 没有什么可以阻止他们。 这是软件的本质; 一旦组成你的产品的文件在用户的计算机上,他们能够按照自己的意愿去做。 这在Java或.NET之类的托pipe环境中尤为重要,但它也绝对适用于本机代码。 时间在他们身边,给予足够的时间任何数字安全可以被打破。

由于您无法阻止用户盗用您的产品,因此您的最佳行动方式就是让这类用户参与到您的使用中。 通常可以让他们为你工作,而不是反对你。 考虑到这一点,不pipe你的应用程序是什么,它可能是值得的,保持一个几乎完全的function,并没有到期的免费版本。 即使是1美元的价格和免费的价格之间的差别也是巨大的,如果没有其他原因,客户就不用信用卡来信任您。 你的产品的免费版不仅会有效地杀死盗版发行(为什么冒着盗版版本,当你可以合法的价格?),它有可能大大扩大你的观众。

结果是,你可能需要增加付费版本的价格,所以最终,而不是2000美元的用户,每20美元就有10万免费用户,其中500美元愿意为“专业”版本支付99美元。 这比你花费大量时间locking你的产品赚得更多的钱。 更重要的是,您可以吸引这些免费用户,并在几个重要方面利用这种关系。

一个是支持。 悲观主义者会借此机会抱怨支持100,000个免费用户的成本增加,但是却发生了一些惊人的事情:您的产品很大程度上是自我支持的。 您可以随时查看大型开源项目,这些项目没有任何支持费用。 用户会加紧实现。

免费用户通常会减less支持期望,并有充分的理由。 所有你需要做的就是把免费版标记为只有社区支持的资格,并为此目的build立一个用户主持的在线论坛。 您的支持知识库是自我生成的,高级用户将代表您需要额外手持的人员。 更重要的是,这将使您能够更快地识别和纠正错误,最终提高产品质量并降低总体支持成本。 这之前是不可能的,因为你的用户群不够大,但是当你把自由用户当作客户时,它可以很好地工作。

另一个是反馈。 通过观看您的论坛,您将了解到您可能从未考虑过的重要改进想法。 这可以让您最终将更多的免费用户转变为付费用户,并创造更吸引人的产品,吸引更多的观众。

最后,你需要考虑营销。 所有这些免费的用户现在是粉丝而不是对手,他们将采取相应的行动。 不仅如此,在发布下一个版本时,这些用户将全部通过您的批准分销渠道,而不是其他一些未知的机制。 这意味着你的下一个版本,你开始与一个更大,高度感兴趣和支持的观众联系起来。

为专业版预留的最佳function是旨在使企业部署和pipe理更容易的工具。 一个黑客并不认为这是一个足够的理由来破解它自己的用途,但是对于一个想要购买300个许可证的公司来说,这是一个必须要做的事情。 当然,专业版本也是盗版的,但是不要为此付出汗水,因为不pipe你做了什么,你都不可能将产品卖给海盗,所以不会让你有任何收入。

虽然在心理上可能很难放弃你的产品,希望你能理解它是如何是最好的方法。 不仅如此,这是长远的唯一途径。 我知道有人在外面,认为他们不想这样做。 毕竟,他们已经得到好几年的销售locking20美元的产品了。 但是这太糟糕了,因为如果你不这样做, 最终还是有人会这样做。 他们的产品会和你的产品一样好,或者足够接近他们可以自称的。 然后突然之间你的定价看起来很离谱,销售额急剧下降,没有别的办法可以做了。 如果你必须的话,你可以select一个额外的中间层,但它不太可能帮助你。

根据我的经验,使您的应用程序或库更难以破解,伤害您诚实的客户,同时只是稍微拖延不诚实的客户。 专注于制造一个伟大的,低摩擦的产品,而不是付出很大的努力来拖延不可避免的。

你和很多人分享的秘密不是秘密。 如果你的代码中有秘密的东西,混淆它就没有保护。 它只需要被去混淆一次 。 如果你有一个秘密,你不想与你的客户分享,那么不要与你的客户分享 。 把你的代码写成一个Web服务,并把你的超级密码放在你自己的服务器上,只有你能看到它。

一般来说,这里有三组人。

  • 那些不会购买你的软件并且不愿意破解的人,或者如果他们找不到,就根本不使用你的软件。 不要指望从这个组里赚钱。 他们要么依靠自己的技能,要么依赖于cookies(他们倾向于根据自己的实际情况优先考虑自己的时间,观众的规模有多大,越有用,越早有效)。

  • 无论您使用何种保护机制,都会购买(付费)您的软件的合法用户组。 不要使用精心devise的保护机制来为合法用户生活,因为无论如何都要付费。 一个复杂的保护机制很容易破坏用户体验,你不希望这个组发生这种情况。 就个人而言,我会投票反对任何硬件解决scheme,这增加了您的软件成本。

  • less数人不会诉诸于“不道德的”破解,并且会为您的软件付费, 因为它的function受到许可机制的保护。 你可能不想让这个小组很容易绕过你的保护。 但是,您花在保护软件上的所有努力将会得到回报,具体取决于这一群人有多大。 这完全取决于您正在构build的软件的types。

鉴于你所说的话,如果你认为有足够多的less数人可以被迫购买你的软件,那就继续实施某种forms的保护。 考虑一下你从这个less数人中获得多less钱,或者花费在第三方保护API /工具上的时间。

如果你想实现你自己的解决scheme,使用公钥密码是一个很好的方法(而不是对称algorithm),以防止轻松入侵。 例如,您可以对您的许可证(序列号或许可证文件)进行数字签名。 解决这个问题的唯一方法就是反编译,修改和重新编译代码(使用Simucal的答案中提到的技术可以使你更加努力)。

你不能阻止人们破解你的软件。

但是,你可以让他们创造裂缝,这会损害你的销售减less。 可以为您的软件颁发有效注册码的主要生成器比简单的修补程序更糟糕,这些修补程序会从您的软件中删除注册激励。 这是因为一个破解版本只能用于一个软件版本,并且会停止与您发布的下一个软件更新一起使用。 密钥生成器将继续工作,直到您更改您的注册密钥algorithm,这是你不想经常做的事情,因为它会推迟诚实的客户。

因此,如果您正在寻找一种方法来打击您的软件的非法keygenerators,并且由于生成的较长的注册码而不想使用不对称encryption,您可以查看部分密钥validation。

部分密钥validation确保每个非法keygenerator只适用于您的软件的一个特定的版本。 基本上你要做的就是确保你的软件的每一个版本都只和检查注册码的一些数字的代码相关联。 哪些数字完全是随机的,所以破解者将不得不对你的软件的许多不同版本进行逆向工程,并将所有这些结合到一个keygenerator中,以便发布一个适用于所有版本软件的keygenerator。

如果您定期发布新的软件版本,这导致众多重要的生成器散布在各种不再适用的软件盗版档案中。 潜在的软件盗版者通常会寻找最新版本的破解软件,所以他们可能会尝试其中的一些,最终放弃。

我在我的(C ++)更新的共享软件游戏中使用了部分密钥validation,并且它非常有效。 在我们无法战斗的主要发电机出现很多问题之前, 后来有很多的裂缝和一些只为特定版本的游戏工作的重要发电机,但没有一个关键的发电机可以适用于所有版本。 我们经常发布游戏的非常小的更新,并使所有以前存在的裂缝无用。

似乎有一个用于部分密钥validation的开源.NET框架 ,尽pipe我还没有尝试过。

  • 使用在线更新来阻止那些未经许可的副本。

  • validation您的应用程序的不同模块的序列号,不要使用单一的函数调用进行validation(以便破解者不能轻易绕过validation)。

  • 不仅在启动时检查序列号,在保存数据的同时进行validation,每星期五晚上做一次,当用户空闲时做…

  • validation应用程序文件校验和,将您的安全校验和存储在不同的地方。

  • 这些技巧不要太过分,确保您的应用程序不会在validation注册码时崩溃/进入故障。

  • 为用户构build一个有用的应用程序比创build一个更重要
    破解者不可破解​​的二进制文件。

您可以..

Microsoft SLP服务 InishTech的软件潜力提供了帮助保护代码而不影响应用程序function的能力。

更新:(披露:我在Eazfuscator.NET上工作)是什么让微软SLP服务软件潜力不同的是虚拟化代码的能力,所以你一定可以 。 这个问题最初被问了几年, 今天有更多的产品也可以在类似的基础上工作,例如:

  • Agile.NET
  • Eazfuscator.NET

.NETreflection器只能打开“托pipe代码”,这基本上意味着“.NET代码”。 所以你不能用它来反汇编COM DLL文件,原生C ++,经典的Visual Basic 6.0代码等。编译的.NET代码的结构使得它非常方便,可移植,可发现,可validation等.NETreflection器利用这让你可以同步编译的程序集,但是反编译器和反汇编程序绝对不是特定于.NET的,只要编译器已经出现了。

您可以使用混淆器来使代码更难以阅读,但是您不能完全防止它被反编译,同时也不会使.NET无法读取。 有一些产品 (通常很贵),声称将托pipe代码应用程序“链接”到本地代码应用程序中,但即使这些产品真的有效,一个有决心的人也总能find一个方法。

然而,当涉及混淆,你得到你所支付的。 所以如果你的代码是如此专有以至于你必须竭尽所能保护它,你应该愿意投资于一个好的混淆器。

然而,在我15年左右的编写代码的经验中,我意识到过度保护你的源代码是浪费时间,没有什么好处。 只是试图阅读原始的源代码,没有支持文件,评论等,可能是非常难以理解。 除此之外,反编译器提出的无意义variables名称和现代混淆器创build的意大利面代码 – 您可能不必担心盗取您知识产权的人太多。

如果你希望人们能够运行你的代码(如果你没有,那你为什么要把代码写在第一位?),那么他们的CPU需要能够执行你的代码。 为了能够执行代码,CPU需要能够理解它。

由于CPU是愚蠢的,而人类不是,所以这意味着人类可以理解代码。

只有一种方法可以确保你的用户不会得到你的代码:不要给他们你的代码。

这可以通过两种方式实现: 软件即服务 (SaaS),即在服务器上运行软件,只允许用户远程访问它。 例如,这是Stack Overflow使用的模型。 我很确定,堆栈溢出不混淆他们的代码,但你不能反编译它。

另一种方式是设备模型:不是给用户你的代码,而是给他们一个包含代码的计算机。 这是游戏机,大多数手机和TiVo使用的模型。 请注意,这只有在您拥有整个执行path时才有效:您需要构build自己的CPU,自己的计算机,编写自己的操作系统和自己的CLI实现。 那么, 只有这样你才能保护你的代码。 (但是请注意,即使是最微小的错误也会使你的所有保护措施变得毫无用处,微软,苹果,索尼,音乐界和电影界都可以certificate这一点)。

或者,您可能什么也不做,这意味着您的代码将被版权法自动保护。

不幸的是,你不会逃避这一点。 你最好的select是用C和P编写你的代码/调用它。

有一个小的catch-22,有人可以将你的应用程序反编译到CIL并杀死任何validation/激活代码(例如,调用你的C库)。 请记住,使用C编写的应用程序也是由更持久的黑客进行反向devise的(只要看看现在游戏破解的速度)。 没有什么会保护你的申请。

最后,它和你的家一样,保护得很好,这样做太费力了(意大利面代码在这里会有所帮助),这样攻击者就会移动到你的隔壁邻居(比赛:))。 看看Windows Vista,必须有10种不同的方法来破解它。

在那里有一些软件包可以encryption你的EXE文件并在允许用户使用的时候解密,但是再一次使用一个毫无疑问被破解的通用解决scheme。

激活和注册机制是针对“普通的乔:”没有足够的技术知识的人绕过它(或者因为知道他们可以绕过它)。 不要打扰cookies,他们手上的时间太多了。

这真的值得吗? 每一个保护机制都可以被充分的决定打破。 考虑你的市场,产品的价格,顾客的数量等

如果你想要更可靠的东西,然后沿着硬件键的path,但这是相当麻烦(用户),并更昂贵。 软件解决scheme可能会浪费时间和资源,而他们唯一能给你的就是“安全”的错觉。

更多的想法(没有完美的,因为没有完美的)。

  • AntiDuplicate
  • 改变语言,使用Skype的作者使用的漂亮的技巧
  • 许可服务器

而且不要浪费太多时间,因为cookies对于典型的技术有很多的经验,而且在你之前几步。 除非你想使用大量的资源,否则可能改变编程语言(以Skype方式)。

除了购买保护,您(或您的开发人员)可以学习复制保护。

这些是想法:

起初,尝试写一个自己写入控制台的程序。 这是一个着名的问题。 这个任务的主要目的是练习编写自引用代码。

其次,你需要开发一种技术,以某种方式重写某些代码,这种方式可以依赖于其他方法的CIL 。

你可以编写一个虚拟机(但在.NET中 )。 并在那里放一些代码。 最终,虚拟机运行另一个运行代码的虚拟机。 这是很less被称为function的一部分,不会太慢地降低性能。

将一些逻辑重写到C ++ / CLI中,并将托pipe代码与非托pipe混合使用。 这将加剧拆解。 在这种情况下,不要忘记提供x64二进制文件。

是。 这是真的。 如果代码没有被混淆,.NET代码是非常容易反向工程的。

混淆会给试图逆向工程软件的人带来一层烦恼。 根据你得到的版本,你会得到不同程度的保护。

Visual Studio包含一个Dotfuscator版本。 由于它是一个捆绑版本,你绝对不会得到最强烈的混淆。 如果你看看他们的function列表,你会看到你到底错过了什么(以及应用程序将如何使你的代码更安全)。

有一些其他的自由或开放源码的.NET混淆器(但我不能评论质量或他们使用的各种方法):

  • Obfuscar
  • Babel.NET

最后,没有什么是完美的。 如果有人真的想看看你的软件如何工作,他们会。

那么,你不能充分保护你的产品不被破解,但你可以最大限度地提高安全水平,并使它有点太难以被新手和中间cookies破解。

但是请记住,没有什么是不可破解的,只有服务器端的软件是很好的保护,不能被破解。 无论如何,为了提高应用程序的安全级别,你可以做一些简单的步骤来防止一些破解者“不是全部”破解你的应用程序。 这些步骤将使这些cookies疯狂,也许绝望:

  • 混淆你的源代码,显然这会使你的源代码看起来像一团糟,不可读。
  • 在应用程序内触发几个随机检查例程,例如每两小时,二十四小时,一天,一周等,或者在每次用户采取的行动之后。
  • 保存你的发布应用程序的MD5校验和在你的服务器上,并实现一个例程,可以检查当前文件的MD5校验和与你服务器端的真实的一个,并随机触发。 如果MD5校验和已经被修改,这意味着这个副本是盗版的。 现在你可以阻止它,或发布更新来阻止它,等等。
  • 尝试做一个例程,可以检查你的代码(函数,类或特定的例程)是否实际上已经被修改或更改,甚至删除。 我称之为(代码完整性检查)。
  • 使用免费的未知包装来打包您的应用程序。 或者,如果你有钱,去商业解决scheme,如Thamida或.NET反应堆 。 这些应用程序会定期更新,一旦破解程序解压你的应用程序,你就可以从这些公司得到一个新的更新,一旦你得到新的更新,你只需打包你的程序并发布一个新的更新。
  • 定期发布更新并强制客户下载最新的更新。
  • 最后让你的应用程序非常便宜。 不要让它太昂贵。 相信我,你会得到更多的快乐的客户,cookies将只是离开你的应用程序,因为它是不值得他们的时间来破解一个非常便宜的应用程序。

这些只是简单的方法来防止新手和中间人破解你的应用程序。 如果你有更多的想法来保护你的应用程序,不要害羞地实施它们。 它只会使破解者生活得艰难,他们会感到沮丧,最终他们会离开你的申请,因为这不值得他们的时间。

最后,你还需要考虑花时间编写一个好的和高质量的应用程序。 不要浪费时间编码复杂的安全层。 如果一个好的黑客想破解你的应用程序,他/她将会做,不pipe你做什么…

现在去执行一些玩具的cookies…

有Salamander ,这是一个原生的.NET编译器和Remotesoft的连接器,可以在没有.NET框架的情况下部署应用程序。 我不知道它的声称有多好。

如果微软能拿出一个解决scheme,我们不会有盗版的Windows版本,所以没有什么是非常安全的。 以下是Stack Overflow的一些类似问题,您可以实现自己的保护方法。 如果你正在发布不同的版本,那么你可以采取不同的技术不同的版本,所以到时候第一个被破解,第二个可以接pipe。

  • 为C ++应用程序的许可证pipe理function

  • 使用许可证文件来保护DLL文件

  • 许可/保护软件?

.NET反应堆

更新

Jared指出, de4dot声称能够反编译它。

.NET Reactor通过将您的.NET程序集转换为不能被理解为CIL的非托pipe进程,以及没有现有的工具可以反编译的程序,为敏感的知识产权提供了完整的保护。 黑客无法获得任何可理解的来源forms。

强大且灵活的.NET Reactor许可function允许您通过使用硬件和软件锁来执行您的许可条件并保护您的收入来源。 许可证pipe理员可以在几秒钟内build立试用或永久许可证。 完整的文档化软件开发工具包(SDK),包含示例,可让您直接从您的代码调用许可系统,允许您创build许可系统的定制扩展。

这里有一个想法:你可以有一个公司托pipe的服务器,你的软件的所有实例都需要连接到。 只要让他们连接并validation一个注册密钥是不够的 – 他们只会删除支票。 除了密钥检查之外,还需要服务器执行一些客户端无法执行的重要任务,因此无法删除。 这当然可能意味着你的服务器上有很多繁重的处理,但是这会使你的软件很难被窃取,而且假设你有一个好的密钥scheme(检查所有权等),密钥也很难偷。 这可能比你想要的更具有侵入性,因为它需要你的用户连接到互联网来使用你的软件。

客户端上运行的任何东西都可以被反编译和破解。 混淆使得它更难。 我不知道你的申请,但99%的时间我不认为这是值得的努力。

混淆代码! 在混淆C#代码中有一个例子。

请记住,99%以上的用户不会对检查可执行文件感兴趣,看看它是如何工作的。

鉴于如此less的人甚至会打扰尝试,并且大多数混淆器可以被解决,是否值得你花时间和努力?

你最好把时间投入到改进你的产品,让更多的人想要使用它。

只是要添加一个警告:如果你要使用混淆,请检查一切仍然有效! 混淆可能会改变类和方法名称。 因此,如果您使用reflection来调用特定的方法和/或类(例如在插件体系结构中),则应用程序在混淆后可能会失败。 此外,堆栈跟踪可能无法追查错误。

如果使用.NET编写并编译为CIL ,则可以反映出来。 如果安全是一个问题并且要避免混淆,那么我build议使用非托pipe语言来编写应用程序,这本质上是难以逆向工程的。

如何确保应用程序不被篡改,以及如何确保注册机制不能被反向devise。

两者都有相同的非常简单的答案:不要将目标代码交给不可信任的方,例如(显然)您的客户。 在您的机器上托pipe应用程序是否可行取决于它的function。

如果它不是一个Web应用程序 ,也许你可以允许SSHloginX转发到应用程序服务器(或远程桌面连接 ,我猜,Windows)。

如果你给目标代码给书呆子types的人,他们认为你的程序可能是有趣的破解,它被破解。 没有办法绕过它。

如果你不相信我,请指出一个未被破解和盗版的高调应用程序。

如果你使用硬件钥匙,它会使生产更昂贵,你的用户会恨你。 因为软件制造商不相信你(我想),在地板上插拔并拔掉你的27个不同的USB设备是一个真正的麻烦。

这里有一些软件包可以对你的EXE进行encryption,并在用户被允许使用的时候将其解密

当然,解决这个问题的方法是破解“我可以使用它”testing,以便它始终返回true。

一个令人讨厌的技巧可能是使用操作代码的字节值,在程序中的其他地方以一种肮脏的方式执行testing,这会使得程序崩溃的概率很高,除非值是正确的。 它使你链接到一个特定的架构,但:-(

只要做一个好的应用程序并编写一个简单的保护系统。 不pipe你select什么样的保护,它都会被颠倒过来,所以不要浪费太多的时间/金钱。

不可能完全确保应用程序,对不起。

说到.NET,如果你正在发布一个Windows Forms应用程序(或者客户端有可移植可执行文件的任何应用程序),它就能被破解。

如果你想坚持使用.NET,并希望尽量减less获取源代码的机会,那么你可能会考虑将其作为一个ASP.NET应用程序跨Web服务器部署,而不是将其作为Windows Forms应用程序。

坦率地说,有时我们需要混淆代码(例如,注册许可证类等等)。 在这种情况下,您的项目不是免费的。 国际海事组织,你应该支付一个好的obfucator。

Dotfuscator隐藏您的代码, .NET Reflector在尝试反编译时显示错误。

我可以推荐使用混淆器 。