保护.NET代码免受逆向工程?

Pri*_*lia 481 .net c# obfuscation reverse-engineering

混淆是一种方式,但它无法防止破坏应用程序的盗版保护安全性.我如何确保应用程序不被篡改,以及如何确保注册机制不能被反向工程?

此外,可以将C#应用程序转换为本机代码,而Xenocode代价太高.

C#提供了很多的功能,并且是我的代码的理想语言,所以下再次写入整个代码库++是出了问题.

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

mmc*_*ole 659

你不能.

还有你可以采取措施,使之成为一点比较困难,但最终还是在本地计算机上的任何可执行文件是攻破.最终,该代码必须转换为本机代码,并且每个可运行的应用程序都是易受攻击的.

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

我有一些建议可以帮助您保护您的申请:

  • 模糊您的代码.Dotfuscator有免费版,并附带Visual Studio.
  • 使用公钥/私钥或非对称加密来生成产品许可证.这可确保只能生成许可证代码.即使您的应用程序破解,您也可以确保它们不会为您的应用程序释放密钥生成器,因为无法撤消密钥生成算法.
  • 使用第三方打包程序将.NET可执行文件打包到加密的Win32包装器应用程序中.Themida是最好的之一.这会阻止人们在.NET Reflector中反映您的应用程序,并且在解压缩时会很麻烦.
  • 编写自己的自定义包装工具.如果第三方包装商太贵,可以考虑自己编写.有时自定义打包程序非常有效,因为没有很好的方法来解压缩它们.如何编写自己的打包程序教程提供了大量有关编写自己的Win32打包程序的信息.

但最终,如果人们希望您的应用程序破解,他们会.看看那里有大量资源来保护他们的应用程序的所有商业软件,然而在应用程序发布给公众之前它们就被破解了.

熟练的逆向工程师可以启动IDA-Pro,无论您做什么,都可以将您的应用程序切成黄油.打包的应用程序可以解压缩,混淆只能阻止它在公园散步.使用单字节补丁可以撤消复杂许可证代码的所有繁重工作.

你只需要接受人们真的有机会盗版你的软件.有些人无论如何都不会为您的申请付费,这些人是您不必担心的.

然而,有许多企业从不冒险诉讼,并乐意购买软件许可证和许多计算机用户,他们不想冒险,发现错误或不够技术精通海盗.这些是您真正的客户,您应该集中精力为他们提供良好的用户体验,而忽略了人们破解您的软件.

我之前有过盗版申请,我把它作为个人冒犯.在这里,我是一个小型的开发人员,将我的心灵和灵魂倾注到一个应用程序中,这些人有胆量从我身上偷盗?!他们直接从口袋里拿钱!

我立即添加了一堆严厉的DRM代码,试图破坏使用非法或破解副本的任何人.我当然应该努力使我的应用程序更好,而不是试图阻止不可避免的事情.不仅如此,我还会伤害到我的真正客户所有这些额外的保护措施.

经过长时间的战斗,我意识到我正在与潮汐作斗争,所有这些浪费都是徒劳的.我拿出了所有的电话家庭代码,除了准系统许可证功能,从未回头.

  • 你已经达到了软件保护的必杀技:这不是为了增加更多的保护,而是关注产品并使其变得如此之好以至于人们想要为此付出代价.对于那些盗版它们的人来说,他们永远不会付钱,所以就好像他们从未存在过一样. (101认同)
  • 所以+1它几乎是+2.我希望更多的人最终得到你根本无法保护你的软件免受坚定的攻击者. (64认同)
  • 地狱我很荣幸找到有人认为我的软件值得盗版...... (48认同)
  • 当您开始依靠软件的销售来获取收入的主要部分时,就会改变一切.感觉有人在偷你.我得到你说的话.当我第一次在torrent网站上发现我的软件出现裂缝时,我感到很震惊. (10认同)
  • @Arthur Chaparyan,我同意.我花了很长时间才到这里,但我终于看到了光明.我走上了限制性更强的保护之路,并与薄脆饼干作战.我学会了所有关于逆向工程的知识,试图阻止我自己的工程.我终于找到了正确的意识形态 (6认同)
  • 我认为关键是向软件破解程序抛出毒骨(我看到部分密钥验证答案)并经常发布新版本以确保有大量非工作注册密钥/密钥/裂缝.这将推迟大多数潜在的海盗.在我的案例中工作. (3认同)
  • 我的软件是逆向工程和重新分配的,没有保护代码*day*我发布它,这是*之前*分析虚拟机上运行的应用程序是微不足道的.对于用户而言,这只是一个*速度突破*和用户的痛苦(我支持成本的95%以上是许可证密钥复制/粘贴/打字问题).C++不会保护你.有数百万*的装配和机器语言能力的破解者将像空气一样切入它. (3认同)
  • 如果像微软这样价值数十亿美元的公司推出的每一款软件都被破解了,那么你就没有机会了。如果根据定义,您的软件无论如何都会被破解,那么您在研究、编码和测试上花费数小时的时间真的不值得。 (2认同)

