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

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

此外,还可以将C#应用程序转换为本地代码,Xenocode代价过高。

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

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


你不能。

您可以采取一些步骤来使其更加困难,但最终本地计算机上的任何可执行文件都是可破解的。 最终,该代码必须转换为本地机器代码,并且每个可运行的应用程序都易受攻击。

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

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

  • 混淆你的代码。 Dotfuscator有免费版本,并附带Visual Studio。
  • 使用公钥/私钥或非对称加密来生成您的产品许可证。 这确保只有您可以生成您的许可证代码。 即使您的应用程序被破解,您也可以确定它们不会为您的应用程序释放密钥生成器,因为不可能扭转密钥生成算法。
  • 使用第三方打包程序将.NET可执行文件打包到加密的Win32包装应用程序中。 Themida是更好的之一。 这阻止了人们在.NET Reflector中反映你的应用程序,并且让解包反转变得很痛苦。
  • 写你自己的定制打包机 。 如果第三方包装商太贵,请考虑编写自己的包装。 有时候,定制包装器可能会非常有效,因为关于如何解包它们的方法并不多。 本教程如何编写自己的打包程序提供了大量有关编写自己的Win32打包程序的信息。
  • 但最终,如果人们希望你的应用程序破解,他们会。 看看那里的所有商业软件,它们都有大量的资源来保护他们的应用程序,然而在应用程序甚至公开发布之前它们都被破解了。

    一个熟练的逆向工程师可以启动IDA-Pro,并且无论您做什么,都可以像黄油一样切入您的应用程序。 一个打包的应用程序可以解压缩,混淆只会阻止它在公园散步。 您用复杂的许可证代码所做的所有努力都可以通过单字节补丁来解决。

    你只需要承认人们非常有可能会盗用你的软件。 有些人永远不会为你的申请付款,无论这些人是你不需要担心的人。

    然而,许多企业在那里永远不会冒险提起诉讼,而且乐于购买软件许可证,并且许多计算机用户不愿冒险,发现错误或不具备足够的技术知识来剽窃他们。 这些都是您的真正客户,您应该专注于为他们提供良好的用户体验,并忽视破解软件的人员。

    我之前有过盗版的申请,我认为这是个人冒犯。 在这里,我是一个小时代的开发者,将我的心和灵魂倾注在应用程序中,这些人胆怯地从我身上偷盗?! 他们直接从我口袋里拿钱!

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

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


    您无法完全保护任何应用程序(托管或不托管)。 如果Playstation和iPad等系统可能受到破解 - 供应商甚至控制硬件 - 您的应用有什么希望? 谢天谢地,你并不是真的想。 在我看来,你需要确保你的应用程序足够好,以至于有人不会意外地盗用你的产品,而不会再更多。

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

    另一个例子是时间限制试验。 甚至不用担心简单的事情,比如用户是否可以回滚系统时钟。 有人知道他们正在破坏你的许可证,只要用户知道他们什么时候违反了你的做法就足够了。

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

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

    最终,如果有人想盗用你的应用程序(而不是仅仅使用它),那么这就是他们的主要目标。 没有什么可以阻止他们。 这是软件的本质; 一旦组成你的产品的文件在用户的计算机上,他们就可以随心所欲地处理它们。 这在Java或.NET等托管环境中尤为重要,但它也绝对适用于本机代码。 时间在他们身边,并且给予足够的时间任何数字安全都可以被打破。

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

    其结果是,您可能需要提高付费版本的价格,以至于最终用户不是2,000个用户,而是20美元,每个用户有100,000个免费用户,其中500个愿意为“专业版”支付99美元。 这比您花费大量时间锁定您的产品赚得更多。 除此之外,您可以通过几种重要方式吸引这些免费用户并充分利用这种关系。

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

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

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

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

    为专业版预留的最佳功能是旨在简化企业部署和管理的工具。 一个黑客并不认为这是一个引人注目的理由,不适合他自己的使用,但对于一个想要购买300个许可证并将其推到公司范围内的企业来说,这是必须的。 当然,专业版本无论如何都会被盗版,但是不要为此付出汗水,因为无论您做了什么,您都可能无法将产品出售给盗版者,因此这不会为您带来任何收入。

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


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

    链接地址: http://www.djcxy.com/p/14361.html

    上一篇: Protect .NET code from reverse engineering?

    下一篇: What is wrong with my Quaternion rotation in OpenGL?