per nascondere processi che non vogliamo visualizzare. Una volta applicazioni
simili venivano usate per nascondere backdoors o trojan agli amministratori.
Legge i processi da nascondere in un file chiamato "proc" presente nella
directory dell'applicazione.
Passiamo subito al codice:
- Codice: Seleziona tutto
/* Nasconde i processi presenti nel file locale "proc".
* Dopo che l'utente lancia il comando "ps" per
* visualizzare i processi attivi, esso legge nel
* file "proc" se ci sono elementi da nascondere
* e li nasconde usando il comando bash "grep -v".
* Versione di prova beta 0.1.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 50
void main(int argc, char **argv[]){
// Variabili
FILE *fp=fopen("proc","r"); // Puntatore al file
char buffer[MAX]; // Buffer di lettura dal file
char lettura_file[MAX]; // Contiene il valore del file
char comando_stringa[MAX]; // Contiene il valore " | grep -e "
char comando_finale[MAX]; // Contiene il comando finale da eseguire
int cont=0;
// Inizializzo la stringa
comando_stringa[0]='\0';
strncat(comando_stringa," | grep ",8);
// Leggo dal file una riga
// di MAX caratteri e la salvo in buffer.
while(fgets(buffer,MAX,fp)!=NULL){
// Ciclo per resettare la stringa altrimenti
// lettura_file attuale conterrà anche i caratteri
// della lettura precedente.
for(cont=0;cont<MAX;cont++)
lettura_file[cont]='\0';
// buffer contiene anche il carattere di fine stringa "\n"
// che a noi non serve quindi copio buffer - 1 in lettura_file
strncpy(lettura_file,buffer,strlen(buffer)-1);
strncat(comando_stringa," -e ",4);
// Procedo con la concatenazione delle stringhe
strncat(comando_stringa,lettura_file,strlen(lettura_file));
}
comando_finale[0]='\0';
if(argc==2){
strncat(comando_finale,"/bin/ps ",8);
strncat(comando_finale,argv[1],strlen(argv[1]));
strncat(comando_finale,comando_stringa,strlen(comando_stringa));
strncat(comando_finale," -e ps -v\n",11);
}else{
strncat(comando_finale,"/bin/ps",7);
strncat(comando_finale,comando_stringa,strlen(comando_stringa));
strncat(comando_finale," -e ps -v\n",11);
}
system(comando_finale);
// printf("Comando: %s",comando_finale);
return;
}
Sicuramente non è perfettissima, infatti ho dovuto mettere questo ciclo
- Codice: Seleziona tutto
for(cont=0;cont<MAX;cont++)
lettura_file[cont]='\0';
altrimenti se ad esempio nel file proc erano presenti queste righe
- Codice: Seleziona tutto
cairo
conky
code
l'ultima lettura "code" mi usciva "codey" mi prendeva anche il carattere della penultima lettura.
Se avete qualche altra idea per sostituire quel for sarei grato di modificarlo.
Piccola applicazione per smanettare un pò con la programmazione C.
Grazie a tutti anticipatamente accetto qualsiasi consiglio



. Un buon manuale di C potrebbe aiutare in questi casi....se letto tutto ovviamente