Joe*_*orn 264

您无法完全保护任何应用程序(托管与否).如果像Playstation和iPad这样的系统可以破解 - 供应商甚至控制硬件 - 你的应用程序有什么希望?谢天谢地,你真的不想.在我看来,您需要确保您的应用程序足够安全,以免有人不小心盗用您的产品,而不是更多.

例如,如果您使用每台计算机许可证,则在将其安装到新的第二台计算机上时,它不应该正常工作.你需要一个好的错误信息来防止额外的支持电话,但不要花费额外的时间使它太难以解决,并且不要用它来击打用户.

另一个例子是限时试验.甚至不用担心简单的事情,比如用户是否可以回滚系统时钟.这样做的人知道他们正在破坏您的许可证,只要用户知道他们何时违反您已经做得足够多.

您需要这么做,因为用户不关心您的许可证.许可证是在没有人关心的情况下制成的东西.没有人读它们,他们真的不应该这样做.因此,告诉用户边界位置的最佳方法是,应用程序的开箱即用行为是否符合许可证.在第一种情况下,这意味着第二次无法在试用版模式下安装或安装.对于后者,它可能只意味着检查配置文件中的纯文本日期.无论哪种方式,请确保您以优雅,乐于助人和尊重的方式处理它.

这就解释了它的意义所做的那么多.但为什么不进一步呢?为什么不插上你能找到的每个小洞?答案分为两部分.首先,如果有人会跨越有意识地违反许可条款的道德门槛- 即使是以一种简单的方式 - 他们也愿意做一些更困难或更危险的事情,比如从洪流中提取你的应用程序站点 - 运行从不受信任的来源下载的应用程序涉及一定的危险.对这些用户来说,使其变得更加困难只是一个小麻烦,并且可能会给付费客户带来问题.保持简单可能会阻止某人挖掘您的应用程序并发布更全面的破解.其次,你几乎没有眼睛可以寻找缺陷; 黑客有很多,他们有更多的实践找到他们.您只需要错过一个小缺陷,您的应用程序将在盗版网站上具有相同的分布,就像您什么都不做.你必须每次都是对的; 他们只需要幸运一次.因此,所需的努力非常高,任何衡量成功的可能性都非常低.

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

由于您无法阻止用户盗用您的产品,因此您最好的做法是让这类用户以某种方式使用它们,从而使您受益.通常可以让他们为你而不是对你工作.考虑到这一点,无论您的应用程序是什么,保留一个几乎完全正常运行且不会过期的免费版本可能是值得的.即使是1美元的价格标签和免费标签之间的差异也是巨大的,如果没有其他原因,客户不必信任您的信用卡.免费版本的产品不仅可以有效地杀死盗版发行版(为什么在合法价格相同的情况下冒着盗版版本的风险?),它有可能大大扩展您的受众群体.

结果是您可能需要提高付费版本的价格,以便最终代替2,000个用户,每个20美元,您有100,000个免费用户,其中500个愿意为"专业"版本支付99美元.与您花费大量时间锁定产品相比,这可以赚到更多的钱.更重要的是,您可以吸引这些免费用户并以几种重要方式利用这种关系.

