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.