如何保护我的jar资源不被提取?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何保护我的jar资源不被提取?相关的知识,希望对你有一定的参考价值。
我想分发我的* .jar文件。我的意思是我的应用程序使用,但我不希望用户或任何人提取我的资源(声音,图片和其他)。
如何保护它?
谢谢
发明一个DRM机制,一旦他们破解它,起诉他们死亡。
不,老实说,你想要实现的目标真的非常复杂 - 如果不是不可能的话。您需要以加密机制的密钥不会包含在jar本身中的方式加密资源(如在代码中对其进行硬编码 - 黑客喜欢这个)。
所以你需要你的应用程序打开一些在你控制下的服务器的在线连接,这些服务器需要一直在线 - 你的用户会讨厌这样做,因为它产生了所有的麻烦(只需跟随关于最近的在线讨论) PC游戏)......真的值得吗?
用Java或任何语言都不可能做到这一点。如果您的程序可以使用某些内容,则可以使用它。你可以让人们更难一点,但是如果他们想要窃取图形/声音,他们可以在一天结束时。
你可以更好地投入制作人们喜欢并且用户友好的图形和声音等方面。
我们的Flash和Java Antidecompilers使用无密钥加密,即不使用硬编码加密密钥。确保使用任何反编译器就足够了。是的,我理解标准EULA不允许,但我们在http://www.bisguard.com/contacts.html通过个别请求给予此类许可 祝你好运
This网站介绍了JAR
保护工具和受保护的JAR
发射器。这些工具适用于Java 8
但不适用于Java 11
。他们的user manual中描述的想法谈论了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 FilesJavajdk1.8.0_181injava" -jar JarProtector.jar JarProtectorTest.jar
JarProtectorTrial started...
[1] protecting JarProtectorTest.jar
[1] file protected: JarProtectorTest.car
JarProtectorTrial successfully ended.
JarStarter
:
>"C:Program FilesJavajdk1.8.0_181injava" -cp JarStarter.jar;JarProtectorTest.car com.bfa.JarStarter Main
Secret: My secret
以上是关于如何保护我的jar资源不被提取?的主要内容,如果未能解决你的问题,请参考以下文章