O que significa obfuscação de código?
Obfuscação de código são técnicas empregadas nas etapas finais do desenvolvimento para dificultar a recuperação do código original através de descompiladores.
Como a operação multiplataforma do Java se baseia na implementação de máquinas virtuais nativas capazes de interpretar os Java bytecodes (cuja especificação é amplamente conhecida) a decompilação do código pode ser realizada com relativa facilidade, existindo inúmeras ferramentas disponíveis para esta finalidade (JavaFaq 0094).
Torna-se assim necessário obfuscar o código, isto é, modificar os nomes de classe, métodos e nomes de forma a confundir ou dificultar o trabalho dos descompiladores (decompilers). Para isto usamos programas obfuscadores (obfuscators ou shrouders).
Algumas ferramentas conhecidas são o Crema de HanPeter van Vliet, HashJava de K.B. Sriram e Jobe de Eron Jokipii.