使用Proguard混淆WAR文件

13

我想混淆我的Web应用程序,该应用程序作为WAR档案构建,因为这个敏感的应用程序首次在我们的数据中心之外部署。我尝试使用Proguard GUI工具来混淆输入的war文件,包括所有UI应用程序所需的服务jar以及其他外部依赖项。虽然Proguard成功运行了一些警告,例如:库类[javax.servlet.UnavailableException]的重复定义,但输出的war文件不包含类,而是具有带有库jar和web.xml文件的lib目录。我错过了什么步骤吗?有正确的文档吗?如果有人能提供成功混淆依赖项目(一个.jar文件)和其他不需要混淆的外部jar文件的WAR文件的正确文档或步骤,我将不胜感激。


我想知道你是如何解决这个问题的? - YetAnotherBot
5个回答

5
你不会混淆一场战争,而是你正在使用的jar文件。在这里你可以设置你的项目,使得项目中形成了war-配置xml、WEB-INF内容、资源和Web内容及servlet定义,并将你的Java代码放在一个库项目中。混淆库项目并在Web项目中使用这些混淆后的jar文件。 这就是我所做的,希望能有所帮助。

3

2
我也是这样做的。我使用以下网址进行代码混淆,我成功了。

http://bratonfire.blogspot.com/2012/01/war-file-obfuscation-using-proguard.html

我创建了一个新文件夹,并将类的输出重定向到这个文件夹。但奇怪的是,我能够在两个位置看到.java和.class文件。我也担心重新创建war文件。有人可以提供清晰详细的步骤吗?
谢谢, Rahul

1
我们也遇到了同样的问题,需要混淆打包在war文件中的所有类。这是我采用的方法。首先,我们需要按照以下方式在pom.xml文件中声明插件的顺序**(编译器、proguard、war)**。
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.5.1</version>

                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>com.github.wvengen</groupId>
                    <artifactId>proguard-maven-plugin</artifactId>
                    <version>2.0.14</version>
                    <configuration>

                    </configuration>
                    <executions>
                        <execution>
        <!-- Dont worry about compiler error. For first time, change this value to package so that plugin installs successfully. -->
                            <phase>process-classes</phase>
                            <goals>
                                <goal>proguard</goal>
                            </goals>
                        </execution>
                    </executions>
                    <dependencies>
                        <dependency>
                            <groupId>net.sf.proguard</groupId>
                            <artifactId>proguard-base</artifactId>
                            <version>1.0</version>
                        </dependency>
                    </dependencies>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.2.2</version>

                    <configuration>
                        <warName>mfs-transaction-management</warName>
                        <warSourceDirectory>WebContent</warSourceDirectory>
                        <failOnMissingWebXml>false</failOnMissingWebXml>
        <!-- Exclude your default packages from war packaging. Do not include "**" in double quotes in actual code   -->
                        <packagingExcludes>
                            WEB-INF/classes/com/package/mypackage1/"**",
                            WEB-INF/classes/com/package/mypackage2/"**",
                        </packagingExcludes>

                        <webResources>
                            <webResource>
                                <directory>${project.build.directory}/proguardClasses</directory>
                                <targetPath>WEB-INF/classes</targetPath>
                            </webResource>
                        </webResources>         
                    </configuration>
                </plugin>

            </plugins>`

然后在项目根目录下创建一个名为proguard.conf的文件,与pom.xml放置在同一级别。 在文件中添加有关proguard的自定义配置,并添加以下两行以告诉proguard插件输入和输出文件夹。 您需要根据项目结构设置这些行中的路径。

            -injars 'C:\Users\Rajdeep\git\dfs-core\mfs-transaction-management\target\classes'
            -outjars 'C:\Users\Rajdeep\git\dfs-core\mfs-transaction-management\target\proguardClasses'

除此之外,您需要使用mvn install命令在maven存储库中手动安装proguard-base。 提供自己的groupid、artifact和version,并对pom进行相同的更改。 当您手动下载proguard时,在proguard6.0.3\lib文件夹下可以找到proguard.jar。 我认为一切都会没问题了,现在当您运行mvn clean package时,您的war文件应包含混淆后的类文件。

-1
使用Proguard GUI混淆war文件。 一旦您从Proguard目录的bin文件夹中运行proguardgu.bat或proguardgui.sh文件,您可以通过单击输入/输出菜单来选择wars。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接