На этом веб-сайте представлен инструмент защиты JAR
и защищенный модуль запуска JAR
. Инструменты работают с Java 8
, но не с, например. Java 11
. Идеи, описанные в их руководстве пользователя , говорят о ClassLoader
методе шифрования. Предоставленные инструменты доступны только в качестве пробной версии, но мне удалось успешно защитить и запустить простой JAR
.
secret.txt
:
My secret
Main.java
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.invoke.MethodHandles;
import static java.lang.invoke.MethodHandles.lookup;
import static java.nio.charset.StandardCharsets.UTF_8;
public class Main
{
public static void main(String[] arguments) throws Exception
{
final byte[] resourceBytes = getResource("secret.txt");
System.out.println("Secret: " + new String(resourceBytes, UTF_8).trim());
}
@SuppressWarnings("SameParameterValue")
private static byte[] getResource(String filePath) throws Exception
{
MethodHandles.Lookup lookup = lookup();
Class<?> currentClass = lookup.lookupClass();
try (InputStream inputStream = currentClass.getResourceAsStream("/" + filePath))
{
return toByteArray(inputStream);
}
}
private static byte[] toByteArray(InputStream inputStream) throws IOException
{
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[16384];
while ((nRead = inputStream.read(data, 0, data.length)) != -1)
{
buffer.write(data, 0, nRead);
}
return buffer.toByteArray();
}
}
JarProtector
>"C:\Program Files\Java\jdk1.8.0_181\bin\java" -jar JarProtector.jar JarProtectorTest.jar
JarProtectorTrial started...
[1] protecting JarProtectorTest.jar
[1] file protected: JarProtectorTest.car
JarProtectorTrial successfully ended.
JarStarter
>"C:\Program Files\Java\jdk1.8.0_181\bin\java" -cp JarStarter.jar;JarProtectorTest.car com.bfa.JarStarter Main
Secret: My secret