2014-01-22 69 views
4

我只是想混淆簡單的maven java應用程序。我使用maven-proguard插件。所有的main/java類都必須被混淆。我嘗試不同的配置,但沒有運氣。最後是:工作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

Maven這樣一個偉大的事情:)。你可以做出你想要的,甚至不明白,你想要什麼。當我讀http://proguard.sourceforge.net/#manual/introduction.html後,我明白這是一個愚蠢的問題。保持參數非常重要。這裏傳遞了一定不能改變的公共方法。當然,插件不能單獨打開你打算使用的方法。正確的配置:

<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混淆器。下載here。 提取它並導出env變量ALLATORI_LIB=LOCATION/lib

小心:其許可產品。

您還可以指定要忽略被混淆的類/方法/字段。這些作品將在名爲allatori-config.xml一個單獨的文件去(可以命名爲任何東西,但應該在配置參數相匹配)

例al​​latori-config.xml中的樣子:

<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插件maven-antrun-plugin可用於調用混淆。

<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>