Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Шифровка значений констант в Дельфи [D5, WinXP]


Страницы:   1 2

arbin ©   (2008-08-21 10:42:00) 

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


DVM   (2008-08-22 10:52:00) [21]


> Правильный$Вася   (21.08.08 20:04) [11]


> то можно его разодрать на кусочки, а где-то в коде собирать
> по нужному тебе алгоритму

Но алгоритм тоже будет в этом коде. Т.е. ключ все равно будет в коде программы.


DVM   (2008-08-22 10:50:00) [22]


> Anatoly Podgoretsky ©   (21.08.08 15:39) [10]


> Leonid Troyanovsky ©   (21.08.08 13:46) [8]

Вот фрагмент обычной схемы работы с ключом (взято из примеров, поставляемых с их SDK):

{ Initialize this copy of GrdAPI. GrdStartup() must be called once before first GrdAPI call at application startup }
  writeln('Initialize this copy of GrdAPI : ' );
  nRet:=GrdStartup(GrdFMR_Local);
  ErrorHandling(nil,nRet);

{ Create Grd protected container & return it's handle }
  writeln('Create Grd protected container : ' );
  hGrd:= GrdCreateHandle(@abyGrd, { pointer to memory allocated for Grd protected container }
             { if NULL, Grd API allocates memory for new Grd protected container by itself }
                       GrdCHM_MultiThread, { handle can by use in multy-thread }
                       nil );       { reserved and must be 0 }

   if( hGrd = nil ) then         { Some error found? }
   halt(ErrorHandling(nil, GrdE_MemoryAllocation ));

   ErrorHandling(hGrd,nRet);
   { Store dongle codes in Guardant protected container }

  writeln('Storing dongle codes in Guardant protected container : ' );
  nRet:= GrdSetAccessCodes(hGrd, { Handle to Guardant protected container }
                            CryptPU,     { Must be already specified }
                            CryptRD,    { Must be already specified }
                            CryptWR,     { == 0 if not needed }
                            CryptMS);    { == 0 if not needed }
                            ErrorHandling(hGrd,nRet);


Обратите внимание на функцию GrdSetAccessCodes и передаваемые ей ключи, в частности CryptPU и CryptRD. Первый это ключ Public, второй Read, т.е. для чтения. Если программа хочет считать значения из ячеек памяти эл.ключа, то ей не обойтись без CryptRD ключа. И его как ни крути придется помещать в код программы. Ну пусть не в открытом виде, а как то зашифрованном, но придется все равно. Но даже если ключ будет закодирован, то в исполняемом файле все равно будет и функция декодирования ключа, изучив которую можно будет получить исходное значение ключа. Вот строчка из SDK описания этой функции:

Важная информация
Рекомендуется хранить коды доступа в приложении в зашифрованном виде и динамически собирать их и проверять их целостность непосредственно перед помещением в хэндл. Не следует хранить коды "в чистом виде".


Но, как я уже сказал, даже если с ключом выполнять какие то хитрые манипуляции, то в функцию он все равно будет передаваться в расшифрованном виде, что усложнит работу взломщика, но не сделает ее невозможной.


Правильный$Вася   (2008-08-21 20:04:00) [23]

если уж хочется хранить пароль, то можно его разодрать на кусочки, а где-то в коде собирать по нужному тебе алгоритму


Anatoly Podgoretsky   (2008-08-21 15:39:00) [24]

> Leonid Troyanovsky  (21.08.2008 13:46:08)  [8]

Я думаю он вред, по причине некомпетентности, но если так, то в топку одназначно. Такая система защиты не стоит даже байтов на нее потраченых.


Ega23   (2008-08-21 13:56:00) [25]


> (например, для проверки пароля), так как в случае открытия
> полученного екзешника в любом редакторе, все эти значения
> констант легко обнаруживаются, что позволяет узнать пароль
> даже без дизассемблирования.


Самое простое - хранить не пароль, а его хэш.


Leonid Troyanovsky   (2008-08-21 13:46:00) [26]


> DVM ©   (21.08.08 13:08) [7]

> Что так?

Требует хранить в исполняемом файле ряд ключей (закрытых),
как ты объяснил.

--
Regards, LVT.


DVM   (2008-08-21 13:08:00) [27]


> И Guardant - следом.

Что так?


Leonid Troyanovsky   (2008-08-21 13:04:00) [28]


> DVM ©   (21.08.08 12:24) [5]

> > в топку такие программы... и аффтаров следом

> Ну почему же сразу в топку. Например, для организации защиты
> программы с помощью ключа Guardant

И Guardant - следом.

--
Regards, LVT.


DVM   (2008-08-21 12:24:00) [29]


> Palladin ©   (21.08.08 10:54) [4]


> в топку такие программы... и аффтаров следом

Ну почему же сразу в топку. Например, для организации защиты программы с помощью ключа Guardant может потребоваться хранить в исполняемом файле ряд ключей, которые ни в коем случае не стоит туда помещать в открытом виде.


Palladin   (2008-08-21 10:54:00) [30]


> arbin   (21.08.08 10:42) 

в топку такие программы... и аффтаров следом


Сергей М.   (2008-08-21 10:47:00) [31]


> brother ©   (21.08.08 10:45) [2]


Истинные маньяки-извращенцы создают и подключают к IDE свой эксперт)


brother   (2008-08-21 10:45:00) [32]

только самописно... можно хранить уже шифрованное значение (хоть xor) и при обращении декодировать в нормальный вид на лету... это как вариант...


Сергей М.   (2008-08-21 10:43:00) [33]

Не существует.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо