Problemas com soluções de proteção por virtualização

A ofuscação pode aumentar a dificuldade da análise estática, mas não pode prevenir efetivamente a análise dinâmica. O objetivo da virtualização de código é aumentar a dificuldade da análise dinâmica.

A virtualização de código Java é alcançada construindo mecanismos de virtualização personalizados, permitindo que bytecodes que poderiam ser executados diretamente sejam executados através desses mecanismos de virtualização. Como é um mecanismo de virtualização personalizado, o mundo externo não pode acessar diretamente seu método de execução, formato de instrução e outras informações. Além disso, resulta em uma expansão significativa do código, tornando difícil fazer engenharia reversa do código contendo suas informações semânticas originais.

O impacto da virtualização no desempenho.

A proteção por virtualização é uma solução de proteção de código extremamente forte, mas o maior problema da proteção por virtualização é o desempenho. Mecanismos de virtualização personalizados têm dificuldade em adotar numerosas medidas de otimização de desempenho como a JVM e não podem aplicar técnicas de otimização de desempenho como JIT. Você pode tentar usar o mecanismo JVM que mencionamos anteriormente para executar o mesmo código que uma JVM comum e comparar o desempenho, o que pode resultar em uma diferença de desempenho de mais de 100 vezes.

Conclusão

A proteção por virtualização é o método de proteção de código mais seguro, mas devido ao seu impacto significativo no desempenho, não pode ser aplicada a todo o código de um programa. Só pode proteger código crítico, enquanto outros códigos ainda carregam o risco de exposição. Ao direcionar outras partes do código, é possível obter informações funcionais sobre a parte virtualizada do código.