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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2015, 20:45   #1
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию Динамическое шифрование памяти

Всем привет. Достаточно давно натыкался в инете на реализацию динамического шифрования памяти, но сейчас никак не могу найти ...

Смысл метода заключался в том, что в исходнике устанавливаются 2 метки ( начальная и конечная ).

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

Так и наоборот - расшифровать, что приводило программу к нормальному ( рабочему ) состоянию.
-Jack- вне форума Ответить с цитированием
Старый 28.08.2015, 20:56   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

И в чем проблема? Криптор хочешь сделать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.08.2015, 21:13   #3
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Проблема в том, что не помню, каким образом выставляются метки и осуществляется их поиск в памяти ...
-Jack- вне форума Ответить с цитированием
Старый 28.08.2015, 21:26   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А просто адреса хранить в списке не катит? Зачем метить память?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.08.2015, 22:24   #5
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Хотелось бы этот метод освоить )))
-Jack- вне форума Ответить с цитированием
Старый 29.08.2015, 01:42   #6
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Если не ошибаюсь, то вроде Багель где-то писал о проверке целостности определённых кусков памяти по меткам и что ему давали файл и он там его ковырял и там чёт один кусок зависел от другого и были там готы и сатанисты и росла там свекла и что-то ещё и в итоге, он всех победил)))
ДралсяСошибками вне форума Ответить с цитированием
Старый 29.08.2015, 01:58   #7
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Код:
		int metka1;
		//
		//здесь то, что хотим упрятать
		//
		int metka2;
		...
		crypt(&metka1, &metka2);

Код:
procedure crypt(point: Pointer; point2:Pointer);
var
  dwOldProtect: DWORD;
  pointx: Pointer;
begin
  VirtualProtect(point, 2048, PAGE_READWRITE, @dwOldProtect);
  pointx:= point;
  while pointx<> point2 do
  begin
    Byte(pointx^) := Byte(pointx) xor $23;
    inc(Integer(pointx));
  end;
end;
И в итоге получаю ошибку
Цитата:
access violation at 0x6a6b6869: read of address 0x6a6b6869
... Что то где то накасячилось )))

Последний раз редактировалось Stilet; 29.08.2015 в 17:55.
-Jack- вне форума Ответить с цитированием
Старый 29.08.2015, 02:18   #8
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

жестоко.

Код:
Byte(pointx^) := Byte(pointx) xor $23;
^ должен быть и справа?

а зачем нужен pointx?

Последний раз редактировалось f.hump; 29.08.2015 в 02:20.
f.hump вне форума Ответить с цитированием
Старый 29.08.2015, 08:44   #9
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Цитата:
Сообщение от -Jack- Посмотреть сообщение
Что то где то накасячилось )))
Код:
procedure crypt(from_addr: PByte; to_addr:PByte);
var
  dwOldProtect: DWORD;
begin

  VirtualProtect(from_addr, 2048, PAGE_EXECUTE_READWRITE, @dwOldProtect);

  while from_addr <> to_addr do
  begin
    from_addr^:=from_addr^ xor $23;
    inc(from_addr);
  end;

end;
Так не проще будет?
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 29.08.2015, 12:56   #10
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Цитата:
Сообщение от f.hump Посмотреть сообщение
жестоко.

Код:
Byte(pointx^) := Byte(pointx) xor $23;
^ должен быть и справа?
Явных изменений это не принесло, так же ошибка


Цитата:
Сообщение от Krasiosoft Посмотреть сообщение
Код:
procedure crypt(from_addr: PByte; to_addr:PByte);
var
  dwOldProtect: DWORD;
begin

  VirtualProtect(from_addr, 2048, PAGE_EXECUTE_READWRITE, @dwOldProtect);

  while from_addr <> to_addr do
  begin
    from_addr^:=from_addr^ xor $23;
    inc(from_addr);
  end;

end;
Так не проще будет?

Код:
crypt(System::PByte(va), System::PByte(vap));
При попытке вызвать процедуру, получаю уже другую ошибку

Цитата:
First chance exception at $7582C42D. Exception class EAccessViolation with message 'Access Violation'.
Ошибка выбивается на этой строке

Код:
    from_addr^:=from_addr^ xor $23;

Последний раз редактировалось -Jack-; 29.08.2015 в 13:06.
-Jack- вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое выделение памяти Bantom Помощь студентам 0 02.04.2014 22:35
Динамическое выделение памяти Devdev12 Общие вопросы C/C++ 13 02.08.2013 10:25
Распределение памяти. Динамическое выделение памяти с++ Tolian92 Помощь студентам 8 14.05.2012 21:44
Динамическое распред. памяти на Си Darh Помощь студентам 1 22.10.2009 17:26
Динамическое распределение памяти ManU Общие вопросы Delphi 0 13.10.2009 10:24