Здравствуйте, piEpj, Вы писали:
E>Необходимо запускать собственную программу на собственном компьютере.
E>Что это будет за компьютер (железо, версия Windows, софт, файловая система, учетные записи) зависит от меня.
E>Компьютер будет размещен в сторонней организации и будет управляться мною удаленно.
E>Посторонние люди будут иметь физический доступ к машине.
E>Стоимость программы очень велика.
E>Нужно минимизировать технические риски кражи коммерческого софта на данной машине (то есть посторониться люди не должны заполучить программу).
E>Если же кража произошла, то бинарные файлы должны оказаться бесполезным для использования или для восстановления алгоритмов программы.
E>Планирую установить Windows 7, диски шифровать, пароли от учетных записей Windows и никому не передавать.
Про
возможности IEEE1394 в курсе? На всякий случай: единственная мера защиты -- использовать железяку, на которой физически нет IEEE1394 и нет никаких портов расширения (включая USB) — а то воткнут адаптер и привет. Винда драйвера сама поставит.
Если стоимость программы действительно "очень" велика, стоит задуматься об упомянутой по той же ссылке "RAM-freezing thing" и иже с нею.
Если прграмма всё же не настолько ценна, чтобы оправдать такие методы её добывания, то можно, например, зашифровать основную часть программы, а ключ доставлять при запуске через SSL (обязательно с проверкой как "серверного", так и "клиентского" сертификатов). Расшифровывать можно в память, либо (проще реализовать) во временный каталог на ram-диске. Ключ, естественно, нигде не сохранять. Очевидный недостаток схемы: для каждого запуска системы потребуется ваше (удалённое) участие.
Если такое ограничение неприемлемо -- ну, покрыть программу какой-нибудь навесной защитой, желательно использующей виртуализацию инструкций.
А вообще -- при наличии физического доступа никаких гарантий дать нельзя.
Disclaimer: на звание профессионала не претендую. Прошу считать вышесказанное просто небольшим вкладом в дискуссию с моей стороны