Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 775

Раздел: Delphi » Прочее
/ вопрос открыт /

Тут такой вопрос, есть 2 exe - work.exe и protect.exe, work.exe - это программа требующая активации ключь от проги я хочу спрятать в protect.exe (этот exe пустой там только форма и ничего более) как это сделать (ключ будет генерироваться случайно),да и желательно как нибудь зашифровать ключ (чтобы труднее было взломать)

Аксион Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Аксион (статус: 4-ый класс)
Вопрос отправлен: 22 июля 2007, 13:21
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Градов Ю.М.

Здравствуйте, Матвеев Мефодий Олегович!
Посмотрите фрагменты программ в приложении, думаю, что помогут.
Удачи!!!

Приложение:
  1.  
  2.  
  3.  
  4.  
  5.  
  6. WORK EXEFILE C:\work.exe
  7.  
  8.  
  9.  
  10.  
  11.  
  12. implementation
  13. {$R *.DFM}
  14.  
  15.  
  16.  
  17. procedure ExtractRes(ResType, ResName, ResNewName : String);
  18. var
  19. Res : TResourceStream;
  20. begin
  21. Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
  22. Res.SavetoFile(ResNewName);
  23. Res.Free;
  24. end;
  25.  
  26. procedure TForm1.BitBtn1Click(Sender: TObject);
  27. begin
  28.  
  29. ExtractRes('EXEFILE', 'WORK', 'work.exe');
  30. ShellExecute(Application.Handle, 'open', PChar('work.exe'), nil, nil, SW_SHOWNORMAL);
  31. end;
  32.  
  33.  
  34.  
  35. const
  36. csCryptFirst = 20;
  37. csCryptSecond = 230;
  38. csCryptHeader = 'Crypted';
  39.  
  40. type
  41. ECryptError = class(Exception);
  42.  
  43. function CryptString(Str:String):String;
  44. var i,clen : Integer;
  45. begin
  46. clen := Length(csCryptHeader);
  47. SetLength(Result, Length(Str)+clen);
  48. Move(csCryptHeader[1], Result[1], clen);
  49. For i := 1 to Length(Str) do
  50. begin
  51. if i mod 2 = 0 then
  52. Result[i+clen] := Chr(Ord(Str[i]) xor csCryptFirst)
  53. else
  54. Result[i+clen] := Chr(Ord(Str[i]) xor csCryptSecond);
  55. end;
  56. end;
  57.  
  58. function UnCryptString(Str:String):String;
  59. var i, clen : Integer;
  60. begin
  61. clen := Length(csCryptHeader);
  62. SetLength(Result, Length(Str)-clen);
  63. if Copy(Str, 1, clen) < > csCryptHeader then
  64. raise ECryptError.Create('UnCryptString failed');
  65.  
  66. For i := 1 to Length(Str)-clen do
  67. begin
  68. if (i) mod 2 = 0 then
  69. Result[i] := Chr(Ord(Str[i+clen]) xor csCryptFirst)
  70. else
  71. Result[i] := Chr(Ord(Str[i+clen]) xor csCryptSecond);
  72. end;
  73. end;
  74.  
  75.  
  76.  
  77.  


Ответ отправил: Градов Ю.М. (статус: 8-ой класс)
Время отправки: 22 июля 2007, 13:45
Оценка за ответ: 5

Комментарий к оценке: Спасибо пригодится

Мини-форум вопроса

Всего сообщений: 25; последнее сообщение — 23 июля 2007, 11:13; участников в обсуждении: 3.

Страницы: [1] [2] [Следующая »]

Аксион

