|
Вопрос # 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, 15:02 [#21]:
А нет ещё каких нибудь методов шифрования на подобии того что предложил Градов Ю.М.
|
|
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]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|