Как защитить мой ресурс от извлечения? - PullRequest
2 голосов
/ 08 июля 2011

Я хочу распространить мой * .jar файл.Я имею в виду, что мое приложение будет использоваться, но я не хочу, чтобы пользователь или кто-либо извлекал мой ресурс (звук, изображение и другие).

Как защитить его?

thx

Ответы [ 4 ]

5 голосов
/ 08 июля 2011

Изобретите механизм DRM и, как только они его сломают, подайте в суд на них.

Нет, честно говоря, то, чего вы пытаетесь достичь, действительно, очень сложно - если не невозможно.Вам нужно было бы зашифровать ресурсы таким образом, чтобы ключ к механизму шифрования не содержался в самой банке (как при жестком кодировании в вашем коде - хакерам это нравится).

Поэтому вам понадобится вашприложение, чтобы открыть онлайн-соединение с сервером, находящимся под вашим контролем, который должен быть постоянно подключен к сети - и ваши пользователи будут ненавидеть вас за это из-за всех возникающих проблем (просто следите за онлайн-дискуссиями о последних компьютерных играх)действительно ли это того стоит?

2 голосов
/ 08 июля 2011

Это невозможно сделать на Java или любом другом языке. Если что-то может быть использовано вашей программой, это может быть принято. Вы можете сделать это немного сложнее для людей, но в конце концов, если они хотят украсть графику / звуки, они могут.

Было бы гораздо лучше, если бы вы приложили усилия к созданию графики, звуков и т. Д., Которые нравятся и удобны для пользователей.

0 голосов
/ 25 апреля 2019

На этом веб-сайте представлен инструмент защиты 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
0 голосов
/ 04 июля 2012


Наши антидекомпиляторы Flash и Java используют шифрование без ключа, т.е. не используют жесткое кодирование для ключа шифрования.Чтобы убедиться, что достаточно использовать любой декомпилятор.Да, я понимаю, что стандартное лицензионное соглашение не позволяет этого, но мы даем такое разрешение по индивидуальному запросу на http://www.bisguard.com/contacts.html
Гуг удачи

...