Keylogger

21/09/2004

Estou montado um keylogger, mas algumas funções necessárias ainda não consegui desenvolver...

1) Como oculto completamente a aplicação? (sem inclusive aquela ´piscada´ na barra de tarefas)

2) Como retorno o nome da aplicação ou da janela que está sendo logada? Para filtrar determinados programas.

3) Como envio, de forma simples, o arquivo gerado por e-mail?

Pessoal, sei que já existem várias questões sobre esse assunto, mas todas ela bem picadas ou incompletas...

Preciso monitorar determinados usuários do meu sistema...
Agradeço quem puder ajudar!


Waldemorte

Respostas

21/09/2004

Nildo

Levando em consideração que é APENAS para monitorar os usuários do sistema, para uso LEGAL, e seus usuários estando cientes diante esta situação. Mas você disse:

Preciso monitorar determinados usuários do meu sistema...


Se você precisa monitorar determinados usuários do SEU sistema, para que a necessidade em saber de qual aplicação veio a tecla pressionada?

[quote:2761977626=´Walter Neves Moll Neto´]
1) Como oculto completamente a aplicação? (sem inclusive aquela ´piscada´ na barra de tarefas)
[/quote:2761977626]
Antes das criações dos forms no seu DPR, você utiliza o comando:

Application.ShowMainForm := False;


Isso evita que seu form seja mostrado ou aquela piscada na barra de tarefas. Quanto à não aparecer no CTRL+ALT+DEL você tem que registrar sua aplicação como sendo um serviço do Windows, mas isso se for no Windows 98. De uma pesquisada no Google que você acha coisas interessantes.

[quote:2761977626=´Walter Neves Moll Neto´]
2) Como retorno o nome da aplicação ou da janela que está sendo logada? Para filtrar determinados programas.
[/quote:2761977626]

Se sua DLL for injetada em todos os processos, você pode enviar ao seu formulário, alem da tecla pressionada, o resultado da API GetCurrentProcessId. Mas se você estiver hookando as mensagens de Tecla Pressionada, creio eu que não seja possível. Mas você pode burlar isso pegando o Handle do Form que está em foco usando a API GetForegroundWindow. Já que se o cara pressionou uma tecla, quem recebe essa mensagem e vai processá-la é o formulário/aplicação que estiver no topo, no caso a API getForegroundWindow retorna o handle da janela que está no topo.

[quote:2761977626=´Walter Neves Moll Neto´]
3) Como envio, de forma simples, o arquivo gerado por e-mail?
[/quote:2761977626]

Pesquise aqui no fórum, esse assunto já foi abortado muitas vezes.
Ps.: Eu respondí sua mensagem levando em consideração que o uso deste aplicativo não é para uso maléfico, e sim para propósito educacional. Caso contrário, favor desconsiderar minha mensagem.

Um abraço


Responder Citar

21/09/2004

Waldemorte

Ow, cara! Valew memso pela ajudar, mas... Vc tem como me explicar melhor o esquema do handle?

Muito obrigado!


Responder Citar

21/09/2004

Nildo

Handle é uma identificação de um objeto. Cada objeto possui um handle diferente. O Handle de um formulário seu nunca vai ser igual a nenhum outro handle de outro formulário em todo o Sistema Operacional.
Esse handle é atribuido em tempo de execução, automaticamente pelo seu sistema operacional, e não pode ser alterado.
Você pode pegar o título da janela ativa com a seguinte função que eu fiz:

function Titulo_Janela_Ativa: PChar;
var
   Titulo: PChar;
   Tamanho: Integer;
   janela: THandle;
begin
   janela := GetForegroundWindow;
   Tamanho := GetWindowTextLength( Janela ) + 1;
   Titulo := PChar( AllocMem( Tamanho ) );
   GetWindowText( Janela, Titulo, Tamanho );

   Result := Titulo;
end;



Responder Citar

21/09/2004

Waldemorte

Cara, muito obrigado!!! Sua ajuda foi muito útil pra mim!

Consegui fazer uma boa parte do que eu precisava, agora é só enfeitar, hehehe!

Qualquer coisa, posso contar com a sua juda de novo?

Brigadão! :P


Responder Citar

21/09/2004

Nildo

Pode sim Walter. :wink:


Responder Citar