一个是支持.悲观主义者会借此机会抱怨支持10万名免费用户的成本增加,但反而出现了令人惊奇的事情:您的产品在很大程度上自我支持.你总是看到这个大型开源项目没有资金支持成本.用户将加强并实现目标.

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

另一个是反馈.通过观察您的论坛,您可以了解到您可能从未考虑过的重要改进建议.这可以让您最终将更多免费用户转变为付费用户,并创建更具吸引力的产品,吸引更多的受众.

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

专业版保留的最佳功能是旨在简化企业部署和管理的工具.一个破解者不会认为这些是一个令人信服的足够理由来破解它供自己使用,但对于想要购买300个许可证并将其推出公司范围的企业而言,这是必须的.当然,专业版无论如何都会被盗版,但是:不要因为无论你做什么都无法将产品卖给那些海盗,所以不要为此付出代价,所以这不会给你带来任何收入.

虽然在心理上很难放弃你的产品,但希望你能理解它是最好的方式.不仅如此,这是长期发展的唯一途径.我知道有人认为他们不想这样做.毕竟,他们已经很好地销售他们锁定的20美元产品多年.但这太糟糕了,因为如果你不这样做,最终别人会这样做.而且他们的产品将与您的产品一样好,或者足够接近,他们可以声称拥有这样的产品.然后突然之间,你的定价看起来很糟糕,销量大幅下降,你无能为力.如果必须,您可以选择额外的中间层,但它不太可能对您有所帮助.

  • 伟大的帖子 - 它真正涉及所有正确的细节,为什么不值得打扰复杂的复制保护.即使这个问题是重复的,也值得为这个答案重新打开它.也许一个mod可以合并吗? (4认同)
  • CW?无论如何+1很好的答案,涵盖了所有要点。 (2认同)
  • 好的论点,但错过了关于保护知识产权的观点.如果你的应用程序有一些代码可以做一些有点复杂的事情,那么混淆可以提供扁平复制和粘贴代码之间的区别,并尝试解释和重新设计代码以使其有效.这对于更新尤为重要:如果有人复制了您的混淆代码,那么当您发布更新时,他们必须再次执行此操作 - 至少会导致更多的痛苦/费用/时间.如果你没有以某种方式保护它,它们只是再次复制/粘贴它的工作原理. (2认同)

Ken*_*art 45

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


Eri*_*ert 38

你与很多人分享的秘密并不是秘密.如果您的代码中有秘密内容,则对其进行模糊处理并不起作用; 它只需要进行一次反混淆处理.如果您有一个不想与客户分享的秘密,请不要与您的客户分享.将您的代码编写为Web服务,并将您的超级密码保存在您自己的服务器上,只有您可以看到它.

  • 有趣的想法,但是您会向开发必须在没有数据连接的情况下运行的应用程序(例如 WP7 游戏)的人推荐什么行动方案? (2认同)

Mys*_*tic 23

从广义上讲,那里有三组人.

  • 那些不会购买你的软件并且无法找到任何软件的人,或者根本不使用你的软件的人.不要指望从这个团体赚钱.他们要么依靠自己的技能,要么依赖于破解者(他们倾向于根据你的实际情况和观众的大小来确定他们的时间优先顺序.越有用,越快就能获得破解).

  • 无论您使用何种保护机制,将购买(支付)您的软件的合法用户组.不要使用精心设计的保护机制让合法用户过上艰苦的生活,因为他们无论如何都会为此付费.复杂的保护机制很容易破坏用户体验,您不希望这种情况发生在这个群体中.就个人而言,我会投票反对任何硬件解决方案,这会增加软件的成本.

  • 少数人不会诉诸"不道德"的破解并且会为您的软件付费,因为其功能受到许可机制的保护.你可能不希望这个小组非常容易规避你的保护.但是,您花在保护软件上的所有努力都将得到回报,具体取决于这群人的人数.这完全取决于您正在构建的软件类型.

鉴于你所说的,如果你认为有足够多的少数人可以购买你的软件,那就继续实施某种形式的保护.想想你可以从这个少数民族赚多少钱,而不是你花在保护上的时间,或者花在第三方保护API /工具上的金额.

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


Adr*_*ore 19

