Entra

View Full Version : [c++] Autokill e autocancellazione di un eseguibile da remoto


3nigma666
04-03-2010, 21:20
buona sera a tutti,

premetto subito una cosa, onde evitare da subito pensieri maliziosi, che il codice che sto scrivendo non ha niente a che fare con keylogger, malware etc..

Senza dilungarmi eccessivamente vado subito al dunque.

Sto scrivendo due applicazioni, entrambe girano su un server che sta dietro a 2 firewall (anzi 3 considerando windows).
Devo poter controllare da remoto queste applicazioni, ma entrare nel server mi risulta alquanto difficile data la protezione, e inoltre non voglio lasciare possibili aperture in ingresso dall'esterno.

L'applicazione A.exe ha ESCLUSIVAMENTE il compito di vedere, su un dato server ftp, la presenza di un file che ho deciso chiamarsi init.txt, se è presente l'applicazione A.exe crea un file B.exe.
Questo file B.exe è una applicazione che, tra i vari compiti, ha quello di controllare, sempre su un dato server ftp, se c'è il file die.txt.
Se presente il file die.txt l'applicazione B.exe si deve autokillare e cancellare dall'hard disk

Sono riuscito a fare tutto tranne quello di ricercare su un server ftp un dato file, e soprattutto non riesco a far si che B.exe si autokilli e si autocancelli.

come fare ?
grazie in anticipo per l'aiuto

tomminno
04-03-2010, 22:31
Sto scrivendo due applicazioni, entrambe girano su un server che sta dietro a 2 firewall (anzi 3 considerando windows).
Devo poter controllare da remoto queste applicazioni, ma entrare nel server mi risulta alquanto difficile data la protezione, e inoltre non voglio lasciare possibili aperture in ingresso dall'esterno.


Ma qualcosa che abbia a che fare con la programmazione web no?
Tipo un webservice.


L'applicazione A.exe ha ESCLUSIVAMENTE il compito di vedere, su un dato server ftp, la presenza di un file che ho deciso chiamarsi init.txt, se è presente l'applicazione A.exe crea un file B.exe.


Come fa A a creare B?


Questo file B.exe è una applicazione che, tra i vari compiti, ha quello di controllare, sempre su un dato server ftp, se c'è il file die.txt.
Se presente il file die.txt l'applicazione B.exe si deve autokillare e cancellare dall'hard disk


per l'"autokill" direi che basta un banale exit, per quanto riguarda la cancellazione non mi risulta possibile su Windows cancellare un file in uso, l'unica è impostare la cancellazione al riavvio, o lavorare in collaborazione con A.
Dopo che A ha avviato B può mettersi in attesa della terminazione del processo B, una volta teminato cancella il file

3nigma666
04-03-2010, 22:38
Ma qualcosa che abbia a che fare con la programmazione web no?
Tipo un webservice.



Come fa A a creare B?



per l'"autokill" direi che basta un banale exit, per quanto riguarda la cancellazione non mi risulta possibile su Windows cancellare un file in uso, l'unica è impostare la cancellazione al riavvio, o lavorare in collaborazione con A.
Dopo che A ha avviato B può mettersi in attesa della terminazione del processo B, una volta teminato cancella il file

si scusa ho sbagliato a scrivere "lo crea", intendevo dire lo avvia, fa eseguire l'applicativo B.exe


Ok, per quanto riguarda la collaborazione in effetti si può fare.. come collabora ad avviarlo può anche collaborare a cancellarlo..

Ciò che mi manca, che proprio non riesco è far si che B.exe verifichi che sia presente il file die.txt sul server ftp....

pensavo di fare una cosa di questo tipo, molto terra terra:

una cosa del tipo:


if (!ftpFileOpen("die.txt"))
{
//non fare nulla
}
else
{
system("exit")
}


a me manca la funzione ftpfileOpen!!!! non la trovo da nessuna parte .. ed è di una banalità assurda ... lo so.. :'(

bobbytre
04-03-2010, 22:39
per l'autokill potresti fare cosi:

il programma B.exe crea un nuovo file C.exe , lo esegue ed esce.

C.exe è un semplice programma che cancella un file passato per parametro.
C.exe all'avvio dell'esecuzione attende n secondi , poi cancella il file passato per parametro ( b.exe), quindi scrive nel registro di windows in esecuzione automatica ( HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce ) "DEL /Q c.exe" cosi all'avvio successivo di windows anche c.exe viene cancellato.

3nigma666
04-03-2010, 22:40
per l'autokill potresti fare cosi:

il programma B.exe crea un nuovo file C.exe , lo esegue ed esce.

C.exe è un semplice programma che cancella un file passato per parametro.
C.exe all'avvio dell'esecuzione attende n secondi , poi cancella il file passato per parametro ( b.exe), quindi scrive nel registro di windows in esecuzione automatica ( HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce ) "DEL /Q c.exe" cosi all'avvio successivo di windows anche c.exe viene cancellato.

uhmm... geniale! non c'avevo pensato..;)

tomminno
04-03-2010, 23:12
Ciò che mi manca, che proprio non riesco è far si che B.exe verifichi che sia presente il file die.txt sul server ftp....


Quindi ti manca anche la parte di A che controlla init.txt


pensavo di fare una cosa di questo tipo, molto terra terra:

una cosa del tipo:


if (!ftpFileOpen("die.txt"))
{
//non fare nulla
}
else
{
system("exit")
}


a me manca la funzione ftpfileOpen!!!! non la trovo da nessuna parte .. ed è di una banalità assurda ... lo so.. :'(

Già ti ci vuole una libreria per la gestione dell'ftp.
Potresti provare curl o Wininet

tomminno
04-03-2010, 23:14
per l'autokill potresti fare cosi:

il programma B.exe crea un nuovo file C.exe , lo esegue ed esce.

C.exe è un semplice programma che cancella un file passato per parametro.
C.exe all'avvio dell'esecuzione attende n secondi , poi cancella il file passato per parametro ( b.exe), quindi scrive nel registro di windows in esecuzione automatica ( HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce ) "DEL /Q c.exe" cosi all'avvio successivo di windows anche c.exe viene cancellato.

Ma ha già A che può fare tutto questo in maniera più semplice andando ad attendere la terminazione di B, senza bisogno di ulteriori attese inutili e soprattutto senza necessitare del riavvio.

3nigma666
04-03-2010, 23:26
#define OPEN_DIE "die.txt"

.....

if (!FtpOpenFile(hCon, OPEN_DIE, GENERIC_READ,
FTP_TRANSFER_TYPE_BINARY | INTERNET_FLAG_TRANSFER_BINARY,0))
{
cout<<"non esiste il file die.txt";
}
else
{
system("exit");
}

bobbytre
05-03-2010, 00:56
Ma ha già A che può fare tutto questo in maniera più semplice andando ad attendere la terminazione di B, senza bisogno di ulteriori attese inutili e soprattutto senza necessitare del riavvio.

ma noi non sappiamo A che fa dopo la creazione di B , potrebbe non essere in esecuzione quando B va a cercare il file su FTP.

Quindi ,secondo me , è meglio che sia B stesso a provvedere alla sua auto-terminazione