Форум: "Основная";
Текущий архив: 2003.10.20;
Скачать: [xml.tar.bz2];
ВнизИсполняемый код! Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.068 c