Главная страница
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.011 c
3-65351
konst
2003-09-29 12:29
2003.10.20
сортировка Query


14-65621
Ilia
2003-10-01 02:31
2003.10.20
Help!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


14-65629
Grouzd[E]v
2003-09-28 21:49
2003.10.20
What a ... blah blah blah?!!!


14-65581
Maxim Pshevlotsky
2003-10-02 08:48
2003.10.20
Вопрос по Perl


14-65599
Knight
2003-09-29 23:06
2003.10.20
Что не говорите, а в рекламе часто правду говорят...