Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Требуется помощь programmera! 
:(
    Опции темы
lesha
  Дата 6.1.2004, 04:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 6.1.2004

Репутация: нет
Всего: нет



Попал в руки исходник программы но сам в ней не могу разобраться confused.gif . Есть exe-шник, рабочий, но с кодом у меня проблема.
Собственно сам код:

program key;

{$APPTYPE CONSOLE}

uses
Windows,
Classes,
SysUtils,
KbCrypt,
common,
base64;

const
SKeyFile = 'server.key';
var
S, PWD, KeyFile: string;
My: TCryptLib;
sKey: TKey;
F: TEXT;
Memory: TMemoryStream;
MK, AK, nDays, MaxComps: DWORD;
begin
KeyFile := 'key.txt';
MaxComps := StrToIntDef(ParamStr(1), 1);
nDays := StrToIntDef(ParamStr(2), 365);
Assign(F, KeyFile);
Reset(F);
Readln(F, S);
if S = '' then Exit;
Writeln('Using file with key: '+KeyFile);
My := TCryptLib.Create(nil);
My.Password := #0#23#128#0#98#108#63#125#201#135#1#72;
My.Compression := LZ;
AK := 61235349;
MK := 325634;
My.AddKey := AK;
My.MultKey := MK;

Hex2Str(S);
sKey := Str2Key(S);
Write( ' Password:' );
Readln(PWD);
if PWD = '' then Exit;
if PWD <> (' '+DateToStr(Date)+'.' ) then
raise Exception.Create('Bad password.' );
Writeln(' Info: ' );
S := sKey.key;
S := My.DecryptStr(Str2Hex(S));
CharToOem(Pointer(S), Pointer(S));
Writeln(S);
S := sKey.uid;
S := My.DecryptStr(Str2Hex(S));
CharToOem(Pointer(S), Pointer(S));
Writeln(S);
S := sKey.info;
S := My.DecryptStr(Str2Hex(S));
CharToOem(Pointer(S), Pointer(S));
Writeln(Replace(S, ']', ']'#13#10' ' );
S := sKey.date;
Writeln(S);
Writeln(' ' );
Writeln(' MaxComps: ', MaxComps);
Writeln('Expiration Date: ' , DateToStr(Now+nDays) );
Writeln('_____________________________________________________' );
Write('Generate key file? : ' );
Readln(PWD);
if not SameText(PWD, 'Y' ) then
begin
Writeln('Canceled.' );
Exit;
end;

Memory := TMemoryStream.Create();
try
WriteCert(Memory, sKey, MaxComps, Now-1, Now+nDays);
My.EncryptMemory(Memory);
Memory.Position := 0;
Memory.SaveToFile(SKeyFile+'.'+IntToStr(MaxComps));
Base64Encode_stream(Memory);
Memory.SaveToFile(SKeyFile+'.'+IntToStr(MaxComps)+'.base64' );
FreeAndNil(Memory);
finally
Memory.Free;
end;
System.Writeln('OK.' );
end.

Кто разобрался, расскажите. Очень надо butbut.gif
PM MAIL   Вверх
Fedor
Дата 6.1.2004, 05:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32



А что именно тебе нужно узнать? А то какой-то безпредметный разговор получится...


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
<Spawn>
Дата 6.1.2004, 06:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Код
program key;

//Консольное приложение
{$APPTYPE CONSOLE}

//подключаем модули
uses
Windows,
Classes,
SysUtils,
KbCrypt,
common,
base64;

//Объявляем константы
const
SKeyFile = 'server.key';

//Объявляем переменные
var
S, PWD, KeyFile: string;
My: TCryptLib;
sKey: TKey;
F: TEXT;
Memory: TMemoryStream;
MK, AK, nDays, MaxComps: DWORD;
begin
KeyFile := 'key.txt';
//Пытаемся получить значение первого аргумента командной строки. В случае неудачи MaxComps присвоить значение "1"
MaxComps := StrToIntDef(ParamStr(1), 1);
//То же самое с nDays
nDays := StrToIntDef(ParamStr(2), 365);
//Связать файловую переменную F с файлом на диске
Assign(F, KeyFile);
//Открыть файл
Reset(F);
//Пытаемся порчесть строку
Readln(F, S);
//Если ни чего не прочли то выйти из программы
if S = '' then Exit;
//Вывод в консоль значения KeyFile
Writeln('Using file with key: '+KeyFile);
//Создаем экземпляр класса TCrypLib
My := TCryptLib.Create(nil);
// Заполнение нужных свойств класса
My.Password := #0#23#128#0#98#108#63#125#201#135#1#72;
My.Compression := LZ;
AK := 61235349;
MK := 325634;
My.AddKey := AK;
My.MultKey := MK;

//Видимо какие то самодельные функции
Hex2Str(S);
sKey := Str2Key(S);
//Выводим в консоль 'Password:'
Write( ' Password:' );
//Читаем ввод пользователя
Readln(PWD);
//Если пользователь ни чего не ввел, то выходим из программы
if PWD = '' then Exit;
//Если пользователь ввел значение не равное текущей дате на компе(весьма странно как то)
if PWD <> (' '+DateToStr(Date)+'.' ) then
//то сгенерировать исключение, после которого дальнейшее выполнение кода будет прекращено
raise Exception.Create('Bad password.' );
//Выводим в консоль 'Info:'
Writeln(' Info: ' );
//Расшифровываем key
S := sKey.key;
S := My.DecryptStr(Str2Hex(S));
CharToOem(Pointer(S), Pointer(S));
//И выводим его в консль
Writeln(S);
//то же самое с uid
S := sKey.uid;
S := My.DecryptStr(Str2Hex(S));
CharToOem(Pointer(S), Pointer(S));
Writeln(S);
//... и с info
S := sKey.info;
S := My.DecryptStr(Str2Hex(S));
CharToOem(Pointer(S), Pointer(S));
Writeln(Replace(S, ']', ']'#13#10' ' );
//... и с date
S := sKey.date;
Writeln(S);
//зафлуживаем консоль разной инфои
Writeln(' ' );
Writeln(' MaxComps: ', MaxComps);
Writeln('Expiration Date: ' , DateToStr(Now+nDays) );
Writeln('_____________________________________________________' );
Write('Generate key file? : ' );
//Если пользователь хочет создать новый файл, то..
Readln(PWD);
if not SameText(PWD, 'Y' ) then
begin
Writeln('Canceled.' );
Exit;
end;

// ... создаем его
Memory := TMemoryStream.Create();
try
WriteCert(Memory, sKey, MaxComps, Now-1, Now+nDays);
My.EncryptMemory(Memory);
Memory.Position := 0;
Memory.SaveToFile(SKeyFile+'.'+IntToStr(MaxComps));
Base64Encode_stream(Memory);
Memory.SaveToFile(SKeyFile+'.'+IntToStr(MaxComps)+'.base64' );
//Освобождаем память, занимаемую экземпляром класса TMemoryStream
FreeAndNil(Memory);
finally
//Как ни странно, но это еще одна попытка освободить память этого класса)) Ни чего страшного кончено, так как Memory уже будет равна nil
Memory.Free;
end;
System.Writeln('OK.' );
end.


Вроде разъяснил smile.gif

Это сообщение отредактировал(а) <Spawn> - 7.1.2004, 19:03


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
lesha
Дата 7.1.2004, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 6.1.2004

Репутация: нет
Всего: нет



<Spawn>

Очень хорошо, что помог разобраться. Чему очень благодарен.
Вопрос в догонку именно по этой части
//Если пользователь хочет создать новый файл, то..
Readln(PWD);
if not SameText(PWD, 'Y' ) then
begin
Writeln('Canceled.' );
Exit;
end;

// ... создаем его
Memory := TMemoryStream.Create();
try
WriteCert(Memory, sKey, MaxComps, Now-1, Now+nDays);
My.EncryptMemory(Memory);
Memory.Position := 0;
Memory.SaveToFile(SKeyFile+'.'+IntToStr(MaxComps));
Base64Encode_stream(Memory);
Memory.SaveToFile(SKeyFile+'.'+IntToStr(MaxComps)+'.base64' );

В следующих строчках:

Readln(PWD);
if not SameText(PWD, 'Y' ) then //если я ввожу другие значения то выход.
begin
Writeln('Canceled.' );
Exit;
end;

Видел такое, что в поле пароля вводили кучу всего и генерировался файл совсем другой. Если к примеру я при вводе пароля ставлю Y то получаю два файла
server.key.1
server.key.1.base64

а видел такое:
сгенерировались файлы
server.key.30
server.key.30.base64

Если это возможно то как?

PM MAIL   Вверх
lesha
Дата 7.1.2004, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 6.1.2004

Репутация: нет
Всего: нет



Morpheus
Прочитай выше, что меня интересует, а то времени в обрез.

Это сообщение отредактировал(а) lesha - 7.1.2004, 17:33
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0443 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.