Форум » FiveWin » Встроенный EXE » Ответить

Встроенный EXE

fil: Всем, привет ! 1. Можно ли поместить внешний EXE файл в ресурс своей проги ? 2. Можно ли поместить внешний EXE файл в EXE-шник своей проги ?

Ответов - 23, стр: 1 2 All

Loach: Насколько я знаю, к "хвосту" EXEшника можно подписывать что угодно, работоспособности при этом он не теряет :) Вероятно можно, предварительно запомнив размер своего EXE, подписывать к его хвосту второй EXE...

fil: Тогда сразу вопрос, а как запустить этот "подклеейнный" exe-шник ?

Loach: Ну, как... Видимо Fread() основного ехе на чтение, Fwrite()-> Новый_ехешник.exe и типа запустить... Сразу говорю, - сам не пробовал...

fil: Ну это понятно. А вот можно ли вырезанный блок сохранить как exe-шник в памяти и пустить его оттуда ? Я как-то развлекался с джойнером приклеивая exe-шники к картинкам. Все работало, но антивирус ругался на мои творения, мол троян. Тоже не вариант.

Loach: Честно говоря с памятью не пробовал, даже не знаю как подступиться, извини...

ММК: Loach пишет: с памятью не пробовал :))) А в мемо поле нельзя засадить?

Andrey: ММК пишет: А в мемо поле нельзя засадить? Лучше в BLOB ....

Loach: А как все это решает вопрос запуска приложения "из памяти" ?

ММК: Loach пишет: А как все это решает вопрос запуска приложения "из памяти" ? Ну, для рывка, решит вопрос с антивирусом. А с памятью это ты Сережа придумал :))) У меня тем более с памятью не очень :(( Может прочитать в GGG , а потом RUN GGG.... :))) Как в клубе "Что, где , как "

gustow: Прошу прощенья за вопрос, благородные доны... :) - а зачем всё это извратованье надо? в смысле - брать откуда-то чего-то заранее заготовленное, превращать его "на лету" в EXEшник и запускать... видимо (как понимаю) чтобы не класть в папку с приложением "подчиненные" (вызываемые из него) EXEшки (чтобы юзер чего не надо не тыкал - ибо "чего не надо" на виду не лежит)?.. или я не прав - и в этом есть некая (пока) недоступная мне цель..

fil: Нет, никакой недоступной пониманию цели не преследуется. Ваша логика безупречна. Я нашел пару реализаций на С, но все сложно, надо PE понимать. Я такое не потяну. С наступающим.

MMK: fil пишет: Я такое не потяну. А под хорошую закусочку ? :)) Вот смотри, забугорцы вроде нормальный вариант предложили, а с такой сишной пр-кой думаю наши спецы тебе помогут! http://boxedapp.com/boxedappsdk/ С наступающим :)))

fil: Ну ежели спецы помогут .. Но пока я этим импортным людям объяснил чего хочу - уфф. Каждый, в стиле Петра, спрашивал - чего ОН хочет. И советовали - кликни, мол, 2 раз на экзешник он и запустится (in memory)

