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

stdoutに情報を出力するだけです。その比較を行う方法はありますか?


よろしくお願いします

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

システムは、コマンドインタラプタに表示されるもののconstchar*ではなくintを返します。プログラムの出力が必要な場合は、そのプログラムをstdoutにする必要があります。


パイプから出力を取得する方法については、この質問をご覧ください。

于 2011-04-20T23:04:52.390 に答える
0

正直に安全にしたい場合は、実行可能ファイルを暗号化するためのキーとして(たとえば)BIOSシリアル番号(またはハードディスクシリアル番号)を使用します。同じデータを読み取り、それを使用して実行可能ファイルを復号化し、結果を実行する小さなラッパーを作成します。少なくとも元のハードウェアにアクセスできない場合、これを回避するのはかなり難しい場合があります(実行している比較とは異なります)。OTOH、元のハードウェアアクセスできるので、これも非常に簡単に壊れます。

于 2011-04-20T23:16:43.847 に答える