我需要在我的程序中将许可证绑定到硬件ID.我尝试过使用WMI,但它仍然很慢.
我需要,例如,CPU,HDD和主板信息.
问题:我必须为每个联网客户端提供唯一ID,例如:
一点点解释和一些背景故事:
这个问题基本上是古老的问题,也触及了软件拷贝保护的主题,因为这里提到了该领域中使用的一些机制.在这一点上我应该清楚,我不是在寻找一种复制保护方案.请继续阅读.:)
我正在开发一个应该在本地网络中工作的客户端 - 服务器软件.我必须解决的一个问题是识别网络中的每个唯一客户端(而不是问题),以便我可以将某些属性应用于每个特定客户端,在特定部署的生命周期中保留并强制执行这些属性.客户.
在我寻找解决方案时,我发现了以下情况:
这种问题的明显选择是找出BIOS标识符(不过100%确定这是否通过相同的主板型号是唯一的),因为这是我唯一可以依赖的不重复,通过克隆传输,并且不能改变(至少不能通过使用一些用户空间程序).其他一切都失败了,因为要么不可靠(MAC克隆,任何人?),要么太苛刻(就其对配置变化过于敏感而言).
我想问的一个子问题是,我是否正确地进行了架构方面的工作?也许有一个更好的工具来完成我必须完成的任务......
我想到的另一种方法类似于握手机制,其中服务器维护一个连接的客户端ID的内部查找表(在任何给定时刻甚至可以完全基于软件和非唯一),并告诉客户端如果在连接时提供重复的ID,则在握手期间提供不同的ID.遗憾的是,这种方法不能很好地满足在生命周期内将属性绑定到特定客户端的要求之一.
Mac OS X开发对我来说是一个相当新的动物,我正在移植一些软件.对于软件许可和注册,我需要能够生成某种硬件ID.它不一定是任何花哨的东西; 以太网MAC地址,硬盘串口,CPU串口等等.
我已经在Windows上覆盖了它,但我对Mac没有任何线索.知道我需要做什么,或者我可以在哪里获取有关此信息的信息会很棒!
编辑:
对于任何对此感兴趣的人,这是我最终使用Qt的QProcess类的代码:
QProcess proc;
QStringList args;
args << "-c" << "ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformUUID/ { print $3; }'";
proc.start( "/bin/bash", args );
proc.waitForFinished();
QString uID = proc.readAll();
Run Code Online (Sandbox Code Playgroud)
注意:我正在使用C++.
可能重复:
生成唯一硬件ID的可靠方法
我试图生成一个特定计算机唯一的ID.ID不会随机生成.它将基于计算,使得为计算机A生成的ID将是固定的并且对计算机A是唯一的.每当程序在计算机A上执行时,它将继续生成相同的ID,并且当在另一台计算机上执行时,它将生成该计算机唯一的另一个ID.这是为了确保两台计算机不具有相同的ID.
我的挑战:为了使我的程序能够生成计算机唯一的ID,它需要根据执行它的计算机所特有的种子执行计算.
我的问题: 如何获得计算机唯一的值,以便我可以将该值用作ID生成程序中的种子?
是否有可能从计算机的硬件(例如主板)获取该计算机独有的值?这样,只要不更换计算机的主板,该值很可能不会改变.
对于生成每个PC许可证密钥的要求,我需要一些代码,这些代码将在任何PC上返回稳定且(近)唯一密钥.它不具有来保证独特,但接近.它确实需要相当稳定,因此除非硬件发生实质性改变,否则给定的PC总是会产生相同的结果.
这适用于Windows应用程序,使用wxWidgets但Win32或其他选项都可以.
我在考虑MAC地址,但是在节能模式下可以经常禁用网卡的笔记本电脑呢?我遇到了GetCurrentHwProfile,但它看起来不像我想要的那样?
我已经使用PHP创建了一个应用程序,我将把它卖给我当地的市场.我个人会去他们的位置安装/配置Apache和MySQL以及安装我自己的代码.
我想要一个安全系统,以便如果有人试图将我的代码复制到未经授权的机器,它将无法运行.
我知道没有人可以阻止逆向工程应用程序.甚至.exe(二进制)文件都被破解,并且PHP(源代码)任何人都可以做.
在我的国家,那些反向工程师真的很难找到,所以我想提出最小的安全选项,如:
1)创建类(比如说Navigation
),它标识系统信息,如CPU ID,计算机名称或硬件ID的任意组合,以生成UNIQUE_ID并与我给定的UNIQUE_ID(我向其销售应用程序的个人)匹配.如果有效,则返回导航菜单.否则它只会破坏数据库并通过抛出异常来停止执行,可能就像:
class Navigation {
public function d() {
return current system UNIQUE_ID;
}
public function get() {
$a = file_get_contents('hash');
$c = $this->d();
if (crypt($c) != $a) {
//destory database
throw new Exception('');
} else {
return "<ul><li><a>home</a></li></ul>"; //navigation menu
}
}
}
Run Code Online (Sandbox Code Playgroud)
2)然后在安装过程中,我将在"hash"文件中更改系统UNIQUE_ID,创建一个对象,并将其保存到文件(nav.obj)中:
(install.php了)
<?php
$a=new Navigation;
$out=serialize($a);
file_put_contents('nav.obj', $out);
Run Code Online (Sandbox Code Playgroud)
3)在header.php中(包含在每个文件中):
<?php
$menu=file_get_contents('nav.obj');
$menu=unserialize($a);
echo $menu->get();
?>
Run Code Online (Sandbox Code Playgroud)
我知道这种方法不是完全证明,但我很确定大约60%的PHP开发人员无法破解它!
现在我只需要获取当前系统UNIQUE_ID.
我想通过代码唯一地识别我的mac系统.我在关于这台Mac上找到了硬件UUID.那么如何以编程方式从MAc OS X访问唯一的uuid.
如果对我的问题有任何其他建议,请提供给我.
如何在c ++中获取硬件信息(例如cpuId,biosId,diskId,baseId和videoId)?
任何人都可以给我一个示例视觉工作室项目吗?
Mac OS X是否有API将Apple的模型标识符(plists和API中的类型,例如"MacBookPro5,1")转换为这些设备的用户友好营销名称("Unibody MacBook Pro Late 2008")?
我正在寻找比简单硬编码列表更具前瞻性的解决方案.
我想将程序绑定到特定的计算机,为此我想使用主板的序列号作为唯一标识符。
虽然我可以找到一些 C# 和 Java 的例子,但我找不到任何可靠的 C++(我读过 WMI 可能会因硬件而失败),但肯定有办法在 C++ 中做到这一点吗?
编辑:换句话说,我想要的是一个简单而基本的许可系统。为了更清楚,下面是它的样子:
#define USER_SERIAL 123456789
double GetMotherBoardSerialNumber();
// ...
double currentSerial = GetMotherBoardSerialNumber();
if(currentSerial != USER_SERIAL) {
exit 1;
}
Run Code Online (Sandbox Code Playgroud)
这显然不完美,但我没有任何服务器 atm 来设置帐户系统,因此这可能是一个临时解决方案。