From 463fc318e66016c7c09f70201812643feadd32ee Mon Sep 17 00:00:00 2001 From: lizishan Date: Mon, 19 Apr 2021 14:49:21 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=BB=E7=B1=BB?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6=E5=9C=A8=E6=89=93=E5=8C=85=E6=97=B6=E5=8C=85?= =?UTF-8?q?=E5=90=AB=E5=85=A8=E9=83=A8=E4=BE=9D=E8=B5=96=EF=BC=8C=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=E6=97=B6=E4=BD=BF=E7=94=A8assembly:assembly=EF=BC=8C?= =?UTF-8?q?=E6=96=B9=E4=BE=BF=E5=9C=A8=E8=84=9A=E6=9C=AC=E4=B8=AD=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=EF=BC=8C=E8=80=8C=E4=B8=8D=E5=BF=85=E4=BE=B5=E5=85=A5?= =?UTF-8?q?=E5=8E=9F=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 13 +++++++++ src/main/java/io/xjar/XJar.java | 47 +++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 src/main/java/io/xjar/XJar.java diff --git a/pom.xml b/pom.xml index 09c6777..2a7e1dc 100644 --- a/pom.xml +++ b/pom.xml @@ -67,6 +67,19 @@ + + maven-assembly-plugin + + + + io.xjar.XJar + + + + jar-with-dependencies + + + org.apache.maven.plugins maven-source-plugin diff --git a/src/main/java/io/xjar/XJar.java b/src/main/java/io/xjar/XJar.java new file mode 100644 index 0000000..c8f6392 --- /dev/null +++ b/src/main/java/io/xjar/XJar.java @@ -0,0 +1,47 @@ +package io.xjar; + +public class XJar { + + public static void main(String[] args) throws Exception { + String sourceJar = System.getProperty("xjar.source"); + if (stringIsEmpty(sourceJar)) { + System.err.println("请使用-Dxjar.source系统属性指定要加密的jar包。"); + return; + } + String destJar = System.getProperty("xjar.dest"); + if (stringIsEmpty(destJar)) { + System.err.println("请使用-Dxjar.dest系统属性指定加密后的jar包。"); + return; + } + String password = System.getProperty("xjar.password"); + if (stringIsEmpty(password)) { + System.err.println("请使用-Dxjar.password系统属性指定加密秘钥,长度小于256字节。"); + return; + } + String algorithm = System.getProperty("xjar.algorithm"); + String keysize = System.getProperty("xjar.keysize"); + String ivsize = System.getProperty("xjar.ivsize"); + String include = System.getProperty("xjar.include"); + String exclude = System.getProperty("xjar.exclude"); + XEncryption encryption = XCryptos.encryption().from(sourceJar); + if (stringIsEmpty(algorithm) || stringIsEmpty(keysize) || stringIsEmpty(ivsize)) { + encryption = encryption.use(password); + } + else { + encryption = encryption.use(algorithm, Integer.parseInt(keysize), Integer.parseInt(ivsize), password); + } + if (!stringIsEmpty(include)) { + encryption = encryption.include(include); + } + if (!stringIsEmpty(exclude)) { + encryption = encryption.exclude(exclude); + } + System.out.println("正在进行加密操作,请稍候..."); + encryption.to(destJar); + } + + private static boolean stringIsEmpty(String str) { + return str == null || str.trim().length() <= 0; + } + +} From 5b226caa28ce7b9ebdca7dd7f6b0ffac3b02aebf Mon Sep 17 00:00:00 2001 From: lizishan Date: Mon, 19 Apr 2021 14:53:56 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=9C=A8=E5=8A=A0?= =?UTF-8?q?=E5=AF=86=E5=8C=85=E4=B8=AD=E5=8A=A0=E5=85=A5xjar=E6=97=B6?= =?UTF-8?q?=E7=9A=84=E6=8E=92=E9=99=A4=E9=A1=B9=EF=BC=8C=E5=8E=BB=E9=99=A4?= =?UTF-8?q?=E8=BF=90=E8=A1=8C=E4=B8=AD=E4=B8=8D=E9=9C=80=E8=A6=81=E7=9A=84?= =?UTF-8?q?=E7=B1=BB=EF=BC=8C=E5=8F=AF=E6=A0=B9=E6=8D=AE=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/io/xjar/XInjector.java | 108 ++++++++++++++------------- 1 file changed, 57 insertions(+), 51 deletions(-) diff --git a/src/main/java/io/xjar/XInjector.java b/src/main/java/io/xjar/XInjector.java index f5eb6ef..5887cc7 100644 --- a/src/main/java/io/xjar/XInjector.java +++ b/src/main/java/io/xjar/XInjector.java @@ -1,51 +1,57 @@ -package io.xjar; - -import io.loadkit.Loaders; -import io.loadkit.Resource; -import org.apache.commons.compress.archivers.jar.JarArchiveEntry; -import org.apache.commons.compress.archivers.jar.JarArchiveOutputStream; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.Set; - -/** - * XJAR API - * - * @author Payne 646742615@qq.com - * 2018/11/25 10:34 - */ -public class XInjector { - - /** - * 往JAR包中注入XJar框架的classes - * - * @param zos jar包输出流 - * @throws IOException I/O 异常 - */ - public static void inject(JarArchiveOutputStream zos) throws IOException { - Set directories = new HashSet<>(); - Enumeration resources = Loaders.ant().load("io/xjar/**"); - while (resources.hasMoreElements()) { - Resource resource = resources.nextElement(); - String name = resource.getName(); - String directory = name.substring(0, name.lastIndexOf('/') + 1); - if (directories.add(directory)) { - JarArchiveEntry xDirEntry = new JarArchiveEntry(directory); - xDirEntry.setTime(System.currentTimeMillis()); - zos.putArchiveEntry(xDirEntry); - zos.closeArchiveEntry(); - } - JarArchiveEntry xJarEntry = new JarArchiveEntry(name); - xJarEntry.setTime(System.currentTimeMillis()); - zos.putArchiveEntry(xJarEntry); - try (InputStream ris = resource.getInputStream()) { - XKit.transfer(ris, zos); - } - zos.closeArchiveEntry(); - } - } - -} +package io.xjar; + +import io.loadkit.Loaders; +import io.loadkit.Resource; +import org.apache.commons.compress.archivers.jar.JarArchiveEntry; +import org.apache.commons.compress.archivers.jar.JarArchiveOutputStream; +import org.apache.commons.compress.utils.Sets; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Enumeration; +import java.util.HashSet; +import java.util.Set; + +/** + * XJAR API + * + * @author Payne 646742615@qq.com 2018/11/25 10:34 + */ +public class XInjector { + + public static HashSet ignoreClass = Sets.newHashSet("io/xjar/XInjector.class", "io/xjar/XGo.class", + "io/xjar/XJar.class"); + + /** + * 往JAR包中注入XJar框架的classes + * + * @param zos jar包输出流 + * @throws IOException I/O 异常 + */ + public static void inject(JarArchiveOutputStream zos) throws IOException { + Set directories = new HashSet<>(); + Enumeration resources = Loaders.ant().load("io/xjar/**"); + while (resources.hasMoreElements()) { + Resource resource = resources.nextElement(); + String name = resource.getName(); + if (ignoreClass.contains(name)) { + continue; + } + String directory = name.substring(0, name.lastIndexOf('/') + 1); + if (directories.add(directory)) { + JarArchiveEntry xDirEntry = new JarArchiveEntry(directory); + xDirEntry.setTime(System.currentTimeMillis()); + zos.putArchiveEntry(xDirEntry); + zos.closeArchiveEntry(); + } + JarArchiveEntry xJarEntry = new JarArchiveEntry(name); + xJarEntry.setTime(System.currentTimeMillis()); + zos.putArchiveEntry(xJarEntry); + try (InputStream ris = resource.getInputStream()) { + XKit.transfer(ris, zos); + } + zos.closeArchiveEntry(); + } + } + +} From 8da2fad57b285ad7560f27c7d542d72c5206851f Mon Sep 17 00:00:00 2001 From: lizishan Date: Tue, 20 Apr 2021 16:19:22 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/io/xjar/XInjector.java | 115 ++++++++++++++------------- 1 file changed, 58 insertions(+), 57 deletions(-) diff --git a/src/main/java/io/xjar/XInjector.java b/src/main/java/io/xjar/XInjector.java index 5887cc7..3557fa4 100644 --- a/src/main/java/io/xjar/XInjector.java +++ b/src/main/java/io/xjar/XInjector.java @@ -1,57 +1,58 @@ -package io.xjar; - -import io.loadkit.Loaders; -import io.loadkit.Resource; -import org.apache.commons.compress.archivers.jar.JarArchiveEntry; -import org.apache.commons.compress.archivers.jar.JarArchiveOutputStream; -import org.apache.commons.compress.utils.Sets; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.Set; - -/** - * XJAR API - * - * @author Payne 646742615@qq.com 2018/11/25 10:34 - */ -public class XInjector { - - public static HashSet ignoreClass = Sets.newHashSet("io/xjar/XInjector.class", "io/xjar/XGo.class", - "io/xjar/XJar.class"); - - /** - * 往JAR包中注入XJar框架的classes - * - * @param zos jar包输出流 - * @throws IOException I/O 异常 - */ - public static void inject(JarArchiveOutputStream zos) throws IOException { - Set directories = new HashSet<>(); - Enumeration resources = Loaders.ant().load("io/xjar/**"); - while (resources.hasMoreElements()) { - Resource resource = resources.nextElement(); - String name = resource.getName(); - if (ignoreClass.contains(name)) { - continue; - } - String directory = name.substring(0, name.lastIndexOf('/') + 1); - if (directories.add(directory)) { - JarArchiveEntry xDirEntry = new JarArchiveEntry(directory); - xDirEntry.setTime(System.currentTimeMillis()); - zos.putArchiveEntry(xDirEntry); - zos.closeArchiveEntry(); - } - JarArchiveEntry xJarEntry = new JarArchiveEntry(name); - xJarEntry.setTime(System.currentTimeMillis()); - zos.putArchiveEntry(xJarEntry); - try (InputStream ris = resource.getInputStream()) { - XKit.transfer(ris, zos); - } - zos.closeArchiveEntry(); - } - } - -} +package io.xjar; + +import io.loadkit.Loaders; +import io.loadkit.Resource; +import org.apache.commons.compress.archivers.jar.JarArchiveEntry; +import org.apache.commons.compress.archivers.jar.JarArchiveOutputStream; +import org.apache.commons.compress.utils.Sets; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Enumeration; +import java.util.HashSet; +import java.util.Set; + +/** + * XJAR API + * + * @author Payne 646742615@qq.com + * 2018/11/25 10:34 + */ +public class XInjector { + + public static HashSet ignoreClass = Sets.newHashSet("io/xjar/XInjector.class", "io/xjar/XGo.class", + "io/xjar/XJar.class"); + + /** + * 往JAR包中注入XJar框架的classes + * + * @param zos jar包输出流 + * @throws IOException I/O 异常 + */ + public static void inject(JarArchiveOutputStream zos) throws IOException { + Set directories = new HashSet<>(); + Enumeration resources = Loaders.ant().load("io/xjar/**"); + while (resources.hasMoreElements()) { + Resource resource = resources.nextElement(); + String name = resource.getName(); + if (ignoreClass.contains(name)) { + continue; + } + String directory = name.substring(0, name.lastIndexOf('/') + 1); + if (directories.add(directory)) { + JarArchiveEntry xDirEntry = new JarArchiveEntry(directory); + xDirEntry.setTime(System.currentTimeMillis()); + zos.putArchiveEntry(xDirEntry); + zos.closeArchiveEntry(); + } + JarArchiveEntry xJarEntry = new JarArchiveEntry(name); + xJarEntry.setTime(System.currentTimeMillis()); + zos.putArchiveEntry(xJarEntry); + try (InputStream ris = resource.getInputStream()) { + XKit.transfer(ris, zos); + } + zos.closeArchiveEntry(); + } + } + +}