Главная страница
    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.45 MB
Время: 0.007 c
3-65390
Julia
2003-09-27 15:11
2003.10.20
автоподстановка


14-65612
Layner
2003-10-01 08:22
2003.10.20
Затопили потолок, подскажите юр. ответы, на кого подать в суд.


3-65379
GydruS
2003-09-25 02:32
2003.10.20
Здравствуйте! Тут мега проблема! F1! F1!


1-65428
Default Printer
2003-10-07 18:42
2003.10.20
Как можно определить принтер установленный по умолчанию в системе


1-65497
АТ
2003-10-08 10:32
2003.10.20
поля в TPrinter





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский