Take Control of the Compile Process alix Вот тут есть статья, но главное стяни оттуда код, там есть add-in к vb и примеры. Потом надо пропатчить твой loader.dll, чтобы он грузил мишень по адресу 400000h, а не куда ему вздумается
Есть. format PE GUI 4.0 include '%include%\win32a.inc' start: mov eax,[endflag] or eax,eax jz @f invoke LoadLibrary,_user invoke MessageBox,0,_message,_file,MB_OK ret @@: invoke GetStartupInfo,sinfo invoke CreateProcess,0,_file,0,0,0,CREATE_SUSPENDED,0,0,sinfo,hProcess invoke OpenProcess,PROCESS_ALL_ACCESS,0,[dwProcessID] mov [hProcess],eax invoke VirtualProtectEx,eax,400000h,2000h,PAGE_EXECUTE_READWRITE,hThread mov [endflag],eax invoke WriteProcessMemory,[hProcess],400000h,400000h,2000h,0 invoke OpenThread,THREAD_ALL_ACCESS,0,[dwThreadID] push eax invoke ResumeThread,eax call [CloseHandle] invoke CloseHandle,[hProcess] ret THREAD_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED + SYNCHRONIZE + 3FFh) endflag dd 0 _file db "desktop.exe",0 _message db "Running in another process",0 sinfo STARTUPINFO ;PROCESS_INFORMATION hProcess dd 0 hThread dd 0 dwProcessID dd 0 dwThreadID dd 0 _user db "user32",0 data import library kernel32,'KERNEL32',\ user32,'USER32' include '%include%\apia\user32.inc' include '%include%\apia\kernel32.inc' end data Написано на ФАСМЕ, думаю разберетесь что и как. Главное в скопрированном коде обязательно надо делать LoadLibrary на все дллки, кроме Кернела.
Для данной проблемы этот подход применим так: запускаем большой екзешник (на Explorer не коситься, с ним такое не пройдет). Разбиваем образ из ресурса на секции и копируем в чужой процесс, устанавливаем нужный нам контекст в треде и запускаем его.