Петр: fil пишет: Каждый, в стиле Петра, спрашивал - чего ОН хочет. Наверное это потому, что вы достаточно туманно объясняете, что вы хотите (конечную цель) и причину возникновения таких "хотелок" А если честно, то совсем не объясняете. Тем не менее, не зная как и где вы объясняли, и что вам ответили, но по указанному адресу я достаточно быстро нашел такой пример [pre2]HANDLE h = BoxedAppSDK_CreateVirtualFile( _T("1.exe"), GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_NEW, 0, NULL); ... DWORD nWritten; WriteFile(h, pData, dwSize, &nWritten, NULL); CloseHandle(h); ... CreateProcessA(NULL, "1.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); [/pre2] Дальше дело техники.. P.S. Внимательно посмотрев еще раз [pre2]BoxedAppSDK_Init(); HMODULE hModule = GetModuleHandle(NULL); HRSRC hResInfo = FindResource(hModule, _T("BIN1"), _T("BIN")); HGLOBAL hResData = LoadResource(hModule, hResInfo); LPVOID lpData = LockResource(hResData); DWORD dwSize = SizeofResource(hModule, hResInfo); HANDLE hFile = BoxedAppSDK_CreateVirtualFile( _T("app1.exe"), GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_NEW, 0, NULL); DWORD temp; WriteFile(hFile, lpData, dwSize, &temp, NULL); CloseHandle(hFile); ShellExecute(NULL, NULL, _T("app1.exe"), NULL, NULL, SW_SHOW); [/pre2]

fil: Возможно я обяснял не так, хотел не того.. Особенно не зная как и где я это объяснял, и что мне ответили Сайт это я смотрел и функции эти на C++. Но вот как это реализовать под xHarbour ?

Петр: Для начала 1. Можно ли поместить внешний EXE файл в ресурс своей проги ? 2. Можно ли поместить внешний EXE файл в EXE-шник своей проги ? 1. Можно, и EXE и DLL, и WAV, MP3 и т.д. В файле ресурсов объявить ресурс как RCDATA Возможен встречный вопрос как его извлечь? Используя функции API, вот эта часть примера иллюстрирует общепринятую технику HMODULE hModule = GetModuleHandle(NULL); HRSRC hResInfo = FindResource(hModule, _T("BIN1"), _T("BIN")); HGLOBAL hResData = LoadResource(hModule, hResInfo); LPVOID lpData = LockResource(hResData); DWORD dwSize = SizeofResource(hModule, hResInfo); 2. Можно. Есть такая техника как injection. Но эту технику используют в основном хацкеры и нормальный антивирус просто обязан реагировать на подобную возню. Для учетных программ и задач, для которых используют xHb - это через верх. fil пишет: Но вот как это реализовать под xHarbour ? Вы же не забыли, что результирующая программа на xHarbour - это C/C++ (в зависимости от C компилятора и ключей компиляции xHb) программа? Если предположить, что у вас BoxedApp имеется в наличии, то какие трудности? Пишите функцию-враппер и вперед. Можете разбить на несколько функций, к примеру, для BoxedAppSDK_Init написать свою функцию-переходник. Самая большая проблема для вас - это заполучить BoxedApp (если вы не хотите писать что-то подобное собственными руками ) или что-то ему подобное ( Callback File System ТМ со товарищи ).

fil: BoxedAppSDK у меня есть. Правда, я слабо представляю его использование Может быть это поинтереснее http://forum.sources.ru/index.php?s=87b05e3df260f4aec50b5d6400cd7bf2&showtopic=257376

Петр: И все таки нафига вам это нужно? Ну я понимаю, но хочу чтобы вы озвучили (написали) fil пишет: Правда, я слабо представляю его использование Не представляю что-там можно не представлять А если не представляете может не оно вам нужно? Может подручными средствами обойтись? Например [pre2] /* * hello.prg */ PROCEDURE main() // OutStd("Hello from resources!") ErrorLevel( 7 ) // RETURN [/pre2] // testres.rc 1001 RCDATA "hello.exe" [pre2] /* * testres.prg */ #define IDR_HELLO 1001 PROCEDURE main() LOCAL cFileOut := hb_dirTemp() + "\" + "he$$o.tmp" LOCAL nSize, hProcess, nRet // DELETE FILE cFileOut nSize := RCDataToFile( IDR_HELLO, cFileOut ) IF nSize > 0 hProcess := hb_processOpen( cFileOut ) ; nRet := hb_processValue( hProcess, .t. ) QOut( nRet ) ENDIF // RETURN // RETURN #pragma BEGINDUMP #include "hbapi.h" #include "windows.h" // JE -> JumpIfEqual #define JE( _val1_, _val2_, _retval_ ) \ if ( _val2_ == _val1_ ) { dwRet = _retval_; goto ret_code; } HB_FUNC( RCDATATOFILE ) { HMODULE hModule = GetModuleHandle( NULL ); HRSRC hResInfo; HGLOBAL hResData; LPVOID lpData; DWORD dwSize, dwRet; HANDLE hFile; hResInfo = FindResource( hModule, MAKEINTRESOURCE(hb_parnl(1), RT_RCDATA ); JE( hResInfo, NULL, -1 ) hResData = LoadResource( hModule, hResInfo ); JE( hResData, NULL, -2 ) lpData = LockResource( hResData ); JE( lpData, NULL, -3 ) dwSize = SizeofResource( hModule, hResInfo ); hFile = CreateFile( hb_parc(2), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, (DWORD) NULL, NULL ); JE( hFile, INVALID_HANDLE_VALUE, -4 ) WriteFile( hFile, lpData, dwSize, &dwRet, NULL ); if ( dwRet != dwSize ) { dwRet = -5; } CloseHandle( hFile ); ret_code: hb_retnl( dwRet ) ; } #pragma ENDDUMP [/pre2] P.S. Немного поправил код. Каждый вызов hProcess := hb_processOpen( ... ) обязательно должен закрываться hb_processValue( hProcess, ... ), освобождая handle процесса! P.P.S. Оказывается для xHb еще и вызов FClose( hProcess ) нужен..

Петр: Как вы заметили, пример написан для Harbour. Для xHb заменяем hb_processOpen на hb_OpenProcess, используем вместо hb_dirTemp() GetEnv("TEMP") или hb_getEnv("TEMP") (что есть). P.S. В Harbour вообще можно обойтись встроенными функциями и win_LoadResource из hbwin.

fil: Ну так и замечательно. Спасибо за помощь.

Andrey: Петр пишет: P.S. В Harbour вообще можно обойтись встроенными функциями и win_LoadResource из hbwin. А есть примеры или описание этих функций... ? До этого было не нужно, а сейчас потребовалось.

Dima: Andrey пишет: А есть примеры или описание этих функций... ? Ты уже задавал этот вопрос лет 8 назад http://clipper.borda.ru/?1-1-0-00000199-000-0-0-1256295459

Andrey: Так это только одна функция. Про неё помню. А ещё какие функции для работы с ресурсами есть ? Хотелось бы иметь список таких функций из hbwin .... P.S. Функцию RCDataToFile() из МиниГуи тоже знаю...



полная версия страницы