Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2010, 12:11   #1
Kolik317
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 64
По умолчанию Шифрование кода программы

Здравствуйте,
продолжаю пытаться разбираться со статьёй http://www.delphikingdom.com/asp/vie...?catalogid=846. Возник ряд вопросов.

1)Самое первое что я не понял - function CheckMemLabel(ptrStart,ptrEnd: pointer; strlabel: string; var point: pointer): boolean;
Зачем тут point объявлен? Какое значение надо передавать функции, и зачем, если сразу после бегина point := -1; Нельзя ли её просто в Var засунуть?Вот так:
Код:
function CheckFileLabel(FileName: string; strlabel: string; var point: LongInt): boolean;
var
 F: file;
 currarray: array [1..8] of byte;
 lookarray: array [1..8] of byte;
 i: integer;
[Big] point: pointer[/Big]
begin
2) Как я понимаю этот код функции
Код:
function CheckFileLabel(FileName: string; strlabel: string; var point: LongInt): boolean;
var
 F: file;
 currarray: array [1..8] of byte;
 lookarray: array [1..8] of byte;
 i: integer;
begin
 Result := false;
 point := -1;
 //Load labels
 for i := 1 to 8 do
 begin
  lookarray[i] := HexToByte(strlabel[pos('H',UpperCase(strlabel)) - 2] + 
                  strlabel[pos('H',UpperCase(strlabel)) - 1]);
  currarray[i] := 0;
  Delete(strlabel,1,pos('H',UpperCase(strlabel)));
 end;
 //Look for label
 AssignFile(F,FileName);
 FileMode := fmOpenRead;
 Reset(F,1);
 Seek(F,0);
 while not EOF(F) do
 begin
  for i := 1 to 7 do
   currarray[i] := currarray[i + 1];
  BlockRead(F,currarray[8],1);
  Result := true;
  for i := 1 to 8 do
   Result := Result and (currarray[i] = lookarray[i]);
  if Result then
  begin
   //point points to the last byte of label
   point := FilePos(F) - 1;
   break;
  end;
 end;
 CloseFile(F);
end;
внешней утилиты только лишь указывает на байт метки, но ничего еще не шифрует? Тоесть алгоритм шифрации надо написать самому, используя всякие xor

3) Главный вопрос, статье уже 7 лет, эти методы защиты еще хоть сколько-нибудь актуальны?

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

Еще там в комментариях приведён вот такой код

Код:
var
Key:string;
procedure ReadKey;
begin
  if not ReadKeyFromFileOrReestre(Key) then begin
   Key:=InputBox(...);
   SaveKeyToFileAndReestre(Key);
  end;
end;

procedure VerySecretProc;
begin
  try
   Decode(@BeginSecretCode,LengthSecretCode,Key);
   {BEGIN SecretCode}
    ...
   {END SecretCode}
  finally
   Code(@BeginSecretCode,LengthSecretCode,Key);
  end;
end;
- как этим пользоваться, может действительно есть что-то проще?

Последний раз редактировалось Kolik317; 30.08.2010 в 12:38.
Kolik317 вне форума Ответить с цитированием
Старый 30.08.2010, 13:01   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Зачем тут point объявлен? Какое значение надо передавать функции, и зачем, если сразу после бегина point := -1; Нельзя ли её просто в Var засунуть?Вот так:
Нет. Предполагается что функция будет возвращать несколько значений. Это можно сделать двумя путями:
1) Описать параметры-переменные как в твоем случае
2) Описать тип функции аки запись.

В твоем случае point - параметр только для выхода. Ложить в него что-то бесполезно (если не ошибаюсь по хорошему стоило писать out point: LongInt))
Изначально он равен -1 - это инициализация, Если все прошло гладко - он становится равным размеру файла. Вообще функция тут с излишествами построена - ее можно упростить (возврат Longint вместо Boolean и проверка на -1
), но автор не подумал.

