Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запуск другой программы из самой себя, Необходимо засунуть 2 программы в 1 файл 
:(
    Опции темы
WolfAlone
Дата 17.9.2008, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



Доброго времени суток всем.

Имеем мы на руках следующее.
Есть некий файл "file1.exe", в конец которого дописан другой файл "file2.exe".

До етого всё работало так:
После запуска программы file1.exe Она читает собственный "хвост", затем записывает его под именем, например "file2.exe" после чего - в нужный момент запускает его.

Появилась необходимость модифицировать программу так, что бы вторая программа запускалась не копируясь куда-либо! Т.е. возникла необходимость передать управление другой программе исключая её появление на жёстком (либо другом) диске.

Постараюсь ещё точнее сформулировать вопрос:
Можно ли каким-то образом "перекинуть" управление на (или проще говоря "запустить") какую-либо часть exe-файла?
Если не ошибаюсь - в ассемблере это выглядит примерно как "jp" или "jmp"...

Спасибо всем!


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
Alek86
Дата 17.9.2008, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: нет
Всего: 25



думаю, в стандартном C++ именно такой возможности не предусмотрено

хотя можно просто сделать

Код
int first_program(int argc, char* argv[]) { // бывший main 1й программы
 // ...
}

int second_program(int argc, char* argv[]) { // бывший main 2й программы
 // ...
}

int main(int argc, char* argv[]) {
 if (argc > 1 && 0 == strcmp(argv[1], "second_program")) {
  return second_program(argc, argv);
 } else {
  return first_program(argc, argv);
 }
}


оффтоп
что, вирус пишешь, а антивирь его определяет? smile


--------------------
user posted image    user posted image
PM MAIL   Вверх
WolfAlone
Дата 17.9.2008, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



Я конечно всё понимаю, но видимо забыл указать один очень важный факт: исходников программы №2 - у меня нет. Программа №1 - скомпилированная мной, программа №2 (file2.exe) - .exe-файл неизвестного происхождения (и назначения тоже smile ), который должен запуститься (точнее будет сказать - ему должно будеть быть переданно управление) непосредственно из "хвоста" программы №1 (file1.exe). При этом - этот файл не должен копироваться туда, откуда его в последствии сможет "оторвать" конечный пользователь. Т.е. файл №2 не должен сам посебе находиться там - откуда его можно скопировать без файла №1.

Может быть можно сделать какой-нибудь "диск"в ОЗУ или где-нибудь ещё так, что бы туда юзверь - при всём желании не залез?


---
По поводу вирусов - 90% антивирусников (даже преславутый "Avast") - реагируют на то, что в .exe-файле 2 заголовка для запуска программы и шуриком это блокуриют. Избежать этого можно только ооочень хорошо зная ассемблер - "отрезав" заголовок .exe-приложения и перекинуть управление в другую программу как в продолжение машинного кода... К сожалению данными знаниями я не обладаю. Так-что с вирусами - ОБЛОМ!  smile 


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
nerezus
Дата 17.9.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



WolfAlone, WinRar в помощь:
silent тип распаковки в Temp каталог и запуск 2 файлов из архива.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Alek86
Дата 17.9.2008, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: нет
Всего: 25



Цитата(nerezus @  17.9.2008,  11:32 Найти цитируемый пост)
silent тип распаковки в Temp каталог и запуск 2 файлов из архива.

вроде ж низя
Цитата(WolfAlone @  17.9.2008,  08:15 Найти цитируемый пост)
Т.е. возникла необходимость передать управление другой программе исключая её появление на жёстком (либо другом) диске.


думаю, нужно как-то спроецировать файл в память

в винде это ф-ии CreateFileMapping а потом MapViewOfFile начиная с требуемого байта
хотя как извратиться, чтобы эту проекцию запустить, не знаю
лучше спроси в разделе по winapi

хотя интересно, с чего это вдруг ты не можешь создать файл на диске?


--------------------
user posted image    user posted image
PM MAIL   Вверх
mes
Дата 18.9.2008, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



вот тут есть вроде немного по теме )


--------------------
PM MAIL WWW   Вверх
WolfAlone
Дата 19.9.2008, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



О_о вот это лес... Архив ето конечно очень хорошо, но это не выход! Можно ведь и в "самого себя" (в программу) дописать другую программу, а затем её оттуда скопировать на жесткий диск (куда-нибудь), а потом запустить... Но опять же, это тоже не выход! Нужно как-то засунуть в EXE-файл, другой EXE-файл, и запустить его оттуда, не даруя возможности конечному пользователю - найти файл на жеском диске! Так как файл №2 должен быть надежно защищен от глаз, рук и прочих негативных влияний конечного пользователя, во избежание его отделения от основного exe-файла...

Всем спасибо за внимание, пойду рыть под CreateFileMapping ... Если что-нибудь выйдет - я сразу отпишусь!


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
Juice
Дата 11.12.2008, 02:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.1.2007

Репутация: нет
Всего: нет



В принципе проще можно. Если у тебя сейчас твоя прожка перед передачей управления второй программе скидывает её на диск для запуска, то можно сделать склеивание 2-х екзешников. В своей проге напрочь удалить функционал по запуску второй прогулины, оставить лишь видимый/полезный функционал. А в интрнетах поискать склеиватели исполняемых файлов - их до одного места, т.е. очень много. И потом свой exe и второй, исходников которго нет, слепить в один.
PM MAIL   Вверх
jonie
Дата 11.12.2008, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



1) можно и просто дописать второй файл к первому (оверлей), и зачитать его (перенеся в TEMP) и запустив...
2) можно написать свой загрузчик EXE (сложно, но примеры есть вроде на wasm.ru)
3) можно засунуть второй файл в рессурсы первого
и т.д.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0507 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.