您好 我正在尝试为我的C项目制作一个安全功能,这样如果有人偷了它,它就变得毫无用处。 它的工作原理如下: 仅当我的macbook的Serial与加密的Serial的比较为1时,才运行main函数。
问题是我无法在程序中获取系统信息。
当我这样做时:
int main ()
{ i=0;
if (strcmp(system("system_profiler SPHardwareDataType | grep \"Serial Number\""),
"Serial Number (system): W80314GJATP"));
{
bla
bla
bla
}
else {for(i=0;i<100;i++)
{printf("Unauthorized Computer");
}
return 1;
}
它只向stdout输出信息。 有没有办法进行比较?
最好的问候
答案 0 :(得分:2)
不是你问题的答案,但请记住,这些技巧从来都不是真正安全的。
参见例如this post at lifehacker(这与OS X有关,但并不重要)。
答案 1 :(得分:1)
system()
不返回char指针,它从运行的命令返回退出代码(int
)。您可以使用popen()
来运行命令。 popen()
将返回您可以阅读的FILE*
(来自程序的stdout
)。然后,您可以相应地读取和解析程序输出。
答案 2 :(得分:0)
答案 3 :(得分:0)
如果您真的想要使其安全,请使用(例如)BIOS序列号(或硬盘序列号)作为加密可执行文件的密钥。编写一个小包装器,读取相同的数据,用它来解密可执行文件,然后运行结果。至少无法访问原始硬件,这可能相当难以解决(与您正在进行的比较不同)。 OTOH, 访问原始硬件,这也很容易破解。