您无法阻止人们破解您的软件.

但是,您可以使它们产生裂缝,从而减少您的销售.可以为您的软件发布有效注册码的密钥生成器比从软件中删除注册激励的简单补丁更糟糕.这是因为破解仅适用于一个软件版本,并且将停止使用您发布的下一个软件更新.密钥生成器将继续工作,直到您更改注册密钥算法,这是您不想经常做的事情,因为它会推迟您诚实的客户.

因此,如果您正在寻找一种方法来对抗您的软件的非法密钥生成器,并且由于生成的长注册码而您不想使用不对称加密,您可能需要查看部分密钥验证.

部分密钥验证可确保每个非法密钥生成器仅适用于您软件的一个特定版本.基本上,您所做的是确保软件的每个版本仅链接到用于检查注册码的某些数字的代码.哪些数字完全是随机的,因此破解者必须对您的软件的许多不同版本进行逆向工程,并将所有这些组合到一个密钥生成器中,以便发布适用于您的软件的所有版本的密钥生成器.

如果您定期发布新的软件版本,这会导致众多密钥生成器传播到各种不再有效的软件盗版档案中.潜在的软件盗版者通常会为最新版本寻找破解或密钥,因此他们可能会尝试其中的一些并最终放弃.

我在我的(C++)较新的共享软件游戏中使用了部分密钥验证,它非常有效.在我们遇到关键发电机的许多问题之前我们无法抗拒.Afterewards有很多裂缝和一些密钥生成器只适用于特定版本的游戏,但没有适用于所有版本的密钥生成器.我们定期发布非常小的游戏更新,并使之前存在的所有裂缝无效.

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

  • @Evgeny:只有当您的用户是超级用户时才会这样.我们多年来一直在创建共享软件/休闲游戏,我可以告诉你,我们的大多数用户都无法复制和粘贴.注册窗口甚至附有关于如何复制和粘贴的手册,有些甚至在阅读后也没有. (4认同)

rIP*_*PER 16

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

  • 验证应用程序的不同模块的序列号,并且不使用单个函数调用来进行验证(这样,破解者无法轻松绕过验证).

  • 不仅在启动时检查序列号,在保存数据时进行验证,每周五晚上进行验证,在用户空闲时执行此操作...

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

  • 不要在这些技巧上走得太远,确保您的应用程序在验证注册码时不会崩溃/出现故障.

  • 为用户构建一个有用的应用程序比
    为破解者制作一个牢不可破的二进制文件更重要.


Bin*_*ony 14

您可以..

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

更新:(披露:我对Eazfuscator.NET工作)是什么让微软SLP服务软件的潜在不同的是虚拟化的代码的能力,所以你绝对可以.自问题最初提出以来已过去几年; 今天有更多的产品也可以在类似的基础上工作,例如:

  • 为我的朋友定价,从微软购买许可软件对于正常的ISV来说成本太高 (2认同)

Jos*_*osh 10

.NET Reflector只能打开"托管代码",这基本上意味着".NET代码".因此,您不能使用它来反汇编COM DLL文件,本机C++,经典Visual Basic 6.0代码等.编译的.NET代码的结构使其非常方便,可移植,可发现,可验证等.Net Reflector利用这让你可以进入已编译的程序集,但反编译器和反汇编程序并不是特定于.NET的,并且只要编译器存在就已存在.

您可以使用混淆器使代码更难以阅读,但是如果不使.NET无法读取,您无法完全阻止它被反编译.有一些产品(通常是昂贵的)声称将您的托管代码应用程序"链接"到本机代码应用程序中,但即使这些实际工作,一个坚定的人总会找到一种方法.

然而,当谈到混淆时,你会得到你付出的代价.因此,如果您的代码是如此专有,以至于您必须竭尽全力保护它,您应该愿意投资于一个好的混淆器.

然而,在我15年左右的编写代码的经验中,我意识到过度保护源代码是浪费时间并且几乎没有任何好处.只是尝试阅读原始源代码而不支持文档,注释等可能很难理解.再加上反编译器提出的无意义变量名称以及现代混淆器创建的意大利面条代码 - 您可能不必过多担心窃取您的知识产权的人.


