[Source] Process Filter - C

Started by Dark_Side, 09 de September , 2006, 10:04:38 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Dark_Side

Hi,
Um source um tanto quanto bobo, mas que pode servir como base para alguma coisa que eu não sei o que pode ser huahuae.
Muito bom, o programa lê um arquivo denominado "processos.txt" - que contém uma lista com nomes de processos - em seguida, é verificado se tais processos estão em execução e caso afirmativo, é retornado o nome no sistema e o PID (Process ID) do respectivo processo.

Taí:

processos.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h> // Variáveis e funções da API do Windows
#include <tlhelp32.h> // Listar processos

#define MAX_REG 100 // Número máximo de processos a obter do arquivo
char * regs[MAX_REG]={0}; // Array de string que contém o nome dos processo do arquivo.
HANDLE SnapShot;
PROCESSENTRY32 processo; 

void erro(const char * erro) // Função que notifica erros
{   
     puts(erro);
       system("pause > nul");
         exit(1);
 }
 
 char * strlow(const char * str) // Função que converte strings para letras minúsculas
{
     int i;
     char *ret = (char*)malloc(strlen(str)+1);
     for(i = 0;i<strlen(str);i++)
     if(str[i] >='A' && str[i] <= 'Z') ret[i]=str[i]+32;
     else ret[i]=str[i];
     
     ret[i] = '\0';   
     return ret;
}

int main(){ 
    int i = 0;
    FILE *fp = fopen("processos.txt","r"); // Tenta abrir o arquivo de processos para leitura
    if(fp ==0) erro("Erro ao abrir o arquivo de processos.");

   for(;i<MAX_REG;i++){
                        regs[i]= (char*)malloc(0x100); //Tenta alocar espaço nas string do array
                        if(regs[i] ==NULL) erro("Erro ao alocar espaco em buffers");}

   i = 0;
   while(i < MAX_REG){
             fscanf(fp,"%255s",regs[i]); // Obtém processo da lista e salva-o na string
             i++;
             }
 
     SnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);  // Cria SnapShot -> listar processos
     if(SnapShot ==0) erro("Erro ao criar SnapShot");

processo.dwSize=sizeof(processo); // Tamanho da estrutura
Process32First(SnapShot,&processo);
puts("Iniciando escaneamento...\n");

// Enquanto houverem processos em execução
while(Process32Next(SnapShot,&processo)){                                   
 for(i=0;i<MAX_REG;i++)
 // Converte os nomes do processo do arquivo e do processo em execução para minúsculas e os compara
  if(regs[i] != NULL && strcmp(strlow(regs[i]),strlow(processo.szExeFile))==0)
  //Mostra o nome do processo e seu PID.
printf("Processo encontrado: %s\nPID: %d\n\n",processo.szExeFile,processo.th32ProcessID);
         
}
puts("Fim do escaneamento...");

              for(i=0;i<MAX_REG;i++) free(regs[i]); // Libera espaço alocado nos buffers
           system("pause");
    return 0;
}
Carry on again...
Bye   ;D.

insanity

Da para fazer usar esse programa, testar se tem algum o processo "desconhecido" rodando na maquina,
Tipow se um rootkit tiver subtistuido algum processo, aí seu programa ia e alertava que algum processo tinha sido modificado.

Sei lá mais inultio esse programa não é ;)


ate mais