Você não pode criptografar um disco rígido inteiro e ainda inicializar a partir dele sem poder acessar os dados. Quero dizer, se o bootloader puder acessá-lo, qualquer um pode. O que você quer analisar é criar um gerenciador de inicialização que tenha acesso apenas o suficiente para inicializar e tornar o restante seguro.
De preferência, você quer compilar seu sistema operacional / programa para um estado em que a descompilação se torna algo tão demorado que seria melhor desenvolver algo por conta própria. Talvez seja uma ideia fazer com que o código seja executado apenas em tags de hardware específicas. Se o hardware não estiver presente, isso causará um erro estranho.