Ano*_*ous 9

是不是真的值得吗?每个保护机制都可以通过充分的决定来打破.考虑您的市场,产品价格,客户数量等.

如果你想要更可靠的东西,那就走硬件钥匙的道路,但这对用户来说相当麻烦而且更贵.软件解决方案可能浪费时间和资源,他们唯一能给你的是"安全"的错误感.

几乎没有想法(没有一个是完美的,因为没有完美的想法).

并且不要在上面浪费太多时间,因为这些破解者在使用典型技术方面拥有丰富的经验,并且领先于您.除非您想要使用大量资源,否则可能会更改编程语言(以Skype方式执行).

  • 就我而言,这确实值得。在我实施部分密钥验证并更改现有产品的注册密钥方案后,销售额大幅上升。所有软件都可以破解,问题是你把休闲软件盗版的门槛提高到多高。 (2认同)

Jör*_*tag 9

如果您希望人们能够运行您的代码(如果您不这样做,那么为什么您首先编写它?),那么他们的CPU需要能够执行您的代码.为了能够执行代码,CPU需要能够理解它.

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

只有一种方法可以确保您的用户无法获取您的代码:不要向他们提供您的代码.

这样就可以实现两种方式:软件即服务(SaaS)的,也就是说,你在运行软件服务器,只有让用户远程访问它.例如,这是Stack Overflow使用的模型.我很确定Stack Overflow不会混淆他们的代码,但你无法反编译它.

另一种方式是设备模型:您不必向用户提供代码,而是为他们提供包含代码的计算机.这是游戏机,大多数手机和TiVo使用的模型.请注意,这仅在您"拥有"整个执行路径时才有效:您需要构建自己的CPU,自己的计算机,编写自己的操作系统以及自己的CLI实现.然后,只有这样才能保护您的代码.(但请注意,即使是最微小的错误也会使您的所有保护措施无效.微软,苹果,索尼,音乐行业和电影业都可以证明这一点.)

或者,您可以什么也不做,这意味着您的代码将受到版权法的自动保护.


小智 9

有几个 .NET 混淆工具的详细比较表:

比较表

屏幕截图取自obfuscators.io


Jon*_*son 8

不幸的是,你不会逃避这一点.最好的办法是用C和P/Invoke编写代码.

有一个小的catch-22,有人可以将您的应用程序反编译为CIL并终止任何验证/激活代码(例如,调用您的C库).请记住,用C语言编写的应用程序也是由更持久的黑客进行逆向工程(现在看看游戏破解的速度有多快).没有什么能保护您的申请.

最后它的工作方式很像你的家,保护得足够好,这样太费劲了(意大利面条代码在这里有帮助),所以攻击者只是移动到隔壁邻居(竞争:)).看看Windows Vista,必须有10种不同的方法来破解它.

有些软件包可以加密你的EXE文件并在允许用户使用它时对其进行解密,但是再一次,这是使用毫无疑问已被破解的通用解决方案.

激活和注册机制针对的是"普通乔:"那些没有足够的技术精通来绕过它的人(或者知道他们可以绕过它).不要打扰饼干,他们手上的时间太长了.


boh*_*nko 8

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

这些是想法:

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

其次,您需要开发一种技术,以某种可靠的方式重写某些代码的CIL.

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

将一些逻辑重写为C++/CLI,并将托管代码与非托管混合.这将加强拆解.在这种情况下,不要忘记提供x64二进制文件.


Jus*_*ner 7

是.是真的.如果代码没有被混淆,.NET代码非常容易进行逆向工程.

混淆会给试图对软件进行逆向工程的人们带来一丝烦恼.根据您获得的版本,您将获得不同级别的保护.

Visual Studio包含一个Dotfuscator版本.由于它是捆绑版本,因此您肯定无法获得最强大的混淆.如果你看一下他们的功能列表,你就会看到你所缺少的内容(以及应用程序将使你的代码更安全的确切内容).

