草庐IT

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

coder 2023-07-06 原文

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

也可以将 C# 应用程序转换为 native 代码,并且 Xenocode成本太高。

C# 提供了很多功能,是我编写代码的理想语言,所以用 C++ 重新编写整个代码库是不可能的。

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

最佳答案

你不能。

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

你要做的只是让它变得足够难以破解,以至于不值得人们为难。

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

  • 混淆您的代码。 Dotfuscator有免费版并随 Visual Studio 一起提供。
  • 使用public/private key非对称加密来生成您的产品许可证。这确保只有可以生成您的许可证代码。即使您的应用程序破解了,您也可以确定他们不会为您的应用程序发布 key 生成器,因为无法逆转 key 生成算法。
  • 使用第三方打包器将您的 .NET 可执行文件打包到加密的 Win32 包装器应用程序中。 Themida是更好的之一。这会阻止人们在 .NET Reflector 中反射(reflect)您的申请并且拆包倒车很痛苦。
  • 编写您自己的自定义打包程序。如果第三方打包器太贵,请考虑自己编写。有时自定义打包程序可能非常有效,因为没有关于如何解包它们的公开方法。教程 How to write your own packer 提供了大量有关编写您自己的 Win32 打包程序的有用信息。

但最终,如果人们想要破解您的应用程序,他们会的。看看那些拥有大量资源来保护其应用程序的商业软件,但它们甚至在应用程序向公众发布之前就被破解了。

熟练的逆向工程师可以火起来IDA-Pro无论您做什么,都可以像黄油一样切入您的应用程序。打包的应用程序可以解包,混淆只会阻止它在公园散步。您使用复杂许可证代码的所有辛勤工作都可以通过单字节补丁来完成。

您只需要接受人们盗版您的软件的可能性非常大。有些人无论如何都永远不会为您的申请付费,而这些人您无需担心。

然而,有许多企业永远不会冒诉讼的风险并乐于购买软件许可证,而许多计算机用户要么不想冒险,要么发现它有误,要么对技术不够了解盗版。这些是您真正的客户,您应该集中精力为他们提供良好的用户体验,而忽略那些破解您软件的人。

我的应用程序以前曾被盗版,我认为这是对我个人的侮辱。在这里,我是一个小型开发人员,将我的心血倾注到一个应用程序中,而这些人有胆量盗版我的应用程序吗?!他们直接从我口袋里拿钱!

我立即添加了一堆严酷的 DRM 代码,并试图破坏任何使用非法或破解副本的人。我当然应该一直致力于让我的应用程序变得更好,而不是试图阻止不可避免的事情。不仅如此,我还伤害了我的真正的客户,因为我提供的所有这些额外保护。

经过长时间的战斗,我意识到我是在与潮流作斗争,所有这些浪费的时间都是徒劳的。我取出了除了准系统许可功能之外的所有电话主页代码,再也没有回头看。

关于c# - 保护 .NET 代码免受逆向工程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/506282/

有关c# - 保护 .NET 代码免受逆向工程?的更多相关文章

  1. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  2. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  3. ruby-on-rails - Rails 源代码 : initialize hash in a weird way? - 2

    在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has

  4. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  5. ruby-on-rails - 浏览 Ruby 源代码 - 2

    我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru

  6. ruby - 模块嵌套代码风格偏好 - 2

    我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的

  7. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  8. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  9. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  10. ruby - Net::HTTP 获取源代码和状态 - 2

    我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur

随机推荐