将可执行文件限制在某台计算机上运行的最简单方法
Easiest way to limit executable to running on a certain computer
我正在尝试创建一个只能在一台机器上运行的可执行文件。实现这一目标最简单的方法是什么?license文件?或者有一个类似MAC的机器地址,我可以硬编码到可执行文件中?
如果它只能在一台机器上运行,那么…只需保护机器,并且只在这台机器上存储可执行文件。
不幸的是,这是唯一可靠的方法。
长答:
- 位可以被复制
- 程序可拆卸
- 拆解可以逆向工程(虽然有时很长)
- 逆向工程的成本可以比程序产生的价值更高,可能比程序产生的价值付出更高的成本。
如果你对软件行业看得够久:
- DRM:失败
- 许可:失败
- 带有web激活的许可证:fail
值得破解,就会破解。
最简单的方法是通过许可将其定为非法。试图从技术上强制执行这一点是不可能的,并且只会伤害您的用户(用户?):如果他们重新安装操作系统、更换网卡或升级CPU怎么办?
没有100%有效的解决方案,也没有既"简单"又"高效"的解决方案。一般来说,"有效"answers"让用户抓狂"是一个连续体,你需要非常小心。
MAC地址并不是一个糟糕的起始点。更改MAC地址并不难,但如果在同一子网上有多个相同MAC的实例,那么它们的机器将无法工作,因此最好让同一子网上的许多人在没有许可的情况下运行您的产品。MAC的问题是,在台式机上,如果网卡更换,MAC也会改变;这会激怒你的付费用户。
一个许可文件通常比修改二进制文件要好。但是,您应该在许可文件上签名,这样它就不容易被修改。
你的应用程序本身永远是最薄弱的环节。专门的攻击者将从您的应用程序中删除测试。这个问题没有普遍的解决办法。一个好的方法总是围绕着"让诚实的人诚实",让正确授权你的应用程序变得容易,让用户更容易判断他们是否这样做了。你很容易花大价钱去惹恼那些根本不会付钱给你的人。
我想我对另一个问题的回答适用于这里。
这是法律问题,不是技术问题。您的目标应该是使那些想要确保他们拥有您的软件的有效许可证的人更容易。与其保护你的代码不被那些想要窃取它的人窃取,你应该专注于帮助那些担心在没有适当许可证的情况下意外使用它的客户。
我还将重复我对另一个问题的评论:
我认为"让诚实的人诚实"是正确的心态解决这个问题。没有什么是加密安全的,但是为每个许可证提供某种唯一的密钥或数字实际上可以让商业客户更容易对他们的软件进行核算,这会增加你产品的价值。繁重的DRM(不起作用)旨在挫败犯罪分子(他们无论如何都不会付钱)只是一个阻碍付费客户。
如果您只想创建可执行文件的一个副本,并且如果您可以访问必须安装可执行文件的机器,那么将MAC地址硬编码到可执行文件中是可以的。如果您想要分发可执行文件的多个副本,并且如果您没有访问所有机器的权限,那么您可能会对可执行文件进行编码,以要求从机器的MAC地址生成的许可文件。这是一种软件激活
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- 通过比较C++中的行在 txt 文件中搜索的最简单方法是什么?
- 请求最简单的 OpenMP 目标 GPU 示例
- 将时间戳打印到流的最简单方法
- 在C++中创建文件夹选取器对话框的最简单方法是什么?
- C++20 个模块在 clang (Windows):在最简单的示例中键入信息错误
- 对多个(可能)重叠范围进行分区的最简单算法
- 在 cpp 中最简单的图形实现
- boost::variant - 对变体应用算术的最简单方法
- 多线程 gtkmm 应用程序最简单的示例
- 创建可以遍历 std::map 值的通用模板迭代器的最简单方法是什么?
- 在C++中将算术类型转换为 std::array 的最简单方法<uint8_t>
- 标准库容器最简单、性能差的哈希类是什么?
- C++-将ASCII字符数组中可能的数值转换为字符的最简单方法
- 无法获得最简单的JNI足以在Windows 10上运行
- 从 txt 文件中读取数据的最简单方法
- 在Raspberry Pi上运行OSX openFrameworks项目的最简单方法是什么?
- 将可执行文件限制在某台计算机上运行的最简单方法
- 跨平台-从c++运行GLSL着色器(尚未编译)的最简单方法是什么?