Ich versuche ProGuard zu verwenden, um meinen Code zu verschleiern, und benutze dann den ausgegebenen Code, um die benötigten Abhängigkeiten in das JAR einzufügen.ProGuard Obfscation und Shadow Abhängigkeiten
Derzeit bekomme ich einfach eine -obf
JAR und eine -all
JAR. Was ich brauche, ist ein -all
JAR mit verschleiertem Code.
import proguard.gradle.ProGuardTask
apply plugin: 'com.github.johnrengelman.shadow'
apply plugin: 'java'
buildscript {
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath group: 'net.sf.proguard', name: 'proguard-gradle', version: '5.3.1'
classpath group: 'com.github.jengelman.gradle.plugins', name: 'shadow', version: '1.2.4'
}
}
repositories {
mavenCentral()
jcenter()
}
jar {
manifest { attributes("Main-Class": "com.skcraft.launcher.Launcher") }
}
dependencies {
compile 'org.projectlombok:lombok:1.12.2'
compile 'com.fasterxml.jackson.core:jackson-databind:2.3.0'
compile 'commons-lang:commons-lang:2.6'
compile 'commons-io:commons-io:1.2'
compile 'com.google.guava:guava:15.0'
compile 'com.beust:jcommander:1.32'
compile 'com.miglayout:miglayout:3.7.4'
compile 'com.google.code.findbugs:jsr305:3.0.0'
compile files ('libs/javax-crypto.jar')
}
processResources {
filesMatching('**/*.properties') {
filter {
it.replace('${project.version}', project.version)
}
}
}
task obfuscate(type: proguard.gradle.ProGuardTask) {
configuration '../proguard.txt'
injars jar
outjars "${buildDir}/libs/launcher-${version}-obf.jar"
libraryjars files(configurations.compile.collect())
}
shadowJar {
dependencies {
exclude(dependency('org.projectlombok:lombok'))
}
}
build.dependsOn(obfuscate)
build.dependsOn(shadowJar)
task wrapper(type: Wrapper) { gradleVersion = "3.1" }
Irgendwelche Ideen? Eine Idee, die ich mit der shadowJar
kam und dann verschleiern, aber ich muss meine proguard.txt
konfigurieren, nur um meinen Code zu verschleiern. Ich habe versucht, dies unten zu tun, aber es immer noch versucht, alle Pakete zu verschleiern, werfen Fehler:
# Include java runtime classes
-libraryjars <java.home>/lib/rt.jar
# Output a source map file
-printmapping proguard.map
# Keep filenames and line numbers
-keepattributes SourceFile, LineNumberTable
# Disable certain proguard optimizations which remove stackframes (same as Android defaults)
-optimizations !method/inlining/*
-keep public class * {
public protected *;
}
-keepclassmembernames class * {
java.lang.Class class$(java.lang.String);
java.lang.Class class$(java.lang.String, boolean);
}
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class !com.skcraft.** { *; }
Vielen Dank im Voraus
ID arbeitete nicht für mich. Ich machte zunächst ein verschleiertes dünnes Glas und übertrug es als Parameter im Schattenglas. Aber das erzeugte Glas hatte keinen verschleierten Code. haben Sie überprüft, ob es für Sie funktionierte, indem Sie das Fettglas dekompilieren? – wizneel