Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];

Вниз

Объединение файлов   Найти похожие ветки 

 
paul_shmakov   (2001-12-23 21:36) [1]

если охота самостоятельно это программно сделать, то нужно:
1. почитать про устройство pe-файла. самое нормальное руководство от hard wisdom (оно плохое, но остальные еще хуже). после прочтения, в принципе, должно стать ясно, как сделать задуманное. базовые знания ассемблера тоже пригодятся.
2. расположить в exe-шнике код, который будет вызывать CreateProcess, загружая там самым нашу программу. сделать это проще всего добавив еще одну секцию с кодом. после добавления секции следует поправить множество параметров в заголовке (кол-во секций, размер кода и т.п.). в эту секцию следует поместить примерно следующий код:

push OFFSET pi
push OFFSET sinf
push 0
push 0
push 0
push 0
push 0
push 0
push 0
push OFFSET filename
call CreateProcessA

push dword ptr [pi + 4]
call CloseHandle
push dword ptr [pi]
call CloseHandle

jmp dword ptr [OriginalEntryPoint]

filename db "Название мое программы.exe а здесь параметры можно вставить", 0
pi dd 4 dup(0)
sinf dd 44h
db 40h dup(0)
OriginalEntryPoint dd 0

код очень простой - всего лишь вызывает CreateProcess и CloseHandle два раза, чтобы закрыть дескрипторы процесса и потока.
далее нужно взять из pe-заголовка оригинальную точку входа (откуда начинается исполнения программы), сохранить ее в переменной OriginalEntryPoint, и записать свою точку входа.
(если быть более точным, то конечно в OriginalEntryPoint нужно записать значение, равное разнице адресов переменной filename и оригинальной точки входа).

в принципе это почти все. если мы правильно добавили новую секцию, правильно установили все ее параметры, правильно добавили код, после всего этого правильно исправили все переменные в pe-заголовке, то explorer.exe будет при своей загрузке загружать и нашу программу.

одно серьезное но. необходимо, чтобы программа, к которой мы цепляемся импортировала функцию CreateProcess и CloseHandle. если нет, то можно попытаться изменить таблицу импорта и добавить эти две функции, но эта задача уже более сложная и не всегда решаемая. на эту тему очень подробно писал Крис Касперски (не помню, правда, где).

еще одно. намного проще делать все это вручную из hiew.exe, чем писать программу, которая будет выполнять указанные действия. по крайней мере, в начале советую делать все вручную, а уж потом писать программы.

если самому не очень хочется разбираться, то есть готовые программы. тут какой-то joiner советовали.



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.003 c
3-80411
toorick
2002-02-26 14:08
2002.03.25
SQL и MEMO-поля


1-80612
valley
2002-03-11 13:34
2002.03.25
Печать StringGrid a


1-80510
Aser17
2002-03-13 07:39
2002.03.25
Где закачать MSDN?


1-80498
Abzetdin
2002-03-09 21:33
2002.03.25
Как создать в Delphi нестандартный тип? Например ..


3-80440
prorok
2002-02-27 13:51
2002.03.25
Индексирование





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