Я бы посоветовал Вам отказаться от этой идеи. В настоящее время пользователь может совершенно спокойно в ходе апгрейда заменить все железо к которому вы можете привязаться и в итоге Вы не получите ничего кроме геморроя с ре-активацией ПО и озлобленностью пользователей. Как вариант ключ каждого легального пользователя заносите в базу данных на сервере, и при запуске проверяете валидность введенного пользователем ключа как первый уровень проверки и второй уровень наличие этого ключа в базе данных сервера.