powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / защита от копирования
12 сообщений из 12, страница 1 из 1
защита от копирования
    #38519010
ymerla91
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мне нужно защитить от копирования программу,саму программу я сделала это цифровая подпись dsa.создаю файл data. компилирую оба файла и запускаю. подпись проходит успешно.а как защитить эту программу от копирования не знаю помогите пожалуйста!?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
 //GSig.java
/* Генерация DSA-подписи */
 
import java.io.*;
import java.security.*;
class GSig 
{
 //сохранение байтового массива в файл
public static void saveToFile (byte[] info, 
String filename)
{
try
{
FileOutputStream fos = new FileOutputStream
(filename);
fos.write(info);
fos.close();
}
catch (Exception e) 
{
System.err.println("Caught exception " + e.toString());
}
}// saveToFile ()
 
public static void main(String args[]) 
{
try
{
/* Генерация ключей */
KeyPairGenerator keyGen = 
KeyPairGenerator.getInstance("DSA", "SUN");
SecureRandom random = 
SecureRandom.getInstance("SHA1PRNG", "SUN");
 keyGen.initialize(1024, random);
 KeyPair pair = keyGen.generateKeyPair();
PrivateKey priv = pair.getPrivate();
PublicKey pub = pair.getPublic();
 /* Создание объекта класса Signature */
 Signature dsa = 
Signature.getInstance("SHA1withDSA", "SUN"); 
/* Инициализация частным ключом */
dsa.initSign(priv);
 /* Чтение данных из файла “data”. Вызов метода update() */
 FileInputStream fis = new FileInputStream("data");
BufferedInputStream bufin = 
new BufferedInputStream(fis);
byte[] buffer = new byte[1024];
int len;
while (bufin.available() != 0) 
{
len = bufin.read(buffer);
dsa.update(buffer, 0, len);
}
bufin.close();
 /* Генерация подписи */
byte[] realSig = dsa.sign();
 /* Сохранение подписи в файл “signature” */
saveToFile (realSig,"signature");
 /* Сохранение открытого ключа в файл “pubkey” */
byte[] key = pub.getEncoded();
saveToFile (key,"pubkey");
} 
 catch (Exception e) 
{
System.err.println("Caught exception " + e.toString());
}
 }// main()
}// class GSig 



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
 //VSig.java
/* Верификация DSA-подписи */
import java.io.*;
import java.security.*;
import java.security.spec.*;
class VSig 
{
//чтение из файла в байтовый массив
public static byte[] readFromFile (String fileName)
{
byte[] info;
try
{
FileInputStream fis = new FileInputStream(fileName);
info = new byte[fis.available()];
fis.read(info);
fis.close();
}
catch (Exception e)
{
System.err.println("Caught exception " + e.toString());
info = new byte[0];
}
return(info);
}// copyFromFile ()
public static void main(String args[]) 
{
try
{
/* Получение encoded public key из файла “pubkey” */
byte[] encKey = readFromFile("pubkey");

/* Создание спецификации ключа */
X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(encKey);

/* Создание объектов Лунафсещкн и ЗгидшсЛун*/
KeyFactory keyFactory = KeyFactory.getInstance ("DSA", "SUN");
PublicKey pubKey = keyFactory.generatePublic (pubKeySpec);

/* Чтение подписи из файла “signature” */
byte[] sigToVerify = readFromFile("signature");

/* Создание объекта класса Signature и инициализация с помощью открытого ключа */
Signature sig = Signature.getInstance ("SHA1withDSA", "SUN");
sig.initVerify(pubKey);

/* Чтение данных из файла “data” и вызов метода update() */
FileInputStream datafis = new FileInputStream ("data");
BufferedInputStream bufin = new BufferedInputStream(datafis);
byte[] buffer = new byte[1024];
int len;
while (bufin.available() != 0) 
{
len = bufin.read(buffer);
sig.update(buffer, 0, len);
}
bufin.close();
/* Верификация */
boolean verifies = sig.verify(sigToVerify);
System.out.println("Signature verifies: " + verifies);
}
catch (Exception e) 
{
System.err.println("Caught exception " + e.toString());
}
}// main() 
}// class VSig 
...
Рейтинг: 0 / 0
защита от копирования
    #38519125
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО, на практике - никак. Даже если Вы все класс файлы зашифруете, все-равно будет незащищенный class-loader. Так что нанимайте сразу с релизом штат юристов.
...
Рейтинг: 0 / 0
защита от копирования
    #38520188
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Более-менее надежно - использовать hardware ключ, который умеет исполнять пользовательский код. Часть программы, которую считаете know-how, сохраняете в памяти ключа и там же она выполняется. Таким образом копируй сколько хочешь, без ключа программа неработоспособна.
На ключе, скорее всего, придется работать на C.
Другие варианты (ключевой файл, привязка к конфигурации копьютера, обращение к серверу) задержат взломщиков ненадолго - ждите патчей, а то и ключегенераторов. Тем более, если речь идет о java
...
Рейтинг: 0 / 0
защита от копирования
    #38520434
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно приложение разработать так что его часть логики лежит на сервере.
Правда это потребует постоянного интернет соединения, но исключит
возможность копирования.

