Bez ohledu na to, co děláte, budete muset někde uložit šifrovací klíč, který pak bude možné obnovit. Pokud požadujete licenční server, lze to obejít připojením nebo záplatou aplikace. Můžete dělat takové věci, abyste zpomalili protivníka, ale nebude to úplná ochrana. Pokud opravdu nechcete vydat svůj software, použijte architekturu klient-server s převážnou částí logiky na straně serveru a požadujte autentizaci od placeného/autorizovaného uživatele (ačkoli pak nemůžete zabránit klientskému softwaru, aby buď zkopírován nebo upraven, ale to je obvykle akceptované riziko).
Předpokládejme, že chci dát počítač někomu, kdo spouští aplikaci. Chci zabránit tomu, aby program mohl být zkopírován do jiného počítače nebo s ním neoprávněně manipulováno.
Existují komerčně dostupné nástroje, které to udělají za vás. Jak jste tušili, neexistuje žádné neprůstřelné řešení, které by nemohl prolomit oddaný protivník. V praxi však existují komerčně dostupné obfuskátory, které mohou být pro vaše účely „dost dobré“.
Komerčně dostupné nástroje mohou také spojit software s daným hardwarem tím, že z hardwaru odeberou „otisk prstu“. Opět, toto je pravděpodobně spoofable s dostatkem práce, ale mohlo by být "dost dobré" pro vaše účely.
Jedním příkladem komerčně dostupného nástroje je „.NET Reactor“ (https://www.eziriz.com/dotnet_reactor.htm), který je určen pro použití se softwarem Windows .NET. Může zatemnit software, aby zmařil reverzní inženýrství, a může jej spojit s konkrétním hardwarem pomocí hardwarové metody otisků prstů.
Jedna strategie, kterou jsem viděl, není hloupá, ale pokud si přečtete jedinečné ID hardwaru a použijete je jako klíč k dešifrování softwaru, pokud by byl přesunut na jiný počítač, nerozšifroval by se.
Jediný problém s tím je, že většinu těchto hodnot lze přepsat a pokud útočník ví, z jakého hardwaru jsou tyto hodnoty odvozeny, a reprodukovat je, aby efektivně 'odemkl'/dešifroval software.
Navíc máte problém, pokud některý z těchto hardwaru selže a bude nahrazen, musíte nyní odstranit nový software – zašifrovaný novou kombinací ID hardwaru pro vyměněný/nový hardware.