Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
1-65500
Duckslayer
2003-10-07 02:30
2003.10.20
Чтение файлов


14-65602
pumba
2003-09-27 19:43
2003.10.20
Землетресение


3-65365
MVVD
2003-09-29 12:44
2003.10.20
Чудеса с сервером


14-65619
Сатир
2003-10-02 16:49
2003.10.20
ГРЯЗНЫЕ ТЕХНОЛОГИИ


1-65531
bers
2003-10-08 10:10
2003.10.20
Подключение Си-шных библиотек.




   Наверх