Страница: 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> Несколько неправильны? По-моему, вся эта ветка - несколько бред  Не люблю слишком резко выражаться... но в остальном ты прав  2alex, сказано же не сохраняя файл на диск... Или де LoadLibrary может принимать и строку машинного кода !? Странно, в MSND про это умалчивается  А вот вопрос в тему, а если у вызываемой функуции имеется более 4-х параметров, как загнать в стек оставшиеся данные, для пользования тем же CallWindowProc на VB??? Возможно вопрос из раздела для ламеров, но я только второй день как "сурьезно" взялся за изучение теории, а в частности asm'a, если оно так, прошу прощения, но все же... Самый подлый вариант: написать машинный код, который заносит в стек нужное количество аргументов, который принимал бы 4  
			
 
  
		
     
  
    
Вопрос: Как запустить ЕХЕ из массива
     
    
Добавлено: 12.04.04 11:24
     
      
  
				
			  
					 
			
				 
    
		
       
    
Автор вопроса:  
    
 SDL | Web-сайт: StarTeleport.Narod.Ru | ICQ: 272678283 
      
       
  
 
    
				
		
		
					 
			
				 
  
		
     
  
    
Ответы
     
    
Всего ответов: 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
       
    
       
  
 
    
 А с первым ответом, точнее с первой его частью, Sharp явно перемудрил 8)
		
	  
			 
	
		 
    
       
    
Номер ответа: 15 
      
Автор ответа:
 Sharp
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Лидер форума
ICQ: 216865379 
Вопросов: 106
Ответов: 9979
      
 Web-сайт:  
 Профиль |  | #15
      
Добавлено:  15.04.04 00:40
       
    
       
  
 
    