【问题标题】:How to Obfuscate a fatJar with Klassmaster如何使用 Klassmaster 混淆 fatJar
【发布时间】:2021-01-22 09:55:38
【问题描述】:

我有一个使用 gradle 脚本生成的胖 jar。当我运行以下命令时发布 gradle 脚本:-

java -jar 文件名.jar

它正在运行 main 方法,一切都很好。然而,当我尝试混淆这个 jar 时,生成的 jar 抱怨:-

错误:无效或损坏的 jarfile ObfusactedTest.jar

我的代码如下:-

build.gradle:-

    buildscript {
    repositories {
        mavenLocal()
        mavenCentral()
    }

    dependencies {
        classpath files("E:\\softs\\ZKM\\ZKMEval\\ZKM.jar") //ZKM_JAR_PATH must be set to point to your ZKM.jar
        classpath 'com.zelix.gradle:plugin:1.0.0'
    }
}

apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'com.zelix.gradle.plugin'

group = 'com.github.jitpack'

sourceCompatibility = 1.8 // java 8
targetCompatibility = 1.8

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.11'
    compile group: 'org.apache.commons', name: 'commons-collections4', version: '4.4'
}

jar {
    manifest {
        attributes "Main-Class": "com.github.jitpack.Hello"
    }
    zip64 = true
    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
}


zkmSetting {
    scriptName = "Obfuscate.txt" //Must be set to point to the ZKM Script to execute.
}

Obfuscate.txt:-

print "Obfuscating fatJar.....";

classpath
          "C:\Program Files\Java\jdk-10.0.2\lib\jrt-fs.jar"
          ".\obfuscateFatJar.jar";

open ".\obfuscateFatJar.jar" {"*.class"};

exclude org.apache.commons.*.*;
exclude com.github.jitpack.Hello.*;

obfuscate keepInnerClassInfo=false
           keepGenericsInfo=true
           exceptionObfuscation=heavy
           encryptStringLiterals=flowObfuscate;

saveAll archiveCompression=asIs
        deleteEmptyDirectories=true
        deleteXMLComments=false
        "ObfusactedTest.jar";

顺便说一下Hello.java有main方法。

【问题讨论】:

    标签: java gradle obfuscation deobfuscation


    【解决方案1】:

    您的 ZKM 脚本“open”语句指定 {"*.class"} 文件过滤器。因此,您将过滤掉所有非类文件,包括您的 MANIFEST.MF。见https://www.zelix.com/klassmaster/docs/openStatement.html#filter

    缺少 MANIFEST.MF 会给您一个“无效或损坏的 jarfile”错误。请注意,您的 Zelix KlassMaster 日志文件将包含如下消息。

    MESSAGE: 过滤掉路径 'obfuscateFatJar.jar!META-INF/MANIFEST.MF' 因为它不匹配指定的过滤器 '{".class"}>' (D)*

    您可以通过不使用文件过滤器(在这种情况下是最安全的选项)或扩大文件过滤器以包含其他文件类型来解决此问题。例如。 {".class" || ".MF"}

    【讨论】:

      【解决方案2】:

      更新类路径中的过滤器。代码现在看起来像这样。像魅力一样工作。

      execute "del ObfusactedTest.jar";
      
      classpath
                "C:\Program Files\Java\jdk-10.0.2\lib\jrt-fs.jar"
                ".\obfuscateFatJar.jar";
      
      open ".\obfuscateFatJar.jar" {"*.class" || "*.MF"};
      
      exclude org.apache.commons.*.*;
      
      obfuscate keepInnerClassInfo=false
                 keepGenericsInfo=true
                 exceptionObfuscation=heavy
                 encryptStringLiterals=flowObfuscate;
      
      saveAll archiveCompression=asIs
              deleteEmptyDirectories=true
              deleteXMLComments=false
              "ObfusactedTest.jar";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-03
        • 2010-10-14
        • 1970-01-01
        相关资源
        最近更新 更多