如何在执行
play state|dist
命令时自动混淆 Play Framework Web 应用程序?
这个想法是使用Proguard来执行Java代码混淆。
有 SBT 的插件,例如 sbt-proguard 和 xsbt-proguard-plugin,但我不确定是否可以将它们直接与 Play 2 集成。
请指教。
我不知道这对于 Play Framework
2.0.x
是否可行,但从 2.2.0
开始可以做到。
您可以按照此处给出的步骤进行操作。所有步骤都非常简单。但是,您需要知道所需文件在哪里:
plugins.sbt
- 您可以在PLAY_HOME/framework/project/plugins.sbt
build.sbt
- 您将在应用程序根文件夹中找到它。该文件仅从 Play 2.2.0 开始可用。这些步骤应该足以将插件与 Play 集成
希望对您有帮助。
使用 Scala 3 就更难了。混淆Play代码真的很难,我只能混淆一些包。
-libraryjars target/universal/app-name-0.1.0-SNAPSHOT/lib
-keep @javax.inject.Singleton class * { <init>(...); }
-keep @javax.inject.Inject class * { <init>(...); }
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:您也可以在此处找到有用的信息。