PDA

Ver Versão Completa : [Source] Simples Memory Searcher - C



LinBenutzer
07/03/2007, 09:10
- Espero que não estejam cançados já!!!

Próximo:

-Dark Side:

Hi,
Um programa oriundo de uma curiosidade minha. O programa obtém o nome de um processo, tenta abrí-lo, e procura por um determinada string em uma faixa de endereços de memória. Caso encontre algum resultado, chama por uma função que filtra os endereços encontrados previamente, de acordo com uma nova string.

searcher.c


/*
By Dark_Side
16/08/2006
00:07
*/

#include <windows.h>
#include <tlhelp32.h> // Funções para obter lista de processo
#include <stdio.h>
#include <string.h>
#include <conio.h>

//Funções definidas
int init(),abrir(DWORD pid);
void procurar(),filtrar();

//Struct que contém variáveis que controlam o processo da busca
struct s1{
DWORD inicio,fim;
int total,addr;
HANDLE p;
char texto[0x20];
}busca;


DWORD *end; //Array com os endereços encontrados
char * buffer; //Buffer

int main()
{
if(!init()){ //Verifica se o processo especificado foi encontrado
puts("Processo nao encontrado!");
getch();
return 1;
}


}

int init()
{
char nome[0x20];
PROCESSENTRY32 proc;
HANDLE snapshot;

// Obtém o nome do processo
puts("Nome do processo:");
scanf("%32s",nome);

//Obtém a lista de processos
proc.dwSize=sizeof(proc);
snapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCE SS,0);
while(Process32Next(snapshot,&proc))
{
if(strcmp(proc.szExeFile,nome)==0) //Caso encontre o processo digitado
{
switch(abrir(proc.th32ProcessID)) //Tenta abrí-lo
{
case 0: //Se aberto inicia busca
procurar();
break;
case 1: //Em caso de erro
puts("Erro ao abrir o processo");
getch();
break;


}
return 1;
}

}



return 0;
}

int abrir(DWORD pid)
{

busca.p = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid); //Tenta abrir o processo
if(busca.p==0)
return 1;
else
return 0;
}

void procurar(){

busca.inicio=0; //Endereço inicial
busca.fim=0x100000; //Endereço final
busca.total=0; //Total de endereços encontrados

//Procura por algo
puts("Procurar por:");
scanf("%32s",busca.texto);

//Aloca espaço nas variáveis
end = malloc(busca.fim-busca.total);
buffer = malloc(strlen(busca.texto));
memset(buffer,0,sizeof(buffer));

puts("Procurando...");

for(busca.addr=busca.inicio ;busca.addr<busca>0) //Caso haja algum resultado, inicia filtro.
filtrar();
}

void filtrar()
{
int t;
go:
t = busca.total ; //Obtém o número total de elementos no array a serem filtrados (número de endereços encontrados)

//Obtém string de filtro
puts("Filtrar: ");
scanf("%32s",busca.texto);
busca.total=0; //Zera número de endereços

for(busca.addr=0;busca.addr <t> No próximo filtro, serão filtrados, apenas os endereços até este número total
} }
printf("\nResultados: %d\n",busca.total); //Monstra resultados
getch();
system("cls");

if(busca.total > 0) //Verifica se há resultados
goto go; //Volta ao filtro
}


Abraços!!:cool:

kiubbe
17/11/2007, 08:09
Kara to mtu entusiasmado com o forum "axei" ele por acaso na net e curti mtu ta d parabens a galera ai mta informação, otimos assunto olhei varios post's teus e eh isso ai contribuindo pra gurizada do C/C++ programo ai a + d 3 anos mais sempre estamos aprendendo porem seu "suposto" Memory Searcher n Seracher Memory ahUAHuahU brinkadeiras a parte vc somente procurou os processos em execução os mesmo q aparecem no Gerenciador de Tarefas, acredito eu q vc tenha eskecido d postar a função q procura os procura endereço por endereço xD, c vc ainda esta contruindo-o maos a obra ^^ talvez eu crie um neste final d semana e poste aki como contruibuição.
Vlws
Fuiz