Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Как запустить ЕХЕ из массива Добавлено: 12.04.04 11:24  

Автор вопроса:  SDL | Web-сайт: StarTeleport.Narod.Ru | ICQ: 272678283 

Как можно напрямую (без записи в файл, конечно) запустить на выполнение ЕХЕ, находящийся, например, в массиве (ресурсе)?

Ответить

  Ответы Всего ответов: 23  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 12.04.04 21:39

Поставить низкоуровневый хук на файловую систему, передать в какой нибудь CreateProcess фейковое имя, перехватить обращение к винту и подставить свои данные. Если надо просто запустить машинный код, можно использовать CallWindowProc

Ответить

Номер ответа: 2
Автор ответа:
 Alex(S)



Вопросов: 8
Ответов: 31
 Web-сайт: sapr7.by.ru
 Профиль | | #2
Добавлено: 14.04.04 00:39
Попробуй API функцию WinExec, либо встроенную Shell.

Ответить

Номер ответа: 3
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #3 Добавлено: 14.04.04 09:54

А они то тут как помогут??

В теории, можно воспользоваться Address of и CopyMemory, но это кажется маловероятным...

Ответить

Номер ответа: 4
Автор ответа:
 alex



Вопросов: 84
Ответов: 453
 Профиль | | #4 Добавлено: 14.04.04 09:56

Единственный выход,чтобы загрузить файл в память, это использовать API функцию LoadLibrary, а потом передать управление на точку входа функции WinMain, так поступает UPX по моему...

:))))

Ответить

Номер ответа: 5
Автор ответа:
 alex



Вопросов: 84
Ответов: 453
 Профиль | | #5 Добавлено: 14.04.04 09:56

Единственный выход,чтобы загрузить файл в память, это использовать API функцию LoadLibrary, а потом передать управление на точку входа функции WinMain, так поступает UPX по моему...

:))))

Ответить

Номер ответа: 6
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #6
Добавлено: 14.04.04 10:44

Вот ответы 2-5 несколько не правильны, на мой взгляд. По моему так ничего не получится... Может есть чел. который с Си общается на "ты", возьмет исходники UPX'a и расскажет нам в кратце, по какуому принципу это все дело работает... А вообще, кажется AsPack создан на основе какого-то вируса (полиморфного кажись), так на эту тему не плохо было бы и его посмотреть...

Ответить

Номер ответа: 7
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #7 Добавлено: 14.04.04 12:10

Несколько неправильны? По-моему, вся эта ветка - несколько бред :)

Ответы 2-5 совершенно неправдоподобны, 1 - думается, это не для VB...

Жаль RamDisk'и уже не рулят...

Кстати, как программно реализовать команду subst?

Ответить

Номер ответа: 8
Автор ответа:
 alex



Вопросов: 84
Ответов: 453
 Профиль | | #8 Добавлено: 14.04.04 12:47

Странные вещи я читаю, люди явно не понимают о чем говорят...

Как я понимаю, ты пишешь, что-то вроде упаковщика EXE файлов.
Загрузить EXE файл в память, и передать ему управление, можно API
функцией LoadLibrary, алгоритм примерно такой...

'Примерная схема на PowerBASIC 7.0
...
'Загружаем файл из ресурсов.
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 файлов.
Загрузить EXE файл в память, и передать ему управление, можно API
функцией LoadLibrary, алгоритм примерно такой...

'Примерная схема на PowerBASIC 7.0
...
'Загружаем файл из ресурсов.
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

Извиняюсь, но почему не могут? Если объявил функцию как Public в модуле - кто мешает использовать Address of ? Видать я чего-то недопонял...

Ответить

Номер ответа: 12
Автор ответа:
 alex



Вопросов: 84
Ответов: 453
 Профиль | | #12 Добавлено: 14.04.04 17:49

В VB нельзя вызвать функцию по ее адресу! AdressOf возвращает указатель на процедуру для его передачи в DLL, разъименовать указатель средствами VB нельзя...

Т.е. невозможно сделать вызов вида CallProc (&H763772)

Ответить

Номер ответа: 13
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #13
Добавлено: 14.04.04 19:49

LoadLibrary принимает аргументом имя файла, а здесь EXEшник содержится в массиве. Через CallWindowProc можно вызывать функции и в VB, если только не возникнет ошибки стека

Ответить

Номер ответа: 14
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #14
Добавлено: 14.04.04 23:38

LoL> Несколько неправильны? По-моему, вся эта ветка - несколько бред :)

Не люблю слишком резко выражаться... но в остальном ты прав %) А с первым ответом, точнее с первой его частью, Sharp явно перемудрил 8)

2alex, сказано же не сохраняя файл на диск... Или де LoadLibrary может принимать и строку машинного кода !? Странно, в MSND про это умалчивается ;)

А вот вопрос в тему, а если у вызываемой функуции имеется более 4-х параметров, как загнать в стек оставшиеся данные, для пользования тем же CallWindowProc на VB??? Возможно вопрос из раздела для ламеров, но я только второй день как "сурьезно" взялся за изучение теории, а в частности asm'a, если оно так, прошу прощения, но все же...

Ответить

Номер ответа: 15
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #15
Добавлено: 15.04.04 00:40

Самый подлый вариант: написать машинный код, который заносит в стек нужное количество аргументов, который принимал бы 4 :)

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам