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

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

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

C#提供了很多功能,并且是我的代码的理想语言,因此在C中再次编写整个代码库是不可能的 .

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

回答(30)

2 years ago

你不能 .

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

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

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

  • Obfuscate 您的代码 . Dotfuscator有免费版,并附带Visual Studio .

  • 使用public/private keyasymmetric encryption 生成产品许可证 . 这可确保您只能生成许可证代码 . 即使您的应用程序被破解,您也可以确保它们不会为您的应用程序释放密钥生成器,因为无法撤消密钥生成算法 .

  • 使用 third-party packer 将.NET可执行文件打包到加密的Win32包装器应用程序中 . Themida是最好的之一 . 这会阻止人们在.NET Reflector中反映您的应用程序,并且在解压缩时会很麻烦 .

  • 自己编写 custom packer . 如果第三方包装商太贵,可以考虑自己编写 . 有时自定义打包程序非常有效,因为没有很好的方法来解压缩它们 . 教程How to write your own packer提供了大量有关编写自己的Win32打包程序的信息 .

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

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

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

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

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

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

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

2 years ago

你真的可以't fully secure any application (managed or not). If systems like the Playstation and iPad can get cracked — where the vendor even controls the hardware — what hope does your app have? Thankfully, you don' . 在我看来,您需要确保您的应用程序足够安全,以免有人不小心盗用您的产品,而不是更多 .

例如,如果您使用每台计算机许可证,则在将其安装到新的第二台计算机上时,它不应该正常工作 . 您需要一个好的错误消息来阻止额外的支持呼叫,但不要花费额外的时间使其难以解决并且不会让用户过度使用它 .

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

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

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

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

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

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

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

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

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

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

专业版保留的最佳功能是旨在简化企业部署和管理的工具 . 一个 Cookies 赢了,因为你可能不会花费任何收入 .

虽然在心理上很难放弃你的产品,但希望你能理解它是最好的方式 . 不仅如此,'s the only way to go in the long term. I know someone is out there thinking that they don'想要这样做 . 毕竟,他们太糟糕了,因为如果你不这样做,最终别人会这样做 . 而且他们的产品将与您的产品一样好,或者足够接近,他们可以声称拥有这样的产品 . 然后突然间你的定价看起来很疯狂,销量急剧下降,而且不太可能帮助你 .

2 years ago

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

2 years ago

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

2 years ago

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

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

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

  • 少数人不会诉诸"unethical"破解并将支付您的软件,因为其功能受许可机制保护 . 你可能不会重建't want to make it exceedingly easy for this group to circumvent your protection. However, all that effort you spend on protecting your software will pay back, depending on how big this group of people is. This entirely depends on the type of software you' .

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

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

2 years ago

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

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

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

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

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

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

似乎有一个开源.NET framework for Partial Key Verification,虽然我没有尝试过 .

2 years ago

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

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

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

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

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

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

2 years ago

您可以..

Microsoft SLP ServicesInishTech's Software Potential提供了在不影响应用程序功能的情况下帮助保护代码的功能 .

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

2 years ago

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

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

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

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

2 years ago

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

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

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

这可以通过两种方式实现:Software as a service(SaaS),即您在服务器上运行软件,只允许您的用户远程访问它 . 例如,这是Stack Overflow使用的模型 . 我'm pretty sure that Stack Overflow doesn' t混淆了他们的代码,但你不能反编译它 .

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

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

2 years ago

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

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

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

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

2 years ago

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

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

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

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

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

2 years ago

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

这些是想法:

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

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

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

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

2 years ago

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

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

Visual Studio包含Dotfuscator的版本 . 因为's a bundled version, you'绝对不会得到最强的混淆 . 如果您查看其功能列表,则会丢失'll see exactly what you'(以及应用程序将使您的代码更安全的确切内容) .

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

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

2 years ago

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

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

  • 对您的源代码进行模糊处理,显然这会使您的源代码看起来像一团糟,难以理解 .

  • 在应用程序内触发几个随机检查例程,例如每两小时,24小时,一天,一周等,或者可能在用户采取的每个操作之后 .

  • 在您的服务器上保存已发布应用程序的MD5校验和,并实现一个例程,该例程可以检查当前文件MD5校验和与服务器端的实际文件,并使其随机触发 . 如果MD5校验和已更改,则表示此副本已被盗版 . 现在你可以阻止它或发布一个更新来阻止它,等等 .

  • 尝试制作一个例程,可以检查您的某些代码(函数,类或特定例程)是否实际上已被修改或更改甚至删除 . 我称之为(代码完整性检查) .

  • 使用免费的未知包装工具打包您的应用程序 . 或者,如果您有钱,请选择商业解决方案,例如Thamida.NET Reactor . 这些应用程序会定期更新,一旦破解者解压缩您的应用程序,您可以从这些公司获得新的更新,一旦获得新的更新,您只需打包程序并发布新的更新 .

  • 定期发布更新并强制您的客户下载最新更新 .

  • 最后让您的应用程序非常便宜 . 唐't make it too expensive. Believe me, you will get more happy customers and crackers will just leave your application, because it isn' t值得花时间破解一个非常便宜的应用程序 .

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

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

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

2 years ago

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

2 years ago

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

2 years ago

.NET Reactor

Update

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

.NET Reactor通过将.NET程序集转换为无法理解为CIL的非托管进程,以及现有工具无法反编译,为您的敏感知识产权提供全面保护 . 黑客无法访问任何可理解的源代码形式 . .NET Reactor许可功能强大而灵活,允许您通过使用硬件和软件锁来强制执行许可条件并保护您的收入流 . 许可证管理器可以在几秒钟内构建试用版或永久许可证 . 完整记录的软件开发工具包(SDK)以及示例,允许您直接从代码中调用许可系统,允许您创建许可系统的自定义扩展 .

2 years ago

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

2 years ago

客户端上运行的任何内容都可以反编译和破解 . 否认只会让事情变得更难 . 我不知道你的申请,但99%的时间我认为这不值得努力 .

2 years ago

混淆代码! Obfuscating C# Code中有一个例子 .

2 years ago

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

鉴于很少有人甚至会费心去尝试,大多数混淆器可以解决,是否值得花时间和精力?

你最好把时间花在改进产品上,以便让更多人想要使用它 .

2 years ago

只是添加一个警告:如果你要使用混淆,检查一切仍然有效!混淆可能会改变类名和方法名等内容 . 因此,如果您使用反射来调用某些方法和/或类(如插件架构中),您的应用程序可能会在混淆后失败 . 堆栈跟踪也可能无法跟踪错误 .

2 years ago

如果它是用.NET编写的并编译为CIL,则可以反映出来 . 如果需要考虑安全性并避免混淆,那么我建议使用非托管语言编写应用程序,这种语言本质上更难以进行逆向工程 .

2 years ago

如何确保应用程序不被篡改,以及如何确保注册机制不能进行逆向工程 .

两者都有相同的非常简单的答案:不要将对象代码分发给不受信任的方,例如(显然)您的客户 . 在您的机器上托管应用程序是否可行仅取决于它的作用 .

如果它不是web application,也许你可以允许SSH登录,X转发到应用服务器(或者Remote Desktop Connection,我猜,对于Windows) .

如果你给讨厌的类型的人提供目标代码,并且他们认为你的程序可能很有趣,那么它就会破解 . 没办法解决它 .

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

如果你使用硬件密钥,它会使 生产环境 更加昂贵,而你的用户会讨厌你 . 因为软件制造商不信任你(我想象),所以在地板上爬行并拔掉27种不同的USB物品是一个真正的婊子 .

有些软件包可以加密您的EXE并在允许用户使用它时对其进行解密

当然,解决它的方法是破解“我可以使用它”测试,以便它总是返回true .

一个令人讨厌的技巧可能是使用在程序中其他地方执行测试的操作码的字节值,这会使程序以高概率崩溃,除非该值恰到好处 . 它会让你链接到一个特定的架构,但:-(

2 years ago

只需制作一个好的应用程序并编写一个简单的保护系你选择什么保护并不重要,它会被逆转......所以不要浪费太多时间/钱 .

2 years ago

抱歉,完全保护应用程序是不可能的 .

2 years ago

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

如果您想坚持使用.NET并希望尽量减少获取源代码的可能性,那么您可能需要考虑将其部署为跨Web服务器的ASP.NET应用程序,而不是将其作为Windows窗体应用程序 .

2 years ago

坦率地说,有时我们需要对代码进行模糊处理(例如,注册许可证类等) . 在这种情况下,您的项目不是免费的 . 国际海事组织,你应该支付一个好的粉丝 .

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

2 years ago

我建议使用Obfuscator .