Или делайте сразу веб-приложение.
...
Рейтинг: 0 / 0
защита от копирования
    #38520774
ymerla91
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ivanraБолее-менее надежно - использовать hardware ключ, который умеет исполнять пользовательский код. Часть программы, которую считаете know-how, сохраняете в памяти ключа и там же она выполняется. Таким образом копируй сколько хочешь, без ключа программа неработоспособна.
На ключе, скорее всего, придется работать на C.
Другие варианты (ключевой файл, привязка к конфигурации копьютера, обращение к серверу) задержат взломщиков ненадолго - ждите патчей, а то и ключегенераторов. Тем более, если речь идет о java

а вы сможете мне помочь??
...
Рейтинг: 0 / 0
защита от копирования
    #38520787
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ymerla91а вы сможете мне помочь??
Задача решения не имеет. Если код можно выполнить на машине, то его можно и скопировать. Самые сложные DRM защиты в играх ломаются за несколько недель. Даже те, которые с клиет-серверной составляющей.
Поэтому решить проблему копирования у вас вряд ли получиться. Можете лишь придумать своё собтсвенное решение и реализовать его чтобы усложник возможность копирования.
...
Рейтинг: 0 / 0
защита от копирования
    #38520807
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы собирали сборки под JBoss, в которых mac-адреса коннекторов "прошивались" на уровне
кода. Под каждую лицензию. Это не бох весть какая защита но лучше чем ничего.

Можно проект сделать много-модульным и уникальным для каждого покупателя или партнёра.
Тоесть скопировать будет можно но рано или поздно нужен будет функционал из того
модуля которого нет.
...
Рейтинг: 0 / 0
защита от копирования
    #38520812
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пользовался только вот этим: http://www.guardant.ru/ , и то только для защиты desktop-приложений, и не на яве.
А в принципе, разработка hardware защиты - тема сложная и дорогостоящая, так что если ваш софт не стоит миллион, то лучше и не вникать, а брать типовое решение. И даже в этом случае за ключи и комплект разработчика придется выложить некоторую сумму
...
Рейтинг: 0 / 0
защита от копирования
    #38520827
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanra, мне кажется java сборка слишком открыта чтобы оснащать ее этой технологией.
Если проводить аналогию - то это стальная дверь со швейцарскими замками которую
мы ставим в соломенный домик.

В любом случае слабое место будет сам код, и декомпилляторов для Java щас полно.
...
Рейтинг: 0 / 0
защита от копирования
    #38520841
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Речь идет именно о выполнении "полезного" кода на процессоре ключа - в этом случае копирование/декомпиляция исполняемого кода программы ничего не даст. При этом память ключа защищена от чтения - в нее можно только писать, так что скопировать код оттуда не получится. Это как черный ящик, обрабатывающий данные по заложенному в него алгоритму.
Но с явой да, проблематично - эту часть придется писать на C
...
Рейтинг: 0 / 0
защита от копирования
    #38520862
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понимаю ключ на флешке - это еще один процессор.
И в зависимости от задач его можно как нагружать логикой так и
вовсе не нагружать. Можно просто передавать ему кусок блоба и получать
обратно какой-то ответ. Но вобщем-то ключик Guardant это далеко
не Java решение. Вообще далеко.
...
Рейтинг: 0 / 0
защита от копирования
    #38531870
ymerla91
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
помогите пожалуйста, преподу все мало, и он просит чтобы было написано не только что подпись проходит, а что где проверяет программа , все все должно писаться. (вдруг, говорит, вы просто написали что проверка проходит и это на экран выводится и ничего не проверяется)а я не понимаю как это сделать.очень нужна ваша помощь
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / защита от копирования
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]