Форум: "Система";
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];
ВнизОбъединение файлов Найти похожие ветки
← →
Sour (2001-12-23 20:35) [0]Как сделвть так, чтобы мой файл запускался вместе (допустим) с explorer.exe. Где то виде это на примере блокнота, но не помню где. Т.е. мне надо как бы вшить свой exe в существующий
← →
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 советовали.
← →
Sour (2001-12-23 22:54) [2]Спасибо за незамедлительную реакцию, но суть вопрса не втом. Все это дело мне надо сделать программно, т.е. запустилась моя прога, и сшивает еще один exe (мой) с другим (напр. exe).
← →
paul_shmakov (2001-12-24 04:31) [3]ну дык большая часть моего ответа (точнее все, кроме последнего абзаца) была как раз о том, как это сделать программно. ну или по крайней мере показано, где копать.
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c