2011-04-20 66 views
0

嗨 我想爲我的C項目做一個安全功能,這樣如果有人偷了它,它就變得毫無用處。 它的工作原理如下: 主要功能只有在我的MacBook的序列來加密一個是1如何獲得筆記本電腦串行C

的問題比較的是,我不能在程序中的系統信息運行。

當我這樣做:

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。 有沒有辦法做這種比較?


問候

回答

1

system()不返回字符指針,它從運行的命令返回退出碼(一個int)。您可以使用popen()來運行命令。 popen()將返回您可以從中讀取的FILE*(它來自程序的stdout)。然後您可以相應地讀取和解析程序輸出。

2

不回答你的問題,但請記住,這些技巧是從來沒有真正安全的。

例如參見this post at lifehacker(這是關於OS X,但它並不重要)。

+1

+1爲根問題的唯一正確答案。 – 2011-04-21 03:33:44

0

系統返回一個int而不是const char *,它會顯示在命令中斷器上。如果你想要程序的輸出,你需要得到那個程序的標準輸出。


看看這個question關於如何從管道獲得輸出。

0

如果您確實希望使其安全,請使用(例如)BIOS序列號(或硬盤序列號)作爲加密可執行文件的密鑰。編寫一個小的包裝器,讀取相同的數據,使用它來解密可執行文件,然後運行結果。至少無法訪問原始硬件,這可能相當難以解決(與您正在進行的比較不同)。 OTOH,訪問原始硬件,這是很容易打破以及。

相關問題