|
Вопрос # 775/ вопрос открыт / |
|
Тут такой вопрос, есть 2 exe - work.exe и protect.exe, work.exe - это программа требующая активации ключь от проги я хочу спрятать в protect.exe (этот exe пустой там только форма и ничего более) как это сделать (ключ будет генерироваться случайно),да и желательно как нибудь зашифровать ключ (чтобы труднее было взломать)
 |
Вопрос задал: Аксион (статус: 4-ый класс)
Вопрос отправлен: 22 июля 2007, 13:21
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Градов Ю.М.
Здравствуйте, Матвеев Мефодий Олегович!
Посмотрите фрагменты программ в приложении, думаю, что помогут.
Удачи!!!
Приложение: Переключить в обычный режим-
-
-
-
-
- WORK EXEFILE C:\work.exe
-
-
-
-
-
- implementation
- {$R *.DFM}
-
-
-
- procedure ExtractRes(ResType, ResName, ResNewName : String);
- var
- Res : TResourceStream;
- begin
- Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
- Res.SavetoFile(ResNewName);
- Res.Free;
- end;
-
- procedure TForm1.BitBtn1Click(Sender: TObject);
- begin
-
- ExtractRes('EXEFILE', 'WORK', 'work.exe');
- ShellExecute(Application.Handle, 'open', PChar('work.exe'), nil, nil, SW_SHOWNORMAL);
- end;
-
-
-
- const
- csCryptFirst = 20;
- csCryptSecond = 230;
- csCryptHeader = 'Crypted';
-
- type
- ECryptError = class(Exception);
-
- function CryptString(Str:String):String;
- var i,clen : Integer;
- begin
- clen := Length(csCryptHeader);
- SetLength(Result, Length(Str)+clen);
- Move(csCryptHeader[1], Result[1], clen);
- For i := 1 to Length(Str) do
- begin
- if i mod 2 = 0 then
- Result[i+clen] := Chr(Ord(Str[i]) xor csCryptFirst)
- else
- Result[i+clen] := Chr(Ord(Str[i]) xor csCryptSecond);
- end;
- end;
-
- function UnCryptString(Str:String):String;
- var i, clen : Integer;
- begin
- clen := Length(csCryptHeader);
- SetLength(Result, Length(Str)-clen);
- if Copy(Str, 1, clen) < > csCryptHeader then
- raise ECryptError.Create('UnCryptString failed');
-
- For i := 1 to Length(Str)-clen do
- begin
- if (i) mod 2 = 0 then
- Result[i] := Chr(Ord(Str[i+clen]) xor csCryptFirst)
- else
- Result[i] := Chr(Ord(Str[i+clen]) xor csCryptSecond);
- end;
- end;
-
-
-
-
 |
