保护我的代码免遭逆向工程

2023-11-21

正如类似问题中所讨论的here and here我想保护我的代码免受逆向工程的影响。

我的情况是这样的Simucal在他的(优秀)答案中描述here:

基本上,归结为 你唯一的机会是 源盗窃的目标是如果您 有一些非常具体、难以 工程师,与您相关的算法 域名可以让您在您的 竞赛。这只是关于 只有这样才划算 尝试对一个小 您的申请的一部分。

我也正是这样的情况。一种难以设计的算法,对于我们的特定领域来说是优雅且有价值的。

经过几个月的微调和开发,最终结果非常紧凑(大约 100 行代码)并且优雅。我想保护代码的这个特定部分免受逆向工程的影响,或者至少使其变得合理困难。

该场景是一个用 C# 编写的富客户端应用程序,我必须部署这部分代码 - 我无法从 Web 服务执行它。

我认为由于性能原因(以及跨界问题),提取代码并在非托管本机二进制文件中重写它不是一种选择。

最初我想做简单的混淆,但考虑到代码的大小,我认为这不会提供太多保护。

理想情况下,我想保护我的整个应用程序,但有两个主要问题似乎使普通混淆器和第三方加壳器难以使用:

  1. 该应用程序提供了一个插件接口,因此某些程序集(和接口/类)不应被混淆和打包

  2. 我们仍然希望在收到错误报告时能够获得真实的堆栈跟踪 - 可能这可以通过我对真实代码的映射混淆来完成。

抛开这些问题不谈(尽管我也希望对此有任何意见),有什么好方法可以保护一小部分代码免受逆向工程的影响?我不担心任何人更改或破解代码,但想让代码变得难以理解和逆向工程。


这是不可能的。如果您的代码可以运行,那么它就可以被读取和逆向工程。你所能做的就是让它变得更难一点,相信我,这只会是一个little更难。你可能不喜欢这个事实,但大多数破解者在破解方面比其他人更擅长让事情变得难以破解。为保护您的代码而付出的努力通常是不值得的,特别是如果它对您的付费客户不利的话。见证 DRM 令人震惊的失败案例。

我的建议是不要担心。如果你的算法确实新颖,请寻求专利(尽管 Bilski 的决定变得有点困难,除非你将其与特定的硬件实现联系起来)。依赖商业秘密也是没有用的,除非你只将你的软件分发给那些签署合同的人,以确保他们不会允许不受限制的访问。然后,你必须有办法来监管这一点。一旦您将二进制文件放在互联网上或在没有合同的情况下分发它们,我相信您将被视为失去了商业秘密状态。

依赖许可也充满危险 - 您可能认为可以在许可中插入禁止逆向工程的条款,但世界各地的许多司法管辖区明确禁止这些条款。而俄罗斯黑帮,无论谁对大部分破解负责,无论如何都不太可能遵守上述规定。

为什么不专注于让你的产品做到最好呢?我们的目标是保持领先地位,而不是完全将他们拒之门外。成为第一个交付产品并始终在竞争群体中拥有最好的产品将确保您的繁荣,这远比在无用的保护上浪费大量精力(IMNSHO)要重要得多。

这只是我的看法。我可能错了。我以前错了,你只需要问我的妻子:-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

保护我的代码免遭逆向工程 的相关文章

随机推荐

  • ASP.Net MVC 中的实时视频聊天 + 录制解决方案 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我想在 ASP NET MVC 中开发一个应用程序 这是详细的场景 应用程序应提供 实时 视频聊天的设施 不应该有任何延迟 可接受的延迟低于 4 秒 但由于这是一次面试 超过 4 秒
  • 适用于 Android 的 Visual Studio 模拟器 - 模拟设备运行需要内部虚拟网络交换机

    Problem 我想用适用于 Android 的 Visual Studio 模拟器但每当我尝试启动它时 它都会失败 日志的最后部分是 27 9 2015 11 10 38 Informational Session Started 27
  • 使用 jQuery 获取多个文件选择的所有值[重复]

    这个问题在这里已经有答案了 可能的重复 使用 javascript 从多文件上传控件中检索文件名 收到
  • 为什么 execve() 的第一个参数必须是可执行文件的路径

    我了解 execve 和系列要求其参数数组的第一个参数与其第一个参数也指向的可执行文件相同 也就是说 在此 execve prog args env args 0 通常与 prog 相同 但我似乎无法找到有关原因的信息 我也理解可执行文件
  • 动态图标 PWA 清单

    我正在使用 angular5 制作一个白色标签 PWA 我想知道是否可以根据 URL 中的信息动态更改清单文件中的 png 图标 我想要为每个独特的组织使用不同的图标 like www mywebsite com organization1
  • 基础的定义必须先于派生合约的定义

    我有两个不同的文件 即 Project1 sol 和 Project2 sol Project2 sol 就像 import Project1 sol contract Project2 address newProject1Address
  • 使用 ggplot 绘制大量时间序列。是否可以加快速度?

    我正在处理数千个气象时间序列数据 可以从此处下载示例数据 https dl dropboxusercontent com s bxioonfzqa4np6y timeSeries txt 在我的 Linux Mint PC 64 位 8GB
  • 使用dispatch_async加速搜索?

    我正在尝试加快我的应用程序搜索速度 当有大量数据时它会出现滞后 所以我正在尝试拆分搜索谓词 on UI通过使用dispatch async not dispatch sync如果我使用它 没有什么不同 问题是当我使用dispatch asy
  • 重新连接后 Chrome net::ERR_HTTP2_PROTOCOL_ERROR 200

    我正在将节点服务器与处理服务器发送事件流的 Express 应用程序一起使用 这是通过启用了 http2 的 NginX 进行代理的 SSE 事件通过 React 应用程序中的 EventSource 来使用 我每 10 秒发送一条心跳消息
  • 记录类型的前向声明

    有没有像标题那样的东西 我正在尝试在转换过程中执行此操作API 结构 并遇到了一些我以前没有遇到过的事情 PFNReaderTranslatedDispatch function var msg TMsg BOOL stdcall PFNR
  • Google 应用引擎实体组

    据我从应用程序引擎教程中了解到 实体组仅出于事务目的而存在 仅在事务需要时才使用实体组 来自教程 位于同一实体组中的定义是具有相同的根 那么 具有超过 1 个层次结构级别有什么用呢 也就是说 为什么我要用 A gt B gt C A是根 B
  • 检查数组中的所有布尔值是否都为 true?

    假设我有这个布尔数组 bool something 4 false false false false 现在 有没有简单的方法可以检查该数组中的所有值是否同时为真 假 而不是这样做 if something 0 false somethin
  • 我必须删除它吗? [Qt]

    在下面的示例中 我是否必须从堆中删除对象 如果是 怎么办 include
  • 我如何准备要发布的 Jetpack compose 应用程序,@Preview 可组合项怎么样?

    我的 Jetpack compose 应用程序的源代码加载了 Preview 可组合项 我通过从源代码中删除所有这些 Preview 可组合项来准备发布我的应用程序 就像我们所做的那样 例如 使用日志方法 有什么办法可以自动化这个删除过程吗
  • 使用浏览器作为桌面 UI

    如何使用浏览器作为桌面应用程序的 UI 到目前为止我想出的方法是 使用所有 HTML Javascript 问题 无法访问文件系统或其他任何内容 在使用应用程序时运行本地网络服务器 问题 用户完成后如何杀死它 我的用户的技术水平不足以使用
  • 通过 .net 会员提供商进行编程登录

    我正在尝试对一段需要当前登录用户进行测试的代码进行单元测试 使用 Net 2 0 Membership Provider 我如何以编程方式作为用户登录以进行此测试 if Membership ValidateUser user1 P ssw
  • 更改 jQuery Mobile 的默认数据主题

    通过 jQuery Mobile 我可以使用自定义主题创建页面 div 现在这可以工作 但要求我在每个页面中以及每次添加新页面时添加此行 我尝试添加data theme s 到 body 标签 但这没有影响 除了每页手动设置之外 还有什么方
  • 确定 matplotlib 轴大小(以像素为单位)

    给定一组axes在 matplotlib 中 有没有办法确定其大小 以像素为单位 我需要根据调整更大或更小的数字来缩放事物 特别是我想更改线宽 使其与轴尺寸成比例 这给出了以英寸为单位的宽度和高度 bbox ax get window ex
  • 如何从对象数组列表中找到最大元素?

    Collections max arraylist 不起作用 并且常规for循环也不起作用 我所拥有的是 ArrayList
  • 保护我的代码免遭逆向工程

    正如类似问题中所讨论的here and here我想保护我的代码免受逆向工程的影响 我的情况是这样的Simucal在他的 优秀 答案中描述here 基本上 归结为 你唯一的机会是 源盗窃的目标是如果您 有一些非常具体 难以 工程师 与您相关