2014-01-22 2 views
4

난 단순한 maven java app를 난처하게 만들고 싶다. 나는 maven-proguard-plugin을 사용한다. 모든 main/java 클래스는 난독 화되어야합니다. 나는 운이없는 다른 configs를 시도한다. 마지막은 :Working maven 난독 화 예제

<build> 
    <plugins> 
     <plugin> 
      <groupId>com.github.wvengen</groupId> 
      <artifactId>proguard-maven-plugin</artifactId> 
      <version>2.0.6</version> 
      <dependencies> 
       <dependency> 
        <groupId>net.sf.proguard</groupId> 
        <artifactId>proguard-base</artifactId> 
        <version>4.10</version> 
        <scope>runtime</scope> 
       </dependency> 
      </dependencies> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals><goal>proguard</goal></goals> 
       </execution> 
      </executions> 
      <configuration> 
       <proguardVersion>4.10</proguardVersion> 
       <options> 
        <option>-keep class *{*;}</option> 
       </options> 
       <libs> 
        <lib>${java.home}/lib/rt.jar</lib> 
       </libs> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

결과 - 모든 클래스는 대상 jar에 존재하지만 난독 화되지는 않지만 jad는이를 잘 디 컴파일합니다. 오른쪽을 난처하게하는 방법? 이해할 수 없음 - 모든 소스가 난독 화가되는 것은 매우 드문 일입니까? 다른 모든 플러그인은 매력처럼 상자에서 작동합니다. 왜 내가이 이상한 옵션을 입력해야합니까? 나는 이미 하루를 보냈다. 나는 컨벤션 이상의 컨벤션을 원한다! :)

답변

5

그런 위대한 것. :). 원하는 것을 만들고 심지어 이해하지 못하는 것, 원하는 것을 만들 수 있습니다. 내가 http://proguard.sourceforge.net/#manual/introduction.html을 읽은 후에, 나는 바보 같은 질문이라는 것을 이해합니다. Keep 매개 변수는 매우 중요합니다. 여기서 변경해서는 안되는 공용 메소드를 전달합니다. 물론 플러그인을 사용하면 어떤 방법을 사용할 지 결정할 수 없습니다. 올바른 설정 :

<build> 
    <plugins> 
     <plugin> 
      <groupId>com.github.wvengen</groupId> 
      <artifactId>proguard-maven-plugin</artifactId> 
      <version>2.0.6</version> 
      <dependencies> 
       <dependency> 
        <groupId>net.sf.proguard</groupId> 
        <artifactId>proguard-base</artifactId> 
        <version>4.10</version> 
       </dependency> 
      </dependencies> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals><goal>proguard</goal></goals> 
       </execution> 
      </executions> 
      <configuration> 
       <proguardVersion>4.10</proguardVersion> 
       <options> 
        <option>-keep public class myapp.Main{public static void main(java.lang.String[]);}</option> 
       </options> 
       <libs> 
        <lib>${java.home}/lib/rt.jar</lib> 
        <lib>${java.home}/lib/jce.jar</lib> 
       </libs> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
0

또 다른 옵션은 allatori obfuscator입니다. here 다운로드 추출한 후 env 변수를 내 보냅니다. ALLATORI_LIB=LOCATION/lib

주의 : : 라이센스가있는 제품입니다.

무시할 클래스/메소드/필드를 지정하여 난독화할 수도 있습니다.

<config> 
    <keep-names> 
    <!--Specify the class and fields here--> 
    </keep-names> 
    <jars> 
    <jar in="${obf.jar}" out="${obf.jar}"/> 
    </jars> 
    <property name="log-file" value="target/allatori-log.xml"/> 
</config> 

받는다는가 maven-antrun-plugin 플러그인하는 것이 될 수있다 :이 항목은

예 allatori-config.xml 파일의 모습처럼 (다른 어떤 이름이 될 수 있지만, 구성 매개 변수에 일치해야합니다) allatori-config.xml라는 별도의 파일로 이동합니다 난독 화를 호출하는 데 사용됩니다.

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.7</version> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <id>obfuscate2</id> 
      <configuration> 
       <target unless="${obfuscation.skip}"> 
       <echo message="running allatori"/> 
       <property name="obf.jar" value="target/${project.artifactId}-${project.version}.jar"/> 
       <property name="runtime_classpath" refid="maven.runtime.classpath"/> 
       <property name="compile_classpath" refid="maven.compile.classpath"/> 
       <taskdef name="allatori" classname="com.allatori.ant.ObfuscatorTask" classpath="${env.ALLATORI_LIB}/allatori.jar:${runtime_classpath}:${compile_classpath}" /> 
       <allatori config="${basedir}/allatori-config.xml"/> 
      </target> 
      </configuration> 
       <goals> 
       <goal>run</goal> 
       </goals> 
     </execution> 
    </executions> 
</plugin>