Как получить ноутбук Serial в 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;
}
Он выводит информацию только на стандартный вывод. Есть ли способ сделать это сравнение?
С уважением
4 ответа
system()
не возвращает указатель на символ, он возвращает код выхода (int
) из команды, которая была запущена. Вы могли бы использовать popen()
запустить команду. popen()
вернет FILE*
что вы можете прочитать (это из программы stdout
). Затем вы можете прочитать и проанализировать вывод программы соответствующим образом.
Не ответ на ваш вопрос, но имейте в виду, что эти приемы никогда не бывают безопасными.
Посмотрите, например, этот пост в Lifehacker (это о OS X, но это не имеет большого значения).
Если вы действительно хотите сделать его безопасным, используйте (например) серийный номер BIOS (или серийный номер жесткого диска) в качестве ключа для шифрования исполняемого файла. Напишите небольшую оболочку, которая читает те же данные, использует их для расшифровки исполняемого файла, а затем запускает результат. По крайней мере, без доступа к исходному оборудованию, это может быть довольно сложно обойти (в отличие от сравнения, которое вы делаете). OTOH, с доступом к оригинальному оборудованию, это тоже довольно легко сломать.
Система возвращает int, а не const char * того, что будет отображаться в командном прерывателе. Если вы хотите вывод программы, вам нужно получить стандартный вывод программы.
Взгляните на этот вопрос о том, как получить вывод из трубы.