Как получить ноутбук Serial в C - PullRequest
0 голосов
/ 21 апреля 2011

Привет Я пытаюсь сделать функцию безопасности для моего 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 ]

2 голосов
/ 21 апреля 2011

Не ответ на ваш вопрос, но имейте в виду, что эти уловки никогда не бывают действительно безопасными.

См., Например, этот пост на Lifehacker (речь идет об OS X, но это не имеет значения).

1 голос
/ 21 апреля 2011

system() не возвращает указатель на символ, он возвращает код выхода (int) из команды, которая была выполнена.Вы можете использовать popen() для запуска команды.popen() вернет FILE*, с которого вы можете прочитать (это из stdout программы).Затем вы можете прочитать и проанализировать вывод программы соответствующим образом.

0 голосов
/ 21 апреля 2011

Если вы честно хотите сделать его безопасным, используйте (например) серийный номер BIOS (или серийный номер жесткого диска) в качестве ключа для шифрования исполняемого файла. Напишите небольшую оболочку, которая читает те же данные, использует их для расшифровки исполняемого файла, а затем запускает результат. По крайней мере, без доступа к исходному оборудованию, это может быть довольно сложно обойти (в отличие от сравнения, которое вы делаете). OTOH, с доступом к исходному оборудованию, это тоже довольно легко сломать.

0 голосов
/ 21 апреля 2011

система возвращает int, а не const char * того, что будет отображаться в командном прерывателе. Если вы хотите вывод программы, вам нужно получить стандартный вывод программы.


Взгляните на этот вопрос о том, как получить вывод из канала.

...