Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-65330
Lion
2003-09-28 15:50
2003.10.20
Перенос данных с фокспрошной БД


14-65609
ZeroDivide
2003-10-01 13:22
2003.10.20
Декомпилированный msblast


1-65446
Дмитрий
2003-10-07 15:18
2003.10.20
Стать на последний элемент в ListView


3-65386
Sesh
2003-09-27 13:44
2003.10.20
MS SQL - Login & Password


1-65457
Sandman25
2003-10-07 13:32
2003.10.20
Уничтожение кнопки в OnClick





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский