0

嗨,我正在尝试为我的 C 项目制作一个安全功能,这样如果有人窃取它,它就会变得毫无用处。它的工作原理如下:仅当我的 macbook 的序列号与加密序列号的比较为 1 时,主函数才会运行。

问题是我无法在程序中获取系统信息。

当我做:

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;
}

它只将信息打印到标准输出。有没有办法进行这种比较?


此致

4

4 回答 4

2

不是您问题的答案,但请记住,这些技巧从来都不是真正安全的。

例如,请参阅lifehacker 上的这篇文章(这是关于 OS X 的,但这并不重要)。

于 2011-04-20T23:04:30.850 回答
1

system()不返回 char 指针,它返回int已运行命令的退出代码 (an )。您可以使用popen()来运行命令。popen()将返回一个FILE*您可以从中读取的内容(它来自程序的stdout)。然后,您可以相应地读取和解析程序输出。

于 2011-04-20T23:07:39.520 回答
0

如果您真的想让它安全,请使用(例如)BIOS 序列号(或硬盘序列号)作为加密可执行文件的密钥。编写一个读取相同数据的小型包装器,使用它来解密可执行文件,然后运行结果。至少在无法访问原始硬件的情况下,这可能很难解决(与您正在进行的比较不同)。OTOH,可以使用原始硬件,这也很容易破解。

于 2011-04-20T23:16:43.847 回答
0

系统返回一个 int 而不是 const char * 将显示在命令中断器上的内容。如果您想要程序的输出,则需要获取该程序的标准输出。


看看这个关于如何从管道获取输出的问题。

于 2011-04-20T23:04:52.390 回答