Как распространять ПО методом 1 USB-флешка = 1 программа?
Хэш(хэш(S/N флешки)+хеш(UUID раздела на флешке)) или что-нибудь в этом роде. Конкретный алгоритм хеша - по выбору разработчика. Можно еще контрольную сумму от исполняемого файла добавить. Или вычесть. Или умножить... и т.п. Плюс парочка ложных хэшей, вычисляемых по другим формулам для запутывания взломщиков.

Скопировать можно, но каждый экземпляр программы запускается лишь при наличии конкретной флешки. Не только при копировании файлов, но и при клонировании раздела с флешки не пройдёт проверку и не запустится.
Как любое применение принципа security through obscurity, будет хреновой защитой от хорошего специалиста. Но услуги хакеров стоят дорого, а рядовые сисадмины не хотят (и обычно не умеют) ковыряться в отладчике. Так что на практике такая "защита из г-на и палок" имеет шанс на успех, если цена лицензионного ПО будет не слишком высокой.
Любое стандартное использование флеш-диска тут не годится, если программу можно запустить с диска, то её можно и прочитать. Если нельзя прочитать, то нельзя и запустить.
Разве что сделать микрокомпьютер, на котором будет работать сервер приложения, а с диска только запускать внешний интерфейс, обменивающийся с сервером по USB.