Страница: 1 | 2 |
Как можно напрямую (без записи в файл, конечно) запустить на выполнение ЕХЕ, находящийся, например, в массиве (ресурсе)?
Поставить низкоуровневый хук на файловую систему, передать в какой нибудь CreateProcess фейковое имя, перехватить обращение к винту и подставить свои данные. Если надо просто запустить машинный код, можно использовать CallWindowProc А они то тут как помогут?? В теории, можно воспользоваться Address of и CopyMemory, но это кажется маловероятным... Единственный выход,чтобы загрузить файл в память, это использовать API функцию LoadLibrary, а потом передать управление на точку входа функции WinMain, так поступает UPX по моему... ))) Единственный выход,чтобы загрузить файл в память, это использовать API функцию LoadLibrary, а потом передать управление на точку входа функции WinMain, так поступает UPX по моему... ))) Вот ответы 2-5 несколько не правильны, на мой взгляд. По моему так ничего не получится... Может есть чел. который с Си общается на "ты", возьмет исходники UPX'a и расскажет нам в кратце, по какуому принципу это все дело работает... А вообще, кажется AsPack создан на основе какого-то вируса (полиморфного кажись), так на эту тему не плохо было бы и его посмотреть... Несколько неправильны? По-моему, вся эта ветка - несколько бред Ответы 2-5 совершенно неправдоподобны, 1 - думается, это не для VB... Жаль RamDisk'и уже не рулят... Кстати, как программно реализовать команду subst? Странные вещи я читаю, люди явно не понимают о чем говорят... Как я понимаю, ты пишешь, что-то вроде упаковщика EXE файлов. 'Примерная схема на PowerBASIC 7.0 Странные вещи я читаю, люди явно не понимают о чем говорят... Как я понимаю, ты пишешь, что-то вроде упаковщика EXE файлов. 'Примерная схема на PowerBASIC 7.0 Извиняюсь за флейм, глючит браузер Извиняюсь, но почему не могут? Если объявил функцию как Public в модуле - кто мешает использовать Address of ? Видать я чего-то недопонял... В VB нельзя вызвать функцию по ее адресу! AdressOf возвращает указатель на процедуру для его передачи в DLL, разъименовать указатель средствами VB нельзя... Т.е. невозможно сделать вызов вида CallProc (&H763772) LoadLibrary принимает аргументом имя файла, а здесь EXEшник содержится в массиве. Через CallWindowProc можно вызывать функции и в VB, если только не возникнет ошибки стека LoL> Несколько неправильны? По-моему, вся эта ветка - несколько бред Не люблю слишком резко выражаться... но в остальном ты прав А с первым ответом, точнее с первой его частью, Sharp явно перемудрил 8) 2alex, сказано же не сохраняя файл на диск... Или де LoadLibrary может принимать и строку машинного кода !? Странно, в MSND про это умалчивается А вот вопрос в тему, а если у вызываемой функуции имеется более 4-х параметров, как загнать в стек оставшиеся данные, для пользования тем же CallWindowProc на VB??? Возможно вопрос из раздела для ламеров, но я только второй день как "сурьезно" взялся за изучение теории, а в частности asm'a, если оно так, прошу прощения, но все же... Самый подлый вариант: написать машинный код, который заносит в стек нужное количество аргументов, который принимал бы 4
Вопрос: Как запустить ЕХЕ из массива
Добавлено: 12.04.04 11:24
Автор вопроса: SDL | Web-сайт:
Ответы
Всего ответов: 23
Номер ответа: 1
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #1
Добавлено: 12.04.04 21:39
Номер ответа: 2
Автор ответа:
Alex(S)
Вопросов: 8
Ответов: 31
Web-сайт:
Профиль | | #2
Добавлено: 14.04.04 00:39
Попробуй API функцию WinExec, либо встроенную Shell.
Номер ответа: 3
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #3
Добавлено: 14.04.04 09:54
Номер ответа: 4
Автор ответа:
alex
Вопросов: 84
Ответов: 453
Профиль | | #4
Добавлено: 14.04.04 09:56
Номер ответа: 5
Автор ответа:
alex
Вопросов: 84
Ответов: 453
Профиль | | #5
Добавлено: 14.04.04 09:56
Номер ответа: 6
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #6
Добавлено: 14.04.04 10:44
Номер ответа: 7
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #7
Добавлено: 14.04.04 12:10
Номер ответа: 8
Автор ответа:
alex
Вопросов: 84
Ответов: 453
Профиль | | #8
Добавлено: 14.04.04 12:47
Загрузить EXE файл в память, и передать ему управление, можно API
функцией LoadLibrary, алгоритм примерно такой...
...
'Загружаем файл из ресурсов.
File=LoadResource("имя секции в .rsrc","файл")
...
...
' Загружаем EXE файл в адресное пространство процесса.
hExe=LoadLibrary(File)
..
...
'Получаем точку входа в функцию WinMain загруженного EXE файла.
'Данная функцию возвращяет указатель на функцию WinMain.
EntryPoint = @lpImageNtHeaders.OptionalHeader.AddressOfEntryPoint + lpImageDosHeader
..
..
'Самый важный момент!
'Передаем управление функции WinMain запускаемого EXE.
Call Dword EntryPoint Using WinMain (ByVal hExe, ByVal 0, ByVal 0, %SW_SHOW)
...
'
Как видно из примера, для передачи управления функции WinMain,
загруженного EXE файла, необходимо вызвать эту функцию по ее адресу.
VB и VB.NET не могут использовать указатели на функции,
поэтому на этих языках принципиально невозможно написать
упаковщик EXE файлов. Ты просто не сможешь запустить
загруженный экзешник....
Поэтому такие вещи надо писать на C++ или PowerBASIC.
Номер ответа: 9
Автор ответа:
alex
Вопросов: 84
Ответов: 453
Профиль | | #9
Добавлено: 14.04.04 12:49
Загрузить EXE файл в память, и передать ему управление, можно API
функцией LoadLibrary, алгоритм примерно такой...
...
'Загружаем файл из ресурсов.
File=LoadResource("имя секции в .rsrc","файл")
...
...
' Загружаем EXE файл в адресное пространство процесса.
hExe=LoadLibrary(File)
..
...
'Получаем точку входа в функцию WinMain загруженного EXE файла.
'Данная функцию возвращяет указатель на функцию WinMain.
EntryPoint = @lpImageNtHeaders.OptionalHeader.AddressOfEntryPoint + lpImageDosHeader
..
..
'Самый важный момент!
'Передаем управление функции WinMain запускаемого EXE.
Call Dword EntryPoint Using WinMain (ByVal hExe, ByVal 0, ByVal 0, %SW_SHOW)
...
'
Как видно из примера, для передачи управления функции WinMain,
загруженного EXE файла, необходимо вызвать эту функцию по ее адресу.
VB и VB.NET не могут использовать указатели на функции,
поэтому на этих языках принципиально невозможно написать
упаковщик EXE файлов. Ты просто не сможешь запустить
загруженный экзешник....
Поэтому такие вещи надо писать на C++ или PowerBASIC.
Номер ответа: 10
Автор ответа:
alex
Вопросов: 84
Ответов: 453
Профиль | | #10
Добавлено: 14.04.04 12:50
Номер ответа: 11
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #11
Добавлено: 14.04.04 15:02
Номер ответа: 12
Автор ответа:
alex
Вопросов: 84
Ответов: 453
Профиль | | #12
Добавлено: 14.04.04 17:49
Номер ответа: 13
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #13
Добавлено: 14.04.04 19:49
Номер ответа: 14
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #14
Добавлено: 14.04.04 23:38
Номер ответа: 15
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #15
Добавлено: 15.04.04 00:40