【问题标题】:How to get laptop Serial in C如何在 C 中获取笔记本电脑的 Serial
【发布时间】:2011-08-09 21:40:25
【问题描述】:

嗨 我正在尝试为我的 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;
}

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


最好的问候

【问题讨论】:

    标签: c licensing license-key


    【解决方案1】:

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

    例如参见this post at lifehacker(这是关于 OS X,但并不重要)。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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


        看看这个question,了解如何从管道获取输出。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-01-08
            • 1970-01-01
            • 1970-01-01
            • 2019-07-30
            • 1970-01-01
            • 2018-11-17
            • 1970-01-01
            • 2011-01-14
            相关资源
            最近更新 更多