如何用C语言获取笔记本电脑的串口
你好 我正在尝试为我的 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;
}
它只将信息打印到标准输出。 有没有办法进行这种比较?
此致
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
不是你问题的答案,但请记住,这些技巧从来都不是真正安全的。
例如,请参阅 lifehacker 上的这篇文章(这是关于 OS X 的,但这并不重要)。
Not an answer to your question, but keep in mind that these tricks are never really secure.
See for example this post at lifehacker (this is about OS X, but it doesn't really matter).
system()
不返回 char 指针,它返回运行命令的退出代码(int
)。您可以使用popen()
来运行命令。popen()
将返回一个可以读取的FILE*
(它来自程序的stdout
)。然后您可以相应地读取和解析程序输出。system()
does not return a char pointer, it returns the exit code (anint
) from command that was run. You could usepopen()
to run a command.popen()
will return aFILE*
that you can read from (it is from the program'sstdout
). You can then read and parse the program output accordingly.系统返回一个 int,而不是命令中断器上显示的 const char *。如果您想要程序的输出,您将需要获取该程序的标准输出。
看看这个关于如何获取输出的问题从管道中。
system returns an int not a const char * of what would show up on the command interrupter. If you want the output of the program you will need to get that programs stdout.
Take a look at this question on how to get the output from a pipe.
如果您确实希望确保其安全,请使用(例如)BIOS 序列号(或硬盘序列号)作为加密可执行文件的密钥。编写一个小包装器来读取相同的数据,使用它来解密可执行文件,然后运行结果。至少在无法访问原始硬件的情况下,这可能相当难以解决(与您正在进行的比较不同)。 OTOH,可以访问原始硬件,这也很容易被破坏。
If you honestly want to make it secure, use (for example) a BIOS serial number (or hard disk serial number) as a key to encrypt the executable. Write a small wrapper that reads the same data, uses it to decrypt the executable, and then runs the result. At least without access to the original hardware, this can be fairly difficult to work around (unlike the comparison you're doing). OTOH, with access to the original hardware, this is pretty easy to break as well.