Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Ruby中使用唯一的硬件ID来保护代码?_Ruby_Windows_Source Code Protection - Fatal编程技术网

如何在Ruby中使用唯一的硬件ID来保护代码?

如何在Ruby中使用唯一的硬件ID来保护代码?,ruby,windows,source-code-protection,Ruby,Windows,Source Code Protection,我打算在Windows上销售我的Ruby应用程序,我想保护我的软件不被窃取或复制。 我不会发布它,所以它需要与机器相关 我需要我的代码在启动时获取任何pc的MAC地址,并将其与存储在服务器中的文件进行比较。我试图从MAC地址构建一个唯一的串行代码,但“macaddr”gem在某些计算机上返回一个错误。此代码将在某些计算机上失败: require 'macaddr' mac = Mac.addr puts mac # >> NoMethodError: undefined method

我打算在Windows上销售我的Ruby应用程序,我想保护我的软件不被窃取或复制。 我不会发布它,所以它需要与机器相关

我需要我的代码在启动时获取任何pc的MAC地址,并将其与存储在服务器中的文件进行比较。我试图从MAC地址构建一个唯一的串行代码,但“macaddr”gem在某些计算机上返回一个错误。此代码将在某些计算机上失败:

require 'macaddr'
mac = Mac.addr
puts mac
# >> NoMethodError: undefined method 'pfamily' for nil:NilClass

如何获得一些独特的系统ID并从中生成串行代码?有没有其他方法可以从Ruby中的计算机获取唯一的硬件ID?

首先,我建议您不要使用MAC地址。这很容易被欺骗

其次,我建议您不要使用硬件ID。除了您在获得可靠的许可证时发现的明显困难(我想windows许可证是您最好的选择),这可能会将您的软件绑定到特定的机器

相反,我建议使用某种登录系统,向服务器发送用户名和哈希(密码),然后返回UUID。每当有人使用该软件时(或每小时,取决于什么更适合您的软件),用uuid ping您的服务器以检查用户是否登录到另一台机器上。在处理软件没有得到响应的情况时要慷慨大方,不要立即锁定软件——留出一个小时,甚至一天的时间。如果适用于您的软件,请弹出一个小警告,说明如果在X分钟内未检测到internet连接,软件将被锁定


请记住,您希望人们向他人推荐您的软件。如果您的许可证制度基本上是隐形的,人们会对您的软件评价更高。如果他们总是这么做,他们最终只会怨恨你。

首先,我建议你不要使用MAC地址。这很容易被欺骗

其次,我建议您不要使用硬件ID。除了您在获得可靠的许可证时发现的明显困难(我想windows许可证是您最好的选择),这可能会将您的软件绑定到特定的机器

相反,我建议使用某种登录系统,向服务器发送用户名和哈希(密码),然后返回UUID。每当有人使用该软件时(或每小时,取决于什么更适合您的软件),用uuid ping您的服务器以检查用户是否登录到另一台机器上。在处理软件没有得到响应的情况时要慷慨大方,不要立即锁定软件——留出一个小时,甚至一天的时间。如果适用于您的软件,请弹出一个小警告,说明如果在X分钟内未检测到internet连接,软件将被锁定

请记住,您希望人们向他人推荐您的软件。如果您的许可证制度基本上是隐形的,人们会对您的软件评价更高。如果他们经常面对这种情况,他们最终只会怨恨你。

我通过从Ruby调用以下命令解决了这个问题: 也许有更好的方法,但我不是专家,这解决了我的问题。
我使用的是Windows 10 Pro 64位,我的Ruby版本是:

C:\>ruby -v
# >> ruby 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32]
我通过从Ruby调用以下cmd命令解决了这个问题: 也许有更好的方法,但我不是专家,这解决了我的问题。
我使用的是Windows 10 Pro 64位,我的Ruby版本是:

C:\>ruby -v
# >> ruby 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32]

已修复错误,但不太可能合并。它只是为方法调用添加了一个安全检查。因此,这将防止出现错误,但可能会丢失有关这些系统的信息。你可能想用叉子叉宝石,或者看看现有的叉子。@Tom谢谢你的回答。我会留下这个作为最后的选择,我想使用其他“代码”除了MAC地址。因为如果我解决了解救它的错误,我就不会像你说的那样得到相同的地址。例如,您知道如何获取硬件序列号吗?
system_profiler SPHardwareDataType
返回大量信息,包括“hardware UUID:”,您可以将其正则化。我知道它可以在macOS上运行,但无法在其他地方测试。您可能需要检查环境并分别使用不同的命令。您可以从Ruby运行它,方法是将它包装成backticks或
system…
或其他几种方式。
system(system\u profiler SPHardwareDataType)。扫描(/(?@Tom这是您在macOS终端上运行的命令?不幸的是,我在Windows上,我将仅通过Windows分发此应用程序。我是否应该将
ipconfig/all
或任何其他实用程序的输出记录到一个文件中,然后对其进行解析?这是最好的方法吗?实际上我有一个GUI应用程序,调用
system
会导致cmd window弹出,因此我使用
win32ole
从Ruby调用cmd脚本。对错误进行了修复,但不太可能被合并。它只是为方法调用添加了一个安全检查。因此,这将防止错误发生,但可能会丢失有关这些系统的信息。您可能希望分叉gem或查看现有分叉。@Tom感谢您的帮助您的回复。我将把这作为最后一个选项,我想使用其他“代码”除了MAC地址。因为如果我解决了解救它的错误,我也不会得到相同的地址,就像你说的。例如,你知道如何获得硬件序列号吗?
system_profiler SPHardwareDataType
返回很多信息,包括“hardware UUID:”,你可以将其注册。我知道它在macOS上工作,但无法测试在其他地方。您可能需要检查环境并分别使用不同的命令。您可以从Ruby运行该命令,方法是将其包装为backticks或
system…
或其他几种方式。
system(system\u profiler SPHardwareDataType)。扫描(/(?@Tom这是您在macOS终端上运行的命令?不幸的是,我在Windows上,我将仅通过Windows分发此应用程序。我应该将
ipconfig/all
或任何其他实用程序的输出记录到