kotlin 合成桌面应用程序的模糊处理,可能是ProGuard

y0u0uwnf  于 2023-06-24  发布在  Kotlin
关注(0)|答案(1)|浏览(101)

我们的主要任务是在Windows上(最好也在Mac上)制作一个GUI应用程序,所以不可能/非常难以找到源代码(Kotlin)。问题是=如何做?
理想情况下,我想知道:
.1.从我们的可执行文件/可执行文件中获取源代码的工具取决于。
.2.用于代码混淆的工具,达到前一点的工具无法工作的水平。
.3.下一节是关于我在Compose Desktop中所做的事情,但我并不局限于此。例如,如果你知道如何在JavaFx或其他东西中使用加密的Kotlin代码制作一个工作项目,请告诉我。
到目前为止所做的工作:在Compose Desktop中生成了一个.msi文件,该文件在Windows上创建文件,其中有.jar文件。我在here中打开了一个.jar,里面有它=我漂亮的源代码,虽然是Java的,但连变量都没有重命名!
接下来,我根据template更改了build.gradle.kts
重要提示=我不理解此模板。也许我做错了什么。我会添加代码,看看。但至少.msi得到了构建,并像以前一样安装了其余部分。同样的故事=我打开.jar,看到Java的源代码,变量没有重命名!但是再次=甚至不确定这个模板是否应该使.jar中的代码不可读。
注意=以前从未执行/学习过自定义模糊处理。我主要使用Kotlin和Android Studio。对于Compose Desktop,安装IntelliJ Idea。
代码:
build.gradle.kts

import org.jetbrains.compose.compose
import org.jetbrains.compose.desktop.application.dsl.TargetFormat

buildscript {
    dependencies {
        classpath("com.guardsquare:proguard-gradle:7.2.1")
    }
}

repositories {
    google()
    mavenCentral()
    maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
}

plugins {
    kotlin("jvm") version "1.6.10"
    id("org.jetbrains.compose") version "1.1.1"
}

dependencies {
    implementation(compose.desktop.currentOs)
}
val obfuscate by tasks.registering(proguard.gradle.ProGuardTask::class)

fun mapObfuscatedJarFile(file: File) =
    File("${project.buildDir}/tmp/obfuscated/${file.nameWithoutExtension}.min.jar")

compose.desktop {
    application {
        mainClass = "MainKt"
        nativeDistributions {
            targetFormats(TargetFormat.Exe, TargetFormat.Msi, TargetFormat.Deb)
            packageName = "untitled_04"
            packageVersion = "1.0.0"
        }
    }
}

obfuscate.configure {
    dependsOn(tasks.jar.get())

    val allJars = tasks.jar.get().outputs.files + sourceSets.main.get().runtimeClasspath.filter { it.path.endsWith(".jar") }
        .filterNot { it.name.startsWith("skiko-awt-") && !it.name.startsWith("skiko-awt-runtime-") } // walkaround https://github.com/JetBrains/compose-jb/issues/1971

    for (file in allJars) {
        injars(file)
        outjars(mapObfuscatedJarFile(file))
    }

    libraryjars("${compose.desktop.application.javaHome ?: System.getProperty("java.home")}/jmods")

    configuration("proguard-rules.pro")
}

proguard-rules.pro

-keepclasseswithmembers public class MainKt {
    public static void main(java.lang.String[]);
}

-dontwarn kotlinx.coroutines.debug.*

-keep class kotlin.** { *; }
-keep class kotlinx.coroutines.** { *; }
-keep class org.jetbrains.skia.** { *; }
-keep class org.jetbrains.skiko.** { *; }

-assumenosideeffects public class androidx.compose.runtime.ComposerKt {
    void sourceInformation(androidx.compose.runtime.Composer,java.lang.String);
    void sourceInformationMarkerStart(androidx.compose.runtime.Composer,int,java.lang.String);
    void sourceInformationMarkerEnd(androidx.compose.runtime.Composer);
}
t8e9dugd

t8e9dugd1#

以下是配置的设置

nativeDistributions {
    ...
    buildTypes.release.proguard {
            version.set("7.3.2")
            configurationFiles.from(project.file("proguard-rules.pro"))
            isEnabled.set(true)
            obfuscate.set(true)
        }
}

默认情况下禁用模糊处理

相关问题