Ответ отправил: Градов Ю.М. (статус: 8-ой класс)
Время отправки: 22 июля 2007, 13:45
Оценка за ответ: 5
Комментарий к оценке: Спасибо пригодится
|
Мини-форум вопроса
Всего сообщений: 25; последнее сообщение — 23 июля 2007, 11:13; участников в обсуждении: 3.
Страницы: [1] [2] [Следующая »]
|
Аксион (статус: 4-ый класс), 22 июля 2007, 13:25 [#1]:
Да и чуть не забыл ключь будет генерироваться из id а не случайно, а вот id - случайно
|
|
Dron (статус: Студент), 22 июля 2007, 13:25 [#2]:
А какой смысл хранить ключ (в виде строки, видимо) в отдельном файле? С таким же успехом его можно хранить и в основном файле, просто закодировав строку каким-нибудь криптостойким алгоритмом (или несколькими алгоритмами). К тому же, если ключ будет статический, это не есть хорошо. Если однажды кто-то узнает ключ, то его можно будет легко передать дальше и любой сможет активировать программу. Обычно делают так, что ключ привязывается к конфигурации компьютера (хотя это и не так просто).
В общем, вашу идею нужно тщательно обдумать и обкатать.
С уважением.
|
|
Dron (статус: Студент), 22 июля 2007, 13:28 [#3]:
Вы решили привязать некий ID - это уже лучше. Следующий момент: откуда этот ID будет браться? Допустим, это будет некоторое число, тогда будет некоторая функция Key(ID), которая будет генерировать ключ, подходящий только к этому ID. Но значит ID не должен меняться в процессе работы, а должен формироваться один раз (при первом запуске программы) и сохраняться где-то в системе, чтобы при следующим запусках он не генерировался заново, а использовался сгенерированный ранее.
С уважением.
|
|
Аксион (статус: 4-ый класс), 22 июля 2007, 13:31 [#4]:
Блин я еще коечто забыл не ключ будет храниться в protect.exee а id и именно е6го мне надо зашифровать (както я поторопившись написал вопрос забыл его перепроверить)
|
|
Аксион (статус: 4-ый класс), 22 июля 2007, 13:33 [#5]:
Да и кстати хорошая идея с конфигурацией компа - и это в принципе не так сложно.
|
|
Аксион (статус: 4-ый класс), 22 июля 2007, 13:38 [#6]:
я хранил id в реестре и тхт файле и если id из реестра не совпадал с id из тхт файла то генерировался новый id (но айди в реестре легко изменить также как и в тхт файле - поэтому данная система не надёжна)
|
|
Dron (статус: Студент), 22 июля 2007, 13:39 [#7]:
Смысла хранить строку в отдельном exe-файле нет (тем более, в нём её в любом случае проще найти, чем в основном файле, ведь они по объёму намного отличаться будут и отдельный файл будет пустой плане скомпилированного кода).
> Да и кстати хорошая идея с конфигурацией компа - и это в принципе не так сложно.
Смотря на каком уровне вы хотите это реализовать и какие элементы конфигурации использовать...
С уважением.
|
|
Dron (статус: Студент), 22 июля 2007, 13:41 [#8]:
А вы храните не саму строку, а её зашифрованный вид. Возьмите, к примеру, пакет DCPCrypt (есть на сайте в разделе "Компоненты"), выберите оттуда какой-нибудь алгоритм и используйте его. Вероятность вскрытия очень низка, а значит и изменить сложно будет. Если в зашифрованной строке изменить хотя бы один символ, результат расшифровки получится совсем другой.
С уважением.
|
|
Аксион (статус: 4-ый класс), 22 июля 2007, 13:44 [#9]:
>Смысла хранить строку в отдельном exe-файле нет (тем более, в нём её в любом случае проще найти, чем в основном файле, ведь они по объёму намного отличаться будут и отдельный файл будет пустой плане скомпилированного кода).
Но как записать стоку в ехе который сейчас работает (тоесть саму в себя)? именно поэтому я придумал второй ехе
|
|
Dron (статус: Студент), 22 июля 2007, 13:50 [#10]:
Вариант А) Хранить строку где-то ещё (опять-таки, реестр, либо файл, запрятанный куда-нибудь подальше, вроде Windows\System32).
Вариант Б) Есть такая интересная вещь как acRW: "Модуль, с помощью которого можно хранить данные прямо в exe-файле. Имеется возможность записи данных и их чтение. Метод работы основан на записи данных в конец exe-файла, где они не учитываются как содержимое самого исполняемого файла."
С уважением.
|
|
Аксион (статус: 4-ый класс), 22 июля 2007, 13:55 [#11]:
Скачал DCPCrypt, установил - а вот как пользаваться не знаю!!!!!!!!!
|
|
Dron (статус: Студент), 22 июля 2007, 13:58 [#12]:
Градов Ю.М.: шифрование, указанное вами в ответе, увы, не криптостойкое. Закодированная строка легко найдётся в exe-файле и будет дешифрована.
С уважением.
|
|
Dron (статус: Студент), 22 июля 2007, 13:59 [#13]:
Матвеев Мефодий Олегович: господи, почему вы всё время так кричите?.. Посмотрите документацию - там есть примеры использования.
С уважением.
|
|
Градов Ю.М. (статус: 8-ой класс), 22 июля 2007, 14:06 [#14]:
to: Dron
Согласен, это чисто от юзеров, а ломается все - определяется только временем.
|
|
Dron (статус: Студент), 22 июля 2007, 14:09 [#15]:
Матвеев Мефодий Олегович:
А на какую программу защиту-то ставим? Что-то серьёзное или так, ради интереса?
С уважением.
|
|
Аксион (статус: 4-ый класс), 22 июля 2007, 14:09 [#16]:
Градов Ю.М. спасибо отличный пример мне ОЧЕНЬ пригодился Dron а почему вы не написали ответ я бы оценку поставил...
|
|
Аксион (статус: 4-ый класс), 22 июля 2007, 14:11 [#17]:
Вообще покачто ради интереса но в будующем (годика через 3) может куданибудь поставлю а пока просто придумываю защиту (типа starforse ) )
|
|
Градов Ю.М. (статус: 8-ой класс), 22 июля 2007, 14:12 [#18]:
to: Dron
И не согласен, если после выполнения exe-шник удалить процедурой написаной на Asm и сам exe-шник сжать AsPack, а ключевой exe-шник будет храниться в 1-ом exe-шнике в rcData, то еще нужно догадаться...
|
|
Dron (статус: Студент), 22 июля 2007, 14:14 [#19]:
Почему ответ не написал? А что я в ответе напишу? В мини-форуме практически одни мысли - никакой конкретики...
С уважением.
|
|
Dron (статус: Студент), 22 июля 2007, 14:15 [#20]:
Градов Ю.М.:
На любой яд есть противоядие. Все эти UPX, AsPack и прочие compress\'оры известны и распаковать файлы обратно вполне реально.
С уважением.
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|