Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
0 / 0 / 1
Регистрация: 22.12.2014
Сообщений: 20
1

Как сделать лоадер - загрузить приложение в память и отдельно запустить

22.12.2014, 23:03. Показов 3373. Ответов 2
Метки нет (Все метки)

Приветствую!

Моя задача заключается в реализации того, что называют "лоадер".
Когда сначала в память надо загрузить внешний exe, потом в нем необходимо подправить пару байт исполняемого кода и только после этого - передать ему команду на выполнение.
Интересует - как это сделать?

Из того, что я знаю - exec...-функции делают обе операции одномоментно, а вот как это сделать в 2 этапа?
Нагуглил функцию VirtualAlloc (и в дополнение VirtualProtect), но в примерах - загрузка и исполнение шеллкода. А вот есть ли в WinAPI решение для стороннего exe?
Также в виде приятного дополнения, как я понимаю, должен автоматически получиться обход DEP, если задать области памяти права, поскольку инжект во внешний процесс неизбежно активирует DEP, а если я сам загружаю процесс в память, то перед запуском могу делать с ним все, что хочу.

Добавлено через 59 минут
Кажется, нагуглил решение:
http://www.joachim-bauch.de/tu... om-memory/

DllLoaderLoader.cpp вроде бы умеет подгружать и exe:
C++
1
2
3
4
5
6
7
8
#define EXE_FILE TEXT("DllLoader.exe")
...
fp = _tfopen(EXE_FILE, _T("rb"));
...
handle = MemoryLoadLibrary(data);
result = MemoryCallEntryPoint(handle);
...
MemoryFreeLibrary(handle);
Проверю, отпишусь...

Добавлено через 5 часов 37 минут
пару часов потратил - не запускается. DLL падает, пытаясь прочитаться по неверному адресу, exe - не может найти точку входа. Самому писать разбор PE-заголовка желания нет, не верю, что не существует более простого решения...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2014, 23:03
Ответы с готовыми решениями:

Как запустить приложение не отдельно, а в пределах своей программы
Есть вот такой вот кусок кода: Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run...

Как сделать свой лоадер?
Извините, я новичек в Делфи. Не судите строго. Вобщем есть программа, которая постоянно...

Как можно сделать что бы создавался отдельно слой и отдельно векторная маска
Как можно сделать что бы при создание создавался отдельно слой и отдельно векторная маска(вроде...

Привязка: как сделать лоадер для приложения (exe) с проверкой и выдачей ключей активации?
Здравствуйте. У меня есть приложение .exe. Как сделать для него лоадер с проверкой и выдачей ключей...

2
Эксперт С++
3057 / 1399 / 421
Регистрация: 19.01.2009
Сообщений: 3,770
22.12.2014, 23:34 2
iltmpz, не специалист в данной библиотеке, но имхо даже название (MemoryLoadLibrary()) вроде бы как намекает, что она предназначена для работы с .DLL а у вас DllLoader.exe . Возможно что-то не так понял.
0
0 / 0 / 1
Регистрация: 22.12.2014
Сообщений: 20
23.12.2014, 00:01  [ТС] 3
Ну, как я понимаю, что dll, что exe - заголовки у них ну очень похожие, как и принцип загрузки, почему не использовать код для загрузки exe? Собственно, пример выше именно это и делал. Однако, не вышло, ошибка...

Похоже однако вопрос с лоадером решил: на всякий случай если кому пригодится:
раздобыл и расковырял исходник реального asm-лоадера - там вызывается CreateProcess, и сразу после проверки на успешное завершение - VirtualProtectEx и WriteProcessMemory.
CreateProcess возвращает видимо раньше, чем программа запустится (не знаю, на какой стадии выполнения), но реализовано это именно так.
Так что по теме - вопрос остается без ответа, а вот как делаются лоадеры - я разобрался.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2014, 00:01

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

подскажите как отдельно запустить блок питания без мамы
нужен блок питания на 12 вольт есть старый от компа,не знаю как его запустить

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

Как java-приложение может попросить OS запустить внешнее приложение?
Как java-приложение может попросить OS запустить внешнее приложение?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.