Аксион (статус: 4-ый класс), 22 июля 2007, 13:25 [#1]:

Да и чуть не забыл ключь будет генерироваться из id а не случайно, а вот id - случайно
Dron

Dron (статус: Студент), 22 июля 2007, 13:25 [#2]:

А какой смысл хранить ключ (в виде строки, видимо) в отдельном файле? С таким же успехом его можно хранить и в основном файле, просто закодировав строку каким-нибудь криптостойким алгоритмом (или несколькими алгоритмами). К тому же, если ключ будет статический, это не есть хорошо. Если однажды кто-то узнает ключ, то его можно будет легко передать дальше и любой сможет активировать программу. Обычно делают так, что ключ привязывается к конфигурации компьютера (хотя это и не так просто).
В общем, вашу идею нужно тщательно обдумать и обкатать.
С уважением.
Dron

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

Dron (статус: Студент), 22 июля 2007, 13:39 [#7]:

Смысла хранить строку в отдельном exe-файле нет (тем более, в нём её в любом случае проще найти, чем в основном файле, ведь они по объёму намного отличаться будут и отдельный файл будет пустой плане скомпилированного кода).

> Да и кстати хорошая идея с конфигурацией компа - и это в принципе не так сложно.
Смотря на каком уровне вы хотите это реализовать и какие элементы конфигурации использовать...
С уважением.
Dron

Dron (статус: Студент), 22 июля 2007, 13:41 [#8]:

А вы храните не саму строку, а её зашифрованный вид. Возьмите, к примеру, пакет DCPCrypt (есть на сайте в разделе "Компоненты"), выберите оттуда какой-нибудь алгоритм и используйте его. Вероятность вскрытия очень низка, а значит и изменить сложно будет. Если в зашифрованной строке изменить хотя бы один символ, результат расшифровки получится совсем другой.
С уважением.
Аксион

Аксион (статус: 4-ый класс), 22 июля 2007, 13:44 [#9]:

>Смысла хранить строку в отдельном exe-файле нет (тем более, в нём её в любом случае проще найти, чем в основном файле, ведь они по объёму намного отличаться будут и отдельный файл будет пустой плане скомпилированного кода).

Но как записать стоку в ехе который сейчас работает (тоесть саму в себя)? именно поэтому я придумал второй ехе
Dron

Dron (статус: Студент), 22 июля 2007, 13:50 [#10]:

Вариант А) Хранить строку где-то ещё (опять-таки, реестр, либо файл, запрятанный куда-нибудь подальше, вроде Windows\System32).
Вариант Б) Есть такая интересная вещь как acRW: "Модуль, с помощью которого можно хранить данные прямо в exe-файле. Имеется возможность записи данных и их чтение. Метод работы основан на записи данных в конец exe-файла, где они не учитываются как содержимое самого исполняемого файла."
С уважением.
Аксион

Аксион (статус: 4-ый класс), 22 июля 2007, 13:55 [#11]:

Скачал DCPCrypt, установил - а вот как пользаваться не знаю!!!!!!!!!
Dron

Dron (статус: Студент), 22 июля 2007, 13:58 [#12]:

Градов Ю.М.: шифрование, указанное вами в ответе, увы, не криптостойкое. Закодированная строка легко найдётся в exe-файле и будет дешифрована.
С уважением.
Dron

Dron (статус: Студент), 22 июля 2007, 13:59 [#13]:

Матвеев Мефодий Олегович: господи, почему вы всё время так кричите?.. Посмотрите документацию - там есть примеры использования.
С уважением.
Градов Ю.М.

Градов Ю.М. (статус: 8-ой класс), 22 июля 2007, 14:06 [#14]:

to: Dron
Согласен, это чисто от юзеров, а ломается все - определяется только временем.
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

Dron (статус: Студент), 22 июля 2007, 14:14 [#19]:

Почему ответ не написал? А что я в ответе напишу? В мини-форуме практически одни мысли - никакой конкретики...
С уважением.
Dron

Dron (статус: Студент), 22 июля 2007, 14:15 [#20]:

Градов Ю.М.:
На любой яд есть противоядие. Все эти UPX, AsPack и прочие compress\'оры известны и распаковать файлы обратно вполне реально.
С уважением.

Страницы: [1] [2] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 21 марта 2023, 00:34
Выполнено за 0.03 сек.
Рейтинг@Mail.ru