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:
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: