Já trabalhei numa empresa que teve um problema parecido. As soluções abordadas que lembro foram:
-
Ofuscar e comprimir o artefato com packer e anti debugger durante a compilação.
-
Fazer consultas periódicas em outras partes/módulos, mesmo que isso não fizesse sentido (criar uma dll dedicada pra isso não ajudaria, então dlls de "gfxrender" faziam essa checagem, e no que era de web, usamos endpoints como CheckUpdate e até GetBooks pra validar licença e enviar logs).
-
Usar logs e alertas caso o cliente tentasse descompilar ou tentasse mudar alguma configuração manualmente dentro do diretório do programa (nunca tivemos alerta kkkk).
Isso tudo pra um sistema ERP que não durou muito.