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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузка ЕХЕ из памяти, сабж для всех версий Винды (98-Виста) 
:(
    Опции темы
sax0n
Дата 26.6.2007, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет всем.
Прошу не отправлять сразу на поиск. я там был. найденные варианты не катят (

нужно реализовать сабж, совместимый для !всех! Вин версий (98 - Виста).
есть такой вариант - 
пример Гарри Неббетта, но он не работает для х64 систем.
Если кто знает какие-то другие способы или варианты загрузки, прошу поделиться.
Есть программа MoleBox, которая умеет выполнять нужные функции (правда не знаю, как дела обстоят с платформами). Вот бы ее исходники.
П.С. код не должен использовать компонент (без исходников).
Заранее всем спасибо.


PM MAIL   Вверх
Tectoder
Дата 26.6.2007, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Создавай темп файл. В винде не существуют сопособа запускать из памяти процессы. Это подтверждают все примеры
PM   Вверх
_hunter
Дата 26.6.2007, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



а откуда, по-твоему, UPX их запускает?..

sax0n, смотри исходники UPX'а. насчет висты не уверен, но под остальными осями он точно работает...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
sax0n
Дата 26.6.2007, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за ответы. Нашел исходники upx, копаю.
2Tectoder: я привел пример программы, которая делает это в вопросе. при чем я проверил )
просто вариант с upx немного настораживает в виду того, что его действия можно назвать заражением.
мне больше по душе какой-нибудь вариант с ресурсами - боюсь, что из-за ничего в конце долгой работы над программой может оказаться, что антивирус не будет давать ей работать (
PM MAIL   Вверх
_hunter
Дата 26.6.2007, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



для предотвращения этой проблемы достаточно отправить .exe-шник разработчикам антивиря: они внесут его в базу "ложных срабатываний"


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Tectoder
Дата 26.6.2007, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(_hunter @  26.6.2007,  18:08 Найти цитируемый пост)
а откуда, по-твоему, UPX их запускает?..

Цитата(sax0n @  26.6.2007,  18:58 Найти цитируемый пост)
2Tectoder: я привел пример программы, которая делает это в вопросе. при чем я проверил )
 smile Ладно б\к

Это сообщение отредактировал(а) Tectoder - 26.6.2007, 22:42
PM   Вверх
Alexeis
Дата 26.6.2007, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(_hunter @  26.6.2007,  18:08 Найти цитируемый пост)
а откуда, по-твоему, UPX их запускает?..

  UPX их запускает внутри своего процесса. Т.е. не запускает чужой процесс. Гораздо интереснее запуск программы по сети и с флешки, там действительно происходит запуск из ОЗУ, но в этих случаях создается как бы виртуальный путь к файлу.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
sax0n
Дата 26.6.2007, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



2Alexeis: напишите пожалуйста более конкретнее эти способы. Особенно второй (с виртуальными путями).
PM MAIL   Вверх
Alexeis
Дата 27.6.2007, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(sax0n @  26.6.2007,  23:19 Найти цитируемый пост)
Особенно второй (с виртуальными путями). 
 Это не второй, оба по сути одинаковы.  sax0n, чего ни разу по сетке проги не запускал?  smile Ну типа этого 
"\\Vasea Pupkin\Papka\My.exe"

  Файл не расположен на твоем диске, но запуск производиться в винде того кто запустил экзешник, т.е. исполняемый файл копируется по сети и запускается. Еще пример, виртуальный CD-ROM, никакого привода нет, все обслуживает драйвер виртуального устройства. Винда сопоставляет драйверу путь, все запросы чтение-запись происходят через него, потому по этому пути можно запустить экзешник.




--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
_hunter
Дата 27.6.2007, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



Цитата(Alexeis @  26.6.2007,  22:58 Найти цитируемый пост)
UPX их запускает внутри своего процесса. Т.е. не запускает чужой процесс.

так никто, кажется, и не говорил о создании нового процесса...
Цитата(Alexeis @  26.6.2007,  22:58 Найти цитируемый пост)
Гораздо интереснее запуск программы по сети и с флешки, там действительно происходит запуск из ОЗУ

с такой точки зрения любой запуск происходит из ОЗУ: программа сначала туда грузится а потом получает управление...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Alexeis
Дата 27.6.2007, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(_hunter @  27.6.2007,  10:38 Найти цитируемый пост)
с такой точки зрения любой запуск происходит из ОЗУ: программа сначала туда грузится а потом получает управление... 

  Правильно, но это делает винда, а винда для запуска процесса должна иметь путь к экзешнику, а не его адрес в памяти. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
W4FhLF
Дата 27.6.2007, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



Есть у меня пример, который должен работать и в 98(на NT системах протестировано), но он на ВБ. Пойдёт?


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
dumb
Дата 27.6.2007, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Цитата(Alexeis @  26.6.2007,  23:58 Найти цитируемый пост)
Гораздо интереснее запуск программы по сети и с флешки, там действительно происходит запуск из ОЗУ, но в этих случаях создается как бы виртуальный путь к файлу. 

для загрузчика это все совершенно безразлично - "прозрачность" обеспечивается средствами поддержки файловых систем. так что никакого "запуска из ОЗУ"(в том смысле, в каком он упоминается автором топика) в данном случае нет.

sax0n, для 64-битных надо реализовывать отдельный кусок - универсального никак не получится(возможно и для 9x линейки надо будет рихтовать). если же речь о wow64, то, по идее, принцип должен остаться тем же - остановка загрузки в определенный момент и подмена образа в памяти. если что-то не работает в этой схеме под wow64, то, возможно, поможет отладка - выяснить какие именно функции не работают... что-то конкретное в данном случае сказать не могу, т.к. в глаза не видел 64-битных виндуз smile
PM MAIL   Вверх
sax0n
Дата 27.6.2007, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за ответы всем.
2Alexeis: немного не то с сетевыми адресами. Нужно сделать так, чтобы моя программа зашифровала ЕХЕ, но он не потерял свою работоспособность. при запуске загрузчик некий записывает расшифрованный ЕХЕ в память и запускает его. внешние средства хранения информации не подходят - сохранять в файл нельзя. только ОЗУ... 
2_hunter: про ОЗУ я понимаю smile вот только есть одно НО: НЕЛЬЗЯ сохранять в промежуточный файл. я мог бы просто распаковать отдельно и запустить.. НО нужно красиво сделать, по-человечески. И желательно, чтобы все операции остались в контексте одного процесса.
2W4FhLF: был бы очень признателен за пример. ([email protected])
Цитата(Alexeis @  27.6.2007,  11:39 Найти цитируемый пост)
Правильно, но это делает винда, а винда для запуска процесса должна иметь путь к экзешнику, а не его адрес в памяти.  

Вот. мы ближе подходим к нужной теме. В этом скорее всего и будет заключаться вся работа. нужно проделать путь заполнения разных там таблиц дескрипторов и всего прочего до передачи управления непосредственно коду программы. Где-то проскакивал пример, когда запускают "cmd.exe", ставят на паузу процесс, а потом подменяют все там на нужный ЕХЕ. но только вариант создает еще один процесс и насколько я помню платформозависимый (в разных Вин).
2dumb: для начала хочется сделать хоть как-то и для просто 32-битных, например. это все будет зависить от реализации алгоритма.
Вот есть такой вариант, но он не проработан пока полностью: через внедрение потоков через createremotethread. но здесь очень много вопросов остается с передачей управления и таблицей импорта. Видел пример дырки в Винде(жаль, что его давно исправили): через WM_COPYDATA (точно не скажу, может и не так) записывают какой-то код в адресное пространство приложения и меняют вроде как регистр инструкций на выполнение на начало этого записанного участка. может кто знает что-то такого типа...
PM MAIL   Вверх
W4FhLF
Дата 27.6.2007, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



Цитата(sax0n @  27.6.2007,  14:25 Найти цитируемый пост)
Где-то проскакивал пример, когда запускают "cmd.exe", ставят на паузу процесс, а потом подменяют все там на нужный ЕХЕ. но только вариант создает еще один процесс и насколько я помню платформозависимый (в разных Вин).


Я тебе его хотел предложитьsmile

Глянь - http://wasm.ru/article.php?article=memfile

Добавлено через 1 минуту и 30 секунд
Цитата(sax0n @  27.6.2007,  14:25 Найти цитируемый пост)
 может кто знает что-то такого типа...


Хм... А что ты вообще пишешь? Тебе что нужно выполнение кода в АП чужого процесса? Тогда код должен быть базонезависимым. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0628 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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