Problemas com a criptografia de arquivos class Java
Além da ofuscação, a criptografia de arquivos class é um método de proteção de código facilmente concebível. Muitos esquemas empregam o uso de agentes para criptografar arquivos class e descriptografá-los durante o carregamento de classes. No entanto, esses esquemas ignoram um ponto importante: o mecanismo de attachment integrado da JVM.
Mecanismo de attachment da JVM
Para facilitar a análise e o monitoramento da operação do programa, JVMs comuns vêm com mecanismo de attachment. Os usuários podem usar ferramentas como jhsdb para se conectar ao processo da JVM, visualizar e analisar seus dados de memória. Além disso, esses dados de memória são organizados adequadamente de acordo com a estrutura de dados no arquivo fonte, o que também pode ser entendido como um mecanismo de backdoor integrado da JVM.
O seguinte artigo apresenta como usar o mecanismo de attach da JVM para ler e salvar informações de arquivos class na memória.
https://protector4j.com/pt/articles/cracking-encrypted-java-applications-jhsdb/
Além de usar a ferramenta jhsdb fornecida pelo JDK, você também pode usar o Arthas da Alibaba para analisar processos Java em execução.
Funções relacionadas a HOOK obtêm informações de classes carregadas dinamicamente.
Alguns métodos de proteção carregam informações de classe dinamicamente através de reflexão, e essa abordagem também pode ser usada para obter informações de classe carregadas em tempo real através de injeção de DLL. Para mais detalhes, consulte os dois projetos a seguir.
https://github.com/ViRb3/jvm-dump-proxy
https://github.com/zorftw/JVM-Native-Classdumping
Conclusão
Devido à existência do mecanismo de attachment da JVM ou mecanismo de HOOK binário, todos os chamados códigos criptografados que não foram desvinculados da operação normal da JVM podem ser facilmente lidos usando ferramentas de attachment ou interceptados através de injeção de DLL. Portanto, esta é a solução de proteção mais ineficaz.