"Keylogger/Spyware" em Java

Como faço em Java para saber se existe algum programa aberto sendo utilizado (que não esteja oculto na barra de ferramentas)? Preciso criar um programa para saber o tempo que meu irmão fica no computador, esse programa vai iniciar junto com sistema (windows ou linux), mas oculto e vai gravar o tempo que ele usa qualquer aplicativo.

Obs.: não é nenhum programa de cracker :slight_smile:

Java não é a linguagem mais adequada para se desenvolver isso. Procure uma linguagem com integração com o SO, como o C++.

Infelizmente, esse não é o tipo de programa fácil de fazer.

[quote=ViniGodoy]Java não é a linguagem mais adequada para se desenvolver isso. Procure uma linguagem com integração com o SO, como o C++.

Infelizmente, esse não é o tipo de programa fácil de fazer.[/quote]

Já encontrei no fórum programas semelhantes ( http://www.guj.com.br/java/109811-java-keylogger ) que capturavam o que o usuário digitava, sem o programa esta com o foco, gostaria apenas de saber quais programas estão em uso, se alguém puder me ajudar?

Será que conseguiria fazer em Bash/Shell Script?

Se voce realmente quer um kl apenas para colocar no pc do seu irmão,
pq nao usa um ja existente ?

naaaaaaaa minha epocaaaaaaaaaaaaa a unss bons anos atrás
eu cheguei a usar o ardamax… nao sei qual esta em alta hoje em dia

abrazz

bbb

[quote=d34d_d3v1l]Se voce realmente quer um kl apenas para colocar no pc do seu irmão,
pq nao usa um ja existente ?

naaaaaaaa minha epocaaaaaaaaaaaaa a unss bons anos atrás
eu cheguei a usar o ardamax… nao sei qual esta em alta hoje em dia

abrazz[/quote]

Será que consigo saber o tempo de utilização com o ardamax??

[quote=ViniGodoy]Java não é a linguagem mais adequada para se desenvolver isso. Procure uma linguagem com integração com o SO, como o C++.

Infelizmente, esse não é o tipo de programa fácil de fazer.[/quote]

Em Delphi é tranquilo de fazer. Deve ter uma dezenas de exemplos, é só monitorar os processos!
Realmente java não é muito apropriado para isso por que vai ter que usar as funções da API Windows. Até da para fazer, mas vai dar o triplo do trabalho.

Ola, se você está precisando de saber quais programas estão abertos talvez você possa pegar isso do gerenciador de tarefas, eu fiz algum tempo um programa simples que mostra todos os processos sendo executados no windows, talvez possa te ajudar em algo, dai é so implementar algo pra ir salvando em arquivos com os horários. Segue o codigo:

package processoswindows;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Main extends Thread {

    @Override
    public void run() {
        try {
            do {
                verificaProcesso();
                Thread.sleep(5000);
            } while (true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void verificaProcesso() {
        Runtime runtime = Runtime.getRuntime();
        Process process;
        try {
            process = runtime.exec("cmd /c tasklist");
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

            StringBuilder processesStr = new StringBuilder();
            String line;

            while ((line = reader.readLine()) != null) {
                processesStr.append(line);
                processesStr.append("\n");
            }
            System.out.println(processesStr);
        } catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static void main(String[] args) {
        Main m = new Main();
        m.start();
    }
}

que legal o código wagne23 , interessante…

Sobre o ardamax, o que vc quiz dizer sobre:

não entendi

[quote=wagne23]Ola, se você está precisando de saber quais programas estão abertos talvez você possa pegar isso do gerenciador de tarefas, eu fiz algum tempo um programa simples que mostra todos os processos sendo executados no windows, talvez possa te ajudar em algo, dai é so implementar algo pra ir salvando em arquivos com os horários. Segue o codigo:

package processoswindows;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Main extends Thread {

    @Override
    public void run() {
        try {
            do {
                verificaProcesso();
                Thread.sleep(5000);
            } while (true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void verificaProcesso() {
        Runtime runtime = Runtime.getRuntime();
        Process process;
        try {
            process = runtime.exec("cmd /c tasklist");
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

            StringBuilder processesStr = new StringBuilder();
            String line;

            while ((line = reader.readLine()) != null) {
                processesStr.append(line);
                processesStr.append("\n");
            }
            System.out.println(processesStr);
        } catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static void main(String[] args) {
        Main m = new Main();
        m.start();
    }
}

[/quote]

Obrigado wagne23, dei uma melhorada no código, ainda não resolveu meu problema, deu para ter uma noção, se alguém tiver ainda alguma ideia de como fazer, eu agradeço

[quote=d34d_d3v1l]que legal o código wagne23 , interessante…

Sobre o ardamax, o que vc quiz dizer sobre:

não entendi[/quote]

d34d_d3v1l, quero quais são os programas abertos (que não esta ocultos na barra de tarefas) e quanto tempo ele está aberto, acho que o Ardamax é mesmo para capturar entradas do usuario, que não é o que eu quero.

Acho que vou fazer mesmo em Bash/Shell Script, mas se alguém tiver alguma ideia de como fazer em Java…

eu sei que
de tempo em tempo (vc programa)
o ardamax envia uma print screen da tela do pc…

entao se isso for util […]

[quote=jorgyan][quote=d34d_d3v1l]que legal o código wagne23 , interessante…

Sobre o ardamax, o que vc quiz dizer sobre:

não entendi[/quote]

d34d_d3v1l, quero quais são os programas abertos (que não esta ocultos na barra de tarefas) e quanto tempo ele está aberto, acho que o Ardamax é mesmo para capturar entradas do usuario, que não é o que eu quero.

Acho que vou fazer mesmo em Bash/Shell Script, mas se alguém tiver alguma ideia de como fazer em Java…[/quote]
Pela api do windows você consegue ver quais “janelas” estão abertas, mas não consegue ele não informa o tempo de abertura!
O correto é seria você criar um serviço que monitora-se as “janelas abertas” e quanto tempo elas ficaram abertas!
Como já foi dito Java não é a linguagem ideal para fazer isso. Em Delphi você consegue fazer isso facilmente.

Quando um programador verifica que um paradigma ou uma linguagem não é a mais adequada ao domínio do seu problema e muda seu sistema utilizando um outro paradigma ou outra linguagem ele deixa de ser um programador para se tornar um desenvolvedor de software.

Todo o “Desenvolvedor de Software” conhece mais de uma linguagem. Para um desenvolvedor de software uma nova linguagem com o mesmo paradigma se reduz a apreender a sintaxe dessa linguagem!

[quote=x@ndy][quote=jorgyan][quote=d34d_d3v1l]que legal o código wagne23 , interessante…

Sobre o ardamax, o que vc quiz dizer sobre:

não entendi[/quote]

d34d_d3v1l, quero quais são os programas abertos (que não esta ocultos na barra de tarefas) e quanto tempo ele está aberto, acho que o Ardamax é mesmo para capturar entradas do usuario, que não é o que eu quero.

Acho que vou fazer mesmo em Bash/Shell Script, mas se alguém tiver alguma ideia de como fazer em Java…[/quote]
Pela api do windows você consegue ver quais “janelas” estão abertas, mas não consegue ele não informa o tempo de abertura!
O correto é seria você criar um serviço que monitora-se as “janelas abertas” e quanto tempo elas ficaram abertas!
Como já foi dito Java não é a linguagem ideal para fazer isso. Em Delphi você consegue fazer isso facilmente.

Quando um programador verifica que um paradigma ou uma linguagem não é a mais adequada ao domínio do seu problema e muda seu sistema utilizando um outro paradigma ou outra linguagem ele deixa de ser um programador para se tornar um desenvolvedor de software.

Todo o “Desenvolvedor de Software” conhece mais de uma linguagem. Para um desenvolvedor de software uma nova linguagem com o mesmo paradigma se reduz a apreender a sintaxe dessa linguagem!
[/quote]

:evil: Cara, eu apenas quero criar um programa bobo (não significa que não é dificil) para monitorar o tempo que meu irmão e eu fica mexendo no computador, não que eu tenha preguiça de aprender outra linguagem, porque também concordo com sua afirmação que todo programador deve saber mais de 1 linguagem: estudo Ruby, Python, Java, PHP e Haskell, mas não quero estudar a sintaxe de uma outra linguagem só para fazer isso!

E também por mais dificil que seja acho que isso vai adicionar um conhecimento extra, para quando tiver que implementar um sistema parecido, já vai esta meio caminho andado…

O problema é que cada linguagem tem um propósito especifico, tirando Haskellq eu não conheço as outras tem um propósito específico, basicamente a internet. Então estamos em situações diferentes. A questão não é conhecer diversas linguagens, mas o propósito de cada linguagem. Se eu quero escrever uma macro para o excel não vou usar C++ e sim VBA. Cada linguagem se ajusta a um problema especifico, as que vc listou são basicamente para resolver problemas de softwares web, não que não possam fazer outras coisas, o problema seria o grau de dificuldade usando essas linguagens. Entendeu?

Com excessão de PHP, todas as linguagens que citei, não foram criadas para web, talvez, você passou a conhece-lás através de frameworks web, deveria dar uma verificada na história de cada uma.

No mais, acho que o mais provavelmente vou conseguir fazendo em Bash/Shell Script.
Alguém tem alguma sugestão?

No Linux é fácil. Experimente rodar o seguinte comando no terminal:

ps aux | grep ^$USER

Aí está a lista de programas em execução pelo usuário logado atualmente e o horário de início de cada um deles.

Isso poderia estar em um script que opcionalmente trata esses dados e direciona toda a saída desse comando para um arquivo de log.

O script poderia ser executado a cada 2 ou 5 minutos com uma entrada no crontab.

Já no caso do Windows, não faço ideia se é possível fazer algo parecido.

Pena que seja um software para você fiscalizar seu irmão, não gostaria de colaborar com isso…porém não gosto de deixar alguém com uma dúvida onde eu possa sanar

aproveitando a idéia do código que o wagne23 mostrou
troque o comando do ‘tasklist’ pelo comando abaixo:

WMIC PROCESS GET CREATIONDATE,NAME

“cmd /c WMIC PROCESS GET CREATIONDATE,NAME”

isso irá trazer o nome do processo junto com a data e o horario de quando o processo foi iniciado
exemplo:
20110219184105.796875-120 smss.exe
formato:
yyyymmddhhMMss.(não sei o que significa) |nome do processo

o comando WMIC é exclusivo do windows e funciona no Windows XP ou superior.

Acho que com isso o resto você consegue, senão por apenas alguns milhões de reais eu faço por você =p

[quote=lucasportela]Pena que seja um software para você fiscalizar seu irmão, não gostaria de colaborar com isso…porém não gosto de deixar alguém com uma dúvida onde eu possa sanar

aproveitando a idéia do código que o wagne23 mostrou
troque o comando do ‘tasklist’ pelo comando abaixo:

WMIC PROCESS GET CREATIONDATE,NAME

“cmd /c WMIC PROCESS GET CREATIONDATE,NAME”

isso irá trazer o nome do processo junto com a data e o horario de quando o processo foi iniciado
exemplo:
20110219184105.796875-120 smss.exe
formato:
yyyymmddhhMMss.(não sei o que significa) |nome do processo

o comando WMIC é exclusivo do windows e funciona no Windows XP ou superior.

Acho que com isso o resto você consegue, senão por apenas alguns milhões de reais eu faço por você =p[/quote]

Obrigado.

E Lucas Portela, não é para fiscalizar não, meu irmão sabe que eu vou fazer esse programa :slight_smile: