- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如类似问题中所述here和 here我想保护我的代码免受逆向工程。
我的情况是Simucal在他的(优秀)回答中描述 here :
Basically, what it comes down to is the only chance you have of being targeted for source theft is if you have some very specific, hard to engineer, algorithm related to your domain that gives you a leg up on your competition. This is just about the only time it would be cost-effective to attempt to reverse engineer a small portion of your application.
我正好遇到这种情况。一种难以设计的算法,对我们的特定领域来说是优雅且有值(value)的。
经过几个月的微调和开发,最终结果非常紧凑(大约 100 行代码)和优雅。我想保护代码的这个特定部分免受逆向工程的影响,或者至少让它变得合理困难。
该场景是一个用 C# 编写的富客户端应用程序,我必须部署这部分代码 - 我无法从网络服务执行它。
我认为,出于性能原因(和跨界问题),提取代码并在非托管 native 二进制文件中重写它不是一种选择。
最初我想做简单的混淆,但考虑到代码量很小,我认为这不会提供太多保护。
理想情况下,我想保护我的整个应用程序,但有两个主要问题似乎使普通混淆器和第 3 方打包器难以使用:
应用程序提供了一个插件接口(interface),因此不应混淆和打包一些程序集(和接口(interface)/类)
我们仍然希望在收到错误报告时能够获得真实的堆栈跟踪 - 可能这可以通过我对真实代码的映射混淆来完成。
将这些问题搁置一旁(尽管我也希望对此提出任何意见),保护我的一小部分代码免受逆向工程影响的好方法是什么?我不担心任何人更改或破解代码,但想让它变得难以理解和逆向工程。
最佳答案
这是不可能的。如果您的代码可以运行,那么它就可以被读取和逆向工程。你所能做的就是让它变得更难一点,相信我,它只会更难一点。你可能不喜欢这个事实,但大多数破解者在破解方面比其他任何人都更擅长让事情变得难以破解。为保护您的代码付出的努力通常是不值得的,尤其是当它对您的付费客户不利时。见证 DRM 的惊人失败。
我的建议是不要担心。如果你的算法真的很新颖,那就申请专利(尽管 Bilski 的决定让这变得有点困难,除非你将它与特定的硬件实现联系起来)。依赖商业 secret 也是无用的,除非您只将您的软件分发给那些签署契约(Contract)以确保他们不会允许不受限制的访问的人。然后,你必须有办法对此进行监管。一旦您将二进制文件发布到互联网上或在没有契约(Contract)的情况下分发它们,我相信您将被视为失去商业 secret 身份。
依赖许可也充满危险 - 您可能认为您可以在许可中插入禁止逆向工程的条款,但世界上许多司法管辖区明确禁止这些条款。无论如何,对大部分破解负责的俄罗斯黑帮都不太可能遵守上述规定。
您为什么不专注于使您的产品达到最佳状态呢?目标是保持领先于人群,而不是将他们完全拒之门外。在竞争激烈的群体中率先交付并始终拥有最好的产品,远比将大量精力浪费在无用的保护上更能确保您的繁荣(恕我直言)。
这只是我的看法。我可能是错的。我以前就错了,你只需要问我的妻子:-)
关于c# - 保护我的代码免受逆向工程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/584828/
我有 *.ipa 文件,它是 iphone 应用程序。 是否可以在该 ipa 中使用逆向工程并提取代码..? 最佳答案 嗯,这不是真正的黑客攻击,但它确实可以帮助您识别 UI 的某些部分...请执行以
我一直在尝试对游戏的功能进行逆向工程,但我有点困惑。我对逆向工程还很陌生(顺便说一句,我正在使用 ollydbg),所以我还不太了解所有的技巧和细节。 无论如何这是我的问题。当您在游戏中拾取任何元素时
我被要求抓取一个 Flash 网站,该网站似乎正在通过 AMF 协议(protocol)使用某种服务器端调用。我完全不熟悉这个协议(protocol),但找到了这个库(http://www.pyamf
我的问题是我正在使用一个巨大的网络应用程序(学校系统),没有内部逻辑的文档。我需要对特定值进行批量更新,但我不知道MySQL数据库中的哪些表包含要更新的相关数据。该应用程序是从 php 自行运行的。有
我正在学习如何逆向一个程序,我想知道..如果我用调试信息编译: gcc -g .... 这对逆向过程有什么帮助吗?如果我这样做,我会提供额外的信息吗?我找不到有关该主题的任何信息。 最佳答案 它通过将
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
今天我决定使用 IDA Pro 反编译一个用 Visual C++ 编写的简单“Hello world”程序。 根据我以前的知识,我确定我不会在可执行文件入口点找到对 printf 的立即调用,我是对
我正在使用 PowerDesigner 为我的 SQL Server 数据库建模。我使用逆向工程选项来导入我的数据库。我的问题是表中的默认数据未导入。 有人知道如何导入表格中的数据吗? 最佳答案 我们
我一直在分析一些 230V 通信并试图找出协议(protocol)的校验和算法。从我了解到的通信结构如下: 第一个 block 总是相同的,必须是某种开始结构(910hex) 然后嵌套5个 block
在 AmigaOS 中的 Devs:Monitors 中找到的文件,它们包含什么? 它们的内部格式是什么?您如何修补一个或从头开始创建一个? 最佳答案 Amiga 程序 MonEd ( http://
我正在使用 VS2013 更新 3 的“逆向工程”模型优先功能从现有数据库开发 EF 模型。不幸的是,我无法完全控制数据库架构,它使用表和列前缀(例如 tblPerson , cFirstName,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在尝试对 APK 文件进行逆向工程。 我尝试了 apk2jar 来获取类和资源文件。但我无法解压缩 Assets 。 有人可以帮忙吗? 最佳答案 使用 apktool。它将对所有布局、值、 Ass
我正在尝试解码由 Android instagram 应用程序发送到 graph.instagram.com 的帖子数据。该问题与此处发现的问题类似: Reverse Engineer HTTP re
我想查明用 C/C++ 编写的应用程序究竟在哪里失败。我无法直接调试应用程序,既不使用 gdb/lldb 也不使用 IDE,因为应用程序是由程序启动的(它是 webots 机器人模拟软件的机器人 Co
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是
我有一个最初用 VS2005 编写的小实用程序。 我需要做一点小改动,但是其中一个 dll 的源代码在某处丢失了。 是否有免费或价格合理的工具将 dll 反向工程回 C++ 代码。 最佳答案 Hex-
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我想知道是否有人知道如何对 Access 数据库进行逆向工程。我希望能够生成用于创建数据库表并将所有记录插入表中的 SQL 代码。换句话说,我想创建类似于 MySQL 转储文件的内容。 任何想法都会很
String.GetHashCode 的行为取决于程序架构。所以它将在 x86 中返回一个值,在 x64 中返回一个值。我有一个必须在 x86 上运行的测试应用程序,它必须预测必须在 x64 上运行的
我是一名优秀的程序员,十分优秀!