Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.20;
Скачать: CL | DM;

Вниз

Исполняемый код!   Найти похожие ветки 

 
Tetros ©   (2003-10-06 19:06) [0]

Доброго времени ВАМ!
Народ, помогите плиз, подскажите, как программа может менять свой код в памяти ?! Пишу простейшую криптовалку, как только обращаюсь к секции кода программы носителя для раскриптовки, сразу вылетает ошибка(Access violatation). Как быть? Пытался изменить атрибуты секции непосредственно в ЕХЕ-файле и только в одном случае из 10! получилось. Что посоветуете?

Заранее благодарен!


 
Sha ©   (2003-10-06 21:17) [1]

VirtualProtect+F1


 
Юрий Федоров ©   (2003-10-06 22:16) [2]

Могу ошибаться, но VirtualProtect, как мне кажется, работает только с сегментом данных. Сегмент кода теоретически может быть изменен, но это очень нетривиальная задача


 
default ©   (2003-10-06 22:38) [3]

Юрий Федоров ©
в сегмент кода непосредственно писать нельзя
этот запрет аппаратный
если сегмент данных перекрывается с сегментом кода, то адресуясь
через регистр DS и некоторые другие тем самым появляется возможность косвенно писать в сегмент кода
(если конечно ты имеешь доступ на запись к этому сегменту)
сегмент тут понятие условное - это может быть и 4 гиговое линейное адресное пространство


 
Tetros ©   (2003-10-07 09:52) [4]

Ребята, не расскажете по подробнее как все это реализовать? Уже замучился. И что такое VirtualProtect?

Заранее благодарен.


 
Pavel Obishenko   (2003-10-08 00:54) [5]

Значит делаем что-то вроде этого:

procedure EncryptedProc; // функция, которую шифруем
begin

... ваш код ...

end;

procedure EndEncryptedProc; // метка конца
// зашифровываемой функции
begin
asm
nop; // вставим пустой оператор (на всякий случай :)
end;
end;

procedure SuperEncryptor; // процедура шифрования
var
OldProt: DWORD;
lpBegin, lpEnd: Pointer;
begin
// снимаем защиту со страницы памяти
VirtualProtect(@EncryptedProc,
4069, // длинна области памяти (4kb думаю хватит :)
// кстати, длинна должна быто кратна 4096
PAGE_READWRITE, // разрешаем читать и писать
OldProt // Сохраним старую защиту
);

lpBegin:= @EncryptedProc; // начало криптуемого кода
lpEnd:= @EndEncryptedProc; // конец криптуемого кода

... далее криптуем любым алгоритмом от lpBegin до lpEnd ...

end;


 
Digitman ©   (2003-10-08 08:45) [6]


> Уже замучился. И что такое VirtualProtect?


замучился в хэлпе искать описание ф-ции ? бедняга)



Страницы: 1 вся ветка

Текущий архив: 2003.10.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
3-65364
Дмитрий К.
2003-09-29 12:27
2003.10.20
Окрашивание фона в таблице по нажатию клавиши


8-65553
rog
2003-06-19 13:14
2003.10.20
RGB цвет в CMYK цвет


1-65477
l2t_guest
2003-10-08 17:21
2003.10.20
Вопрос по variant


1-65466
EvgeniyR
2003-10-09 08:04
2003.10.20
Панель задач


11-65399
mike.dld
2003-02-06 11:23
2003.10.20
Проблемы