【问题标题】:Obfuscate generated fat jar with gradle用 gradle 混淆生成的 fat jar
【发布时间】:2019-06-28 15:59:33
【问题描述】:

我正在使用 Kotlin 创建一个桌面应用程序,并试图混淆最终输出

我使用 JavaFx 和 Kotlin 开发一个应用程序。我使用 Gradle 作为构建工具,我正在寻找如何混淆我的 jar 以避免对 jar 进行逆向工程。生成的 jar 是一个胖 jar(所有库都在 jar 内)。我已经尝试在我的 gradle.build 中使用 proguard,但是每次我运行我的构建时,我都会得到很多“找不到引用的类”的原生 java 库类,例如 Object、String 等。

这是我当前的 proguard 任务:

def jarNameWithoutExtension = jar.archiveName.with { 
it.take(it.lastIndexOf(".")) }
def obfuscatedJarName = "${jarNameWithoutExtension}-release.jar"
def jarFileLocation = jar.archivePath.parent
def obfuscatedFilePath = Paths.get(jarFileLocation, obfuscatedJarName)

task obfuscate(type: ProGuardTask) {
    configuration 'proguard.txt'

    injars jar.archivePath
    outjars obfuscatedFilePath.toString()
    libraryjars files(configurations.compile.collect())
    libraryjars "/usr/lib/jvm/java-11-oracle/lib/rt.jar"
    doLast {
        jar.archivePath.renameTo(Paths.get(jarFileLocation, "$jarNameWithoutExtension-original.jar").toFile())
        obfuscatedFilePath.toFile().renameTo(jar.archivePath)
    }
}

jar.finalizedBy(project.tasks.obfuscate)

proguard.txt 文件目前为空 错误示例是“警告:javafx.animation.Animation:找不到超类或接口 java.lang.Object”

我希望在构建我的项目时生成一个混淆的 jar 文件,但我得到的只是编译错误

我希望有人可以帮助我解决我的问题

【问题讨论】:

    标签: gradle kotlin proguard


    【解决方案1】:

    JShrinker 是一个提供图形用户界面的 jar 混淆工具。如果您不限于 Pro Guard,它可能会解决您的问题。它非常用户友好,为您省去了其他程序几乎无法避免的所有配置和头疼问题。

    【讨论】:

    • 感谢您的回答,但在使用 JShrinker 后,我的 Jar 在运行时出现异常:线程“main”中的异常 java.lang.NoClassDefFoundError: javafx/application/Application 我不知道如何修复它
    • 你用的是什么JDK?另外,您使用哪个 IDE?请记住,JDK8 之后的 JDK 中不再包含 JavaFX。如果您使用的是 8+,则应查看 OpenJFX 网站以获取构建说明。
    • 我使用最后一个 JDK (11),OpenJFX 在我的依赖项和我的 fat jar 中(否则我之前不应该能够构建项目并对其进行测试)。对于 IDE,我使用 IntelliJ,但这并不重要,因为我使用 gradle 命令在终端上构建,我需要保持这种方式
    • 我还想更清楚一点,我需要在使用 gradle 构建期间对我的 jar 进行混淆。像这样它可以防止发布非混淆版本,因为我忘记在其上运行混淆器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 2018-07-13
    • 2019-04-29
    相关资源
    最近更新 更多