Экспертная система 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, 15:02 [#21]:

А нет ещё каких нибудь методов шифрования на подобии того что предложил Градов Ю.М.
Dron

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

Алгоритм можно придумать и самостоятельно (или изменить что-нибудь в существующем). Только использовать то, что разрабатывалось специально для криптостойкого шифрования, в любом случае гораздо лучше. Я говорю про тот же DCPCrypt. Так и не попытались разобраться?
С уважением.
Градов Ю.М.

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

Вот еще один пример:

procedure TForm1.Button1Click(Sender: TObject);
var
s: String[255];
c: array[0..255] of Byte absolute s;
i: Integer;
begin
{encode}

s := \'SwissDelphiCenter.ch\';
for i := 1 to Ord(s[0]) do c[i] := 23 xor c[i];
Label1.Caption := s;

{Decode}

s := Label1.Caption;
for i := 1 to Length(s) do s[i] := Char(23 xor Ord(c[i]));
Label2.Caption := s;
end;
Градов Ю.М.

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

Еще парочка:

(1)
var
s: string;

procedure Code(var text: string; password: string;
decode: boolean);
var
i, PasswordLength: integer;
sign: shortint;
begin
PasswordLength := length(password);
if PasswordLength = 0 then
Exit;
if decode then
sign := -1
else
sign := 1;
for i := 1 to Length(text) do
text[i] := chr(ord(text[i]) + sign *
ord(password[i mod PasswordLength + 1]));
end;
Пример использования:

procedure TForm1.Button1Click(Sender: TObject);
begin
s := Memo1.Text;
code(s, Edit1.Text, false);
Memo1.Text := s;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
code(s, Edit1.Text, true);
Memo1.Text := s;
end;

(2)
function Encrypt(Text : string; Key1, Key2, Key3, Key4 : Integer) : string;
var
BufS, Hexa, Hexa1, Hexa2 : string;
BufI, BufI2, Sc, Sl, Num1, Num2, Num3, Num4, Res1, Res2, Res3, Res4 : Integer;
begin
Sl := Length(Text);
Sc := 0;
BufS := \'\';
if (Key1 in [1 .. 120]) and (Key2 in [1 .. 120]) and (Key3 in [1 .. 120]) and (Key4 in [1 .. 120]) then
begin
BufI := Key1 * Key4;
BufI2 := Key3 * Key2;
BufI := BufI - BufI2;
if BufI = 0 then
begin
Result := \'\';
Exit;
end;
end
else
begin
Result := \'\';
Exit;
end;
repeat
Inc(Sc);
if Sc > Sl then Num1 := 0 else Num1 := Ord(Text[Sc]);
Inc(Sc);
if Sc > Sl then Num2 := 0 else Num2 := Ord(Text[Sc]);
Inc(Sc);
if Sc > Sl then Num3 := 0 else Num3 := Ord(Text[Sc]);
Inc(sc);
if Sc > Sl then Num4 := 0 else Num4 := Ord(Text[Sc]);
Res1 := Num1 * Key1;
BufI := Num2 * Key3;
Res1 := Res1 + BufI;
Res2 := Num1 * Key2;
BufI := Num2 * Key4;
Res2 := Res2 + BufI;
Res3 := Num3 * Key1;
BufI := Num4 * Key3;
Res3 := Res3 + BufI;
Res4 := Num3 * Key2;
BufI := Num4 * Key4;
Res4 := Res4 + BufI;
for BufI := 1 to 4 do
begin
case BufI of
1 : Hexa := IntToHex(Res1, 4);
2 : Hexa := IntToHex(Res2, 4);
3 : Hexa := IntToHex(Res3, 4);
4 : Hexa := IntToHex(Res4, 4);
end;
Hexa1 := \'$\' + Hexa[1] + Hexa[2];
Hexa2 := \'$\' + Hexa[3] + Hexa[4];
if (Hexa1 = \'$00\') and (Hexa2 = \'$00\') then
begin
Hexa1 := \'$FF\';
Hexa2 := \'$FF\';
end;
if Hexa1 = \'$00\' then Hexa1 := \'$FE\';
if Hexa2 = \'$00\' then
begin
Hexa2 := Hexa1;
Hexa1 := \'$FD\';
end;
BufS := BufS + Chr(StrToInt(Hexa1)) + Chr(StrToInt(Hexa2));
end;
until Sc >= Sl;
Result := BufS;
end;

function Decrypt(Text : string; Key1, Key2, Key3, Key4 : Integer) : string;
var
BufS, Hexa1, Hexa2 : string;
BufI, BufI2, Divzr, Sc, Sl, Num1, Num2, Num3, Num4, Res1, Res2, Res3, Res4 : Integer;
begin
Sl := Length(Text);
Sc := 0;
BufS := \'\';
if (Key1 in [1 .. 120]) and (Key2 in [1 .. 120]) and (Key3 in [1 .. 120]) and (Key4 in [1 .. 120]) then
begin
Divzr := Key1 * Key4;
BufI2 := Key3 * Key2;
Divzr := Divzr - BufI2;
if Divzr = 0 then
begin
Result := \'\';
Exit;
end;
end
else
begin
Result := \'\';
Exit;
end;
repeat
for BufI := 1 to 4 do
begin
Inc(Sc);
Hexa1 := IntToHex(Ord(Text[Sc]), 2);
Inc(Sc);
Hexa2 := IntToHex(Ord(Text[Sc]), 2);
if Hexa1 = \'FF\' then
begin
Hexa1 := \'00\';
Hexa2 := \'00\';
end;
if Hexa1 = \'FE\' then Hexa1 := \'00\';
if Hexa1 = \'FD\' then
begin
Hexa1 := Hexa2;
Hexa2 := \'00\';
end;
case BufI of
1 : Res1 := StrToInt(\'$\' + Hexa1 + Hexa2);
2 : Res2 := StrToInt(\'$\' + Hexa1 + Hexa2);
3 : Res3 := StrToInt(\'$\' + Hexa1 + Hexa2);
4 : Res4 := StrToInt(\'$\' + Hexa1 + Hexa2);
end;
end;
BufI := Res1 * Key4;
BufI2 := Res2 * Key3;
Num1 := BufI - BufI2;
Num1 := Num1 div Divzr;
BufI := Res2 * Key1;
BufI2 := Res1 * Key2;
Num2 := BufI - BufI2;
Num2 := Num2 div Divzr;
BufI := Res3 * Key4;
BufI2 := Res4 * Key3;
Num3 := BufI - BufI2;
Num3 := Num3 div Divzr;
BufI := Res4 * Key1;
BufI2 := Res3 * Key2;
Num4 := BufI - BufI2;
Num4 := Num4 div Divzr;
BufS := BufS + Chr(Num1) + Chr(Num2) + Chr(Num3) + Chr(Num4);
until Sc >= Sl;
Result := BufS;
end;
Аксион

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

Если честно то с DCPCrypt я не разобрался но мне ОЧЕНЬ помогли примеры Градова Ю.М.

Страницы: [« Предыдущая] [1] [2]

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

Версия движка: 2.6+ (26.01.2011)
Текущее время: 26 апреля 2026, 02:48
Выполнено за 0.03 сек.