还有其他几个免费或开源的.NET混淆器(但我不能评论他们使用的质量或各种方法):

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

  • 这不只是"如果他们真的想看看你的软件是如何工作的,他们就会".如果他们关心,他们可能会猜测而不看.99.9%以上的软件没有任何神奇的小精灵尘埃算法.编程的难点不是一些特殊的秘密技术.它只是让所有部件排成一行并正常工作. (11认同)
  • @Ken - 嘘!你不能让世界其他人知道大多数时候我们都没有使用神奇的小精灵尘埃算法. (9认同)
  • Justin:Love算作魔术算法吗?爱是让我的*程序与众不同的原因.我认为你不能拆解爱情. (9认同)

Sol*_*ake 6

好吧,你不能完全保护你的产品免受破解,但你可以最大化/提高安全级别,并使新手和中间破解者有点太难以破解.

但请记住,没有什么是不可破解的,只有服务器端的软件得到很好的保护,不能破解.无论如何,为了提高应用程序的安全级别,您可以采取一些简单的步骤来防止某些破解程序"并非全部"破解您的应用程序.这些步骤将使这些破解者疯狂,也许绝望:

  • 混淆你的源代码,显然这会使你的源代码看起来像一团糟,不可读.
  • 在应用程序内触发几个随机检查例程,例如每两小时,24小时,一天,一周等,或者可能在用户采取的每个操作之后.
  • 在服务器上保存已发布应用程序的MD5校验和,并实现一个例程,该例程可以检查当前文件MD5校验和与服务器端的实际文件,并随机触发.如果MD5校验和已更改,则表示此副本已被盗版.现在你可以阻止它或发布一个更新来阻止它,等等.
  • 尝试制作一个例程,可以检查您的某些代码(函数,类或特定例程)是否实际上已被修改或更改甚至删除.我称之为(代码完整性检查).
  • 使用免费的未知包装工具打包您的应用程序.或者,如果你有钱,可以选择商业解决方案,如Thamida.NET Reactor.这些应用程序会定期更新,一旦破解者解压缩您的应用程序,您可以从这些公司获得新的更新,一旦获得新的更新,您只需打包程序并发布新的更新.
  • 定期发布更新并强制您的客户下载最新更新.
  • 最后使您的应用程序非常便宜.不要太贵.相信我,你会得到更多满意的客户,而破解者只会离开你的应用程序,因为不值得花时间去破解一个非常便宜的应用程序.

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

最后,您还需要考虑花时间编写优质且高质量的应用程序.不要浪费时间编写复杂的安全层.如果一个好的饼干想要破解你的应用程序他/她会做什么,无论你做什么...

现在去为破解者实施一些玩具......


lor*_*ron 5

.NET Reactor

更新

Jared指出de4dot声称可以反编译它.

.NET Reactor通过将.NET程序集转换为无法理解为CIL的非托管进程,并且没有现有工具可以反编译,为您的敏感知识产权提供全面保护.黑客无法访问任何可理解的源代码形式.

.NET Reactor许可功能强大而灵活,允许您通过使用硬件和软件锁来强制执行许可条件并保护您的收入流.许可证管理器可以在几秒钟内构建试用版或永久许可证.完整记录的软件开发工具包(SDK)以及示例,允许您直接从代码中调用许可系统,允许您创建许可系统的自定义扩展.

  • 我试图联系那些家伙,我有一些问题,我有他们的产品,但他们从来没有回复过.你试过他们的产品吗?我已经选择了智能组装,他们的产品和支持都非常好.但正如我在问题中已经说过,混淆是一种方式,但不是完全证据. (3认同)
  • 如果"没有现有工具可以反编译",为什么它在de4dot功能页面上被列为支持的混淆器/打包器?:https://bitbucket.org/0xd4d/de4dot/ (2认同)

Mat*_*nik 5

还有Salamander,它是Remotesoft的原生.NET编译器和链接器,可以在没有.NET框架的情况下部署应用程序.我不知道它的说法有多好.


Sho*_*ban 5

如果微软可以提出解决方案,我们就不会有盗版Windows版本,因此没有什么是非常安全的.以下是Stack Overflow中的一些类似问题,您可以实现自己的保护方式.如果您要发布不同版本,那么您可以针对不同版本采用不同的技术,因此当第一个被破解时,第二个可以接管.