使用 Proguard 在 dist 上混淆 Play 2 Web 应用程序?

问题描述 投票:0回答:2

如何在执行

play state|dist
命令时自动混淆 Play Framework Web 应用程序?

这个想法是使用Proguard来执行Java代码混淆。

有 SBT 的插件,例如 sbt-proguardxsbt-proguard-plugin,但我不确定是否可以将它们直接与 Play 2 集成。

请指教。

java playframework-2.0 sbt proguard
2个回答
1
投票

我不知道这对于 Play Framework

2.0.x
是否可行,但从
2.2.0
开始可以做到。

您可以按照此处给出的步骤进行操作。所有步骤都非常简单。但是,您需要知道所需文件在哪里:

  • plugins.sbt
    - 您可以在
    PLAY_HOME/framework/project/plugins.sbt
  • 中找到它
  • build.sbt
    - 您将在应用程序根文件夹中找到它。该文件仅从 Play 2.2.0 开始可用。

这些步骤应该足以将插件与 Play 集成

希望对您有帮助。


0
投票

使用 Scala 3 就更难了。混淆Play代码真的很难,我只能混淆一些包。

  1. 您可以指定lib目录:
    -libraryjars target/universal/app-name-0.1.0-SNAPSHOT/lib
  2. 您可以指定保留构造函数的注释(否则您可能会出错):
    -keep @javax.inject.Singleton class * { <init>(...); }
    -keep @javax.inject.Inject class * { <init>(...); }
    
  3. 您可以进行后处理,例如删除文档和 Scala 3 .tasty 文件:
name=your-app-name
version=0.1.0-SNAPSHOT
rm -rf share # remove docs
rm -rf bin # remove bin. You may run it via java -cp, see below
rm -rf logs # remove old logs
rm -f README.md # remove README
rm -f $name.$name-$version-sans-externalized.jar # remove old jar
zip -dq out.jar **.tasty # remove Scala 3 tasty files
zip -dq out.jar **.js # remove duplicated js files. You have them in assets jar
zip -dq out.jar **.html # remove duplicated html files. You have them in assets jar
java -Dconfig.file=conf/application.conf -Dlogback.configurationFile=conf/logback.xml -cp "conf/*:lib/*:out.jar" play.core.server.ProdServerStart # run

我的整个 proguard 文件:

-injars      target/universal/my-app-0.1.0-SNAPSHOT/my-app.my-awesome-app-0.1.0-SNAPSHOT-sans-externalized.jar
-outjars     target/universal/my-app-0.1.0-SNAPSHOT/out.jar
-libraryjars <java.home>/jmods/java.base.jmod(!**.jar;!module-info.class)
-libraryjars target/universal/my-app-0.1.0-SNAPSHOT/lib

-keep class !auth.**,!db.**,!log.**,!utils.**,** { *; }
-keep @javax.inject.Singleton class * { <init>(...); }
-keep @javax.inject.Inject class * { <init>(...); }

-dontnote
-dontwarn
-dontobfuscate
#-dontoptimize
-optimizations code/allocation/variable,code/removal/simple,code/removal/advanced,code/simplification/math,code/simplification/string,code/simplification/object,code/simplification/arithmetic,class/marking/final,method/inlining/tailrecursion

您可能会注意到

-dontobfuscate
。您可能会尝试避免它们,但由于 Play Framework 的魔力,这很难做到。即使删除
-optimizations
过滤器也可能会在运行时破坏构建。

注 1:proguard 文件中的 out.jar 名称应与 java cp 标志中的名称相同。

注 2:您也可以在此处找到有用的信息。

© www.soinside.com 2019 - 2024. All rights reserved.