Цитата:
статье уже 7 лет, эти методы защиты еще хоть сколько-нибудь актуальны?
Ну скажем не устарели, но и не настолько сложны. Вообще есть методы и попроще и понадежнее.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.08.2010, 13:07   #3
Kolik317
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 64
По умолчанию

Спасибо, вот только можно поподробнее про попроще и понадежнее? ссылочку или примерчик пожалуйста) Или хотя бы просто в какую сторону копать)
Kolik317 вне форума Ответить с цитированием
Старый 30.08.2010, 13:14   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
про попроще
Ну скажем: http://www.delphiworld.narod.ru/_all_articles_.html раздел Шифрование - [58]
Криптография тема обширная, так что ты лучше бы четко задачу ставил.
Цитата:
Или хотя бы просто в какую сторону копать)
Пакеры, протекторы... Но это сложно, зато понадежнее твоего примера.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.08.2010, 13:25   #5
Kolik317
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 64
По умолчанию

Ну с пакерами протекторами я уже повозился, на все есть анпакеры, кроме последних версий платных, но это тоже на пару месяцев... Как я понимаю самое дельное написать этот пакер самому, но этож ж... Ну и я планировал как-то самому реализовать нестандартную защиту процедуры проверки, а потом всё это еще и пакером жмакнуть.

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

Последний раз редактировалось Kolik317; 30.08.2010 в 13:29.
Kolik317 вне форума Ответить с цитированием
Старый 30.08.2010, 13:33   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
У меня задача сейчас зашифровать процедуру проверки ключа
Посмотри те ссылки.
Самое просто - считать файл в String. Зашифровать по ключу (
А хотя бы и так:
http://www.programmersforum.ru/showthread.php?t=50620
http://www.programmersforum.ru/showthread.php?t=58277
). Записать файл обратно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.08.2010, 13:44   #7
Kolik317
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 64
По умолчанию

Тоесть проще говоря алгоритм такой:
пишу программу, между шифруемой процедурой так же ставлю метки, считываю файл внешней утилкой, между этими метками всё шифрую как хоть в String, записываю между этими метками зашифрованный код, потом в программе перед запуском шифрованной процедуры запускаю функцию расшифровки. Всё так?
Kolik317 вне форума Ответить с цитированием
Старый 30.08.2010, 14:04   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну почти, но я бы не полагался на метки.
Если очень хочется можно адреса зашифрованных областей хранить в конце файла например в секции кода, если есть место, или в секции DOS STUB, где описано сообщение об ошибке при запуске из-под оси, которая не поддерживается экзешником (ты ведь экзешник шифруешь?), это сообщение все равно аттавизм.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.08.2010, 15:50   #9
Kolik317
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 64
По умолчанию

Как то мне всё это сложно пока, я только второй день этими делами занимаюсь, вот сейчас думаю, а если я беру делаю метками, открываю хекс-редактором, беру код между меток, шифрую, удаляю вручную метки, записываю адреса конца и начала шифрованного кода, а в процедуру расшифровки вручную прописываю адреса начала/конца шифрованной области?
Kolik317 вне форума Ответить с цитированием
Старый 31.08.2010, 16:36   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
беру код между меток
А если сигнатура меток совпадет с данными в файле?
Например ты хочешь чтоб твоя метка называлась PE. Попробуй такое имя и убедишся что экзешники винды твоя программа будет пороть, потому что буквы PE в каждом экзешнике присутствуют. Метки ненадежны.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Упрощение кода программы Alex TGM Общие вопросы C/C++ 7 30.06.2010 22:40
Разъяснение кода программы ) Expelio Помощь студентам 2 25.03.2010 00:00
Автоматизация программы без кода Luciolucas Помощь студентам 1 14.10.2009 01:49
Анализ кода программы virput1 Софт 8 04.08.2009 14:53
Оптимизация кода программы insi Фриланс 2 17.05.2008 18:30