1 FTS Mem Tools Ter Abr 16, 2013 10:03 pm
Moedas : 201
Mensagens : 92
Humor : *-*
Reputação : 5
Mensagens : 92
Humor : *-*
Reputação : 5
hacker fts315
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
programa para manipular a memoria (leitura, escrita, alocar espaço, dump, injetor)[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
- Código:
/*
nome: FTS MEM TOOLS
autor: hacker fts315
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
//prototipos
void slogan(void);
//funçao principal
int main(void)
{
//variaveis
int op, op2, tam2, cont = 0;
unsigned long int end, end2, tam;
DWORD pid;
char nome_janela[300], texto[1000], texto2[1000], *st;
HWND janela;
HANDLE proc;
LPVOID aloc;
FILE *arq;
HMODULE hmo;
FARPROC func;
SetConsoleTitle("by hacker fts315");
//loop infinito
while(1)
{
//variaveis
ini:
system("cls");
slogan();
//menu principal
printf("1 - Abrir processo pelo nome da janela \n");
printf("2 - Abrir processo pelo pid \n");
printf("0 - Sair \n\n");
printf("> ");
scanf("%d",&op);
fflush(stdin);
//abrir processo pelo nome da janela
if(op == 1)
{
system("cls");
slogan();
printf("Digite o nome da janela: ");
gets(nome_janela);
janela = FindWindow(0,nome_janela);
if(!janela)
{
printf("\nERRO: janela nao existe\n\n");
system("pause");
goto ini;
}
GetWindowThreadProcessId(janela,&pid);
}
//abrir processo pelo pid
else if(op == 2)
{
system("cls");
slogan();
printf("Digite o pid: ");
scanf("%ld",&pid);
}
//sair
else if(op == 0)
{
break;
}
//opçao invalida
else
{
printf("\nERRO: opcao invalida \n\n");
system("pause");
goto ini;
}
//abre o processo
proc = OpenProcess(PROCESS_ALL_ACCESS,0,pid);
if(!proc)
{
printf("\nERRO: processo nao existe \n\n");
system("pause");
goto ini;
}
//menu da memoria
ini2:
system("cls");
slogan();
printf("pid: %ld\n\n",pid);
printf("1 - Ler o endereco\n");
printf("2 - Escrever no endereco\n");
printf("3 - Alocar espaco na memoria\n");
printf("4 - Dumpar endereco\n");
printf("5 - Pesquisar string\n");
printf("6 - Injetar dll\n");
printf("9 - Voltar\n");
printf("0 - Sair\n\n");
printf("> ");
scanf("%d",&op2);
fflush(stdin);
//ler o endereço de memoria
if(op2 == 1)
{
system("cls");
slogan();
printf("Digite o endereco (dec): ");
scanf("%ld",&end);
fflush(stdin);
ReadProcessMemory(proc,(LPVOID)end,(LPVOID)texto,sizeof(texto),0);
printf("\n%s\n\n",texto);
system("pause");
goto ini2;
}
//escreve na memoria
if(op2 == 2)
{
system("cls");
slogan();
printf("Digite o endereco (dec): ");
scanf("%ld",&end);
fflush(stdin);
printf("Digite o texto: ");
gets(texto);
WriteProcessMemory(proc,(LPVOID)end,(LPVOID)texto,sizeof(texto),0);
printf("\n\n");
system("pause");
goto ini2;
}
//aloca espaço na memoria
if(op2 == 3)
{
system("cls");
slogan();
printf("Digite o tamanho: ");
scanf("%ld",&tam);
aloc = VirtualAllocEx(proc,0,tam,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
printf("\n\nEndereco: %ld (0x%x)",aloc,aloc);
VirtualFreeEx(proc,aloc,tam,MEM_RELEASE);
printf("\n\n");
system("pause");
goto ini2;
}
//faz um dump de um determinado endereço
if(op2 == 4)
{
system("cls");
slogan();
printf("Digite o endereco inicial: ");
scanf("%ld",&end);
printf("Digite o endereco final: ");
scanf("%ld",&end2);
tam2 = end2 - end;
arq = fopen("ftsdump.txt","ab");
while(cont <= tam2)
{
ReadProcessMemory(proc,(LPVOID)end,(LPVOID)texto,sizeof(texto),0);
fprintf(arq,texto);
end += strlen(texto) + 1;
cont += strlen(texto);
}
fclose(arq);
system("pause");
goto ini2;
}
//procura string
if(op2 == 5)
{
system("cls");
slogan();
printf("Digite o endereco inicial: ");
scanf("%ld",&end);
fflush(stdin);
printf("Digite o endereco final: ");
scanf("%ld",&end2);
fflush(stdin);
printf("Digite a string: ");
gets(texto2);
fflush(stdin);
tam2 = end2 - end;
while(cont <= tam2)
{
ReadProcessMemory(proc,(LPVOID)end,(LPVOID)texto,sizeof(texto),0);
st = strstr(texto,texto2);
if(st)
{
printf("texto encontrado no endereco: %ld (0x%x)",end + (st - texto),end + (st - texto));
break;
}
end++;
cont++;
}
system("pause");
goto ini2;
}
//injetar dll
if(op2 == 6)
{
system("cls");
slogan();
printf("Digite a dll: ");
gets(texto);
aloc = VirtualAllocEx(proc,0,strlen(texto) + 2,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
WriteProcessMemory(proc,(LPVOID)aloc,(LPVOID)texto,sizeof(texto),0);
VirtualFreeEx(proc,aloc,strlen(texto) + 2,MEM_RELEASE);
hmo = GetModuleHandle("KERNEL32");
func = GetProcAddress(hmo,"LoadLibraryA");
CreateRemoteThread(proc,0,0,(LPTHREAD_START_ROUTINE)func,aloc,0,0);
printf("\ndll injetada com sucesso\n\n");
system("pause");
goto ini2;
}
//volta para o primeiro menu
if(op2 == 9)
{
goto ini;
}
//sair
else if(op2 == 0)
{
exit(0);
}
//opçao invalida
else
{
printf("\nERRO: opcao invalida \n\n");
system("pause");
goto ini2;
}
}
}
//slogan principal
void slogan(void)
{
printf("==============================\n");
printf(" FTS MEM TOOLS \n");
printf("==============================\n\n");
}