Proguard Plugin


O maven-proguard é um plugin para obfuscação de código, o que ele faz é tornar um pouco mais dificil o entendimento do programa quando o mesmo é descompilado.

Para utilizar o plugin do proguard integrado com o maven precisamos adicionar no pom.xml do projeto a seguinte declaração:

  <plugin>
    <groupId>com.pyx4me</groupId>
    <artifactId>proguard-maven-plugin</artifactId>
    <version>2.0.4</version>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>proguard</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
    <outjar>${project.artifactId}-pg-${project.version}.jar</outjar>
      <options>
        <option>-keep public class br.com.javadev.proguard.HelloWorld 
		      { public static void main(java.lang.String[]); }</option>
      </options>
      <libs>
        <lib>${env.JAVA_HOME}/jre/lib/rt.jar</lib>
      </libs>
    </configuration>
  </plugin>

Uma vez o plugin configurando no projeto assim que o mesmo for compilado, na fase packaging ele fará a aplicação do obfuscator no código, isso acontece devido a configuração:

  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>proguard</goal>
      </goals>
    </execution>
  </executions>

Ao executar o comando mvn -e install, ao final do processo será gerado um arquivo com o nome definido na tag:

<outjar>${project.artifactId}-pg-${project.version}.jar</outjar>

Será criado na pasta target do projeto dois jar, um deles sem a aplicação do obfuscator e o outro com obfuscator.

Se você descompilar alguma classe do jar "obfuscado" você vai ver um código um pouco mais dificil de ser analisado, pois os nomes dos métodos e atributos não serão os mesmos que você definiu.

Um detalhe é que na classe onde contém o método main as regras não são aplicadas, pois se fosse, você não conseguiria executar o programa. Para isso precisamos definir uma opção para que essa classe não tenha seu método main alterado.

  <option>-keep public class br.com.javadev.proguard.HelloWorld 
     { public static void main(java.lang.String[]); }</option>

Antes de continuar vamos fazer o download de um exemplo, link: http://www.javadev.com.br/downloads/plugins/proguard.rar.

Descompactar o projeto e executar o comando:

mvn -e install

Serão gerados dois jars dentro da pasta target

Dica:

Caso queira fazer um teste, executando o programa, podemos utilizar o exec-maven-plugin, que está configurado no pom.xml do projeto que você fez o download, digitando o seguinte:

mvn -e exec:java