Monitorando o Registry

Started by OnlyOne, 27 de April , 2006, 02:08:19 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

OnlyOne

Monitor do Registry do Windows

Bom , este e um simples programa feito para monitorar o registro do
windows , a funçao dele e informar quais valores foram adicionados ou
removidos no Registry , em determinadas chaves q o programa monitora
por padrao as chaves monitoradas sao aquelas mais comuns onde sao
inseridos valores para iniciar programas no Windows :

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
                         
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
                         
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
                       
HKCU\Software\Microsoft\Windows\CurrentVersion\Run

mas vc pode tb especificar alguma chave para o programa monitorar
bastando para isso informar esta chave no arquivo de configuraçao q se
chama "chaves.txt" exemplo :

-------------------arquivo chaves.txt---------------------------------

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run                     
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
HKCU\Software\Microsoft\Windows\CurrentVersion\Run

-----------------------------------------------------------------------

basta q vc digite as chaves uma embaixo da outra q o programa passara
entao a vigia-las , este arquivo de configuraçao deve estar no mesmo
diretorio do programa ,  ok ?



--------------------Alguns detalhes----------------------------------

1- este programa apenas vai informar a vc sobre alguma alteraçao , ele
nao remove ou adiciona valores ao registry , vc tera q fazer esta
tarefa !

2 - como eu disse acima , vc sera informado de adiçoes ou remoçoes de
valores nas chaves monitoradas , se algum valor for ALTERADO , o
programa primeiro vai dizer a vc q um valor foi adicionado , depois vai
dizer q o valor antigo foi removido exemplo :

em HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run foi adicionado o

valor:

nome   tipo  dados
VALOR1 RG_SZ 1213456789

vc sera informado desta adiçao

depois este VALOR1 foi modificado

nome   tipo  dados
VALOR1 RG_SZ 000000000

o programa vai dizer a vc q :

VALOR1 RG_SZ 1213456789 -> foi removido

VALOR1 RG_SZ 000000000 -> foi adicionado

ok ?

vamos ao codigo da aplicaçao




import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.io.*;

/**********************************************************************

********/

public class monitor extends JFrame{

private int i,k;
private Vector base,val,reg;
private File f;
private boolean ok = false,arq = false;

private String keys[] =

{"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",                     "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce",
"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnceEx",
"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"};


/** construtor */

public monitor(){

try{

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
 SwingUtilities.updateComponentTreeUI(this);

}catch(Exception look){}

base = new Vector ();
val = new Vector ();
reg = new Vector ();

f = new File("chaves.txt");

if(f.exists()){

String aux = "";

try{

BufferedReader br = new BufferedReader(new FileReader("chaves.txt"));

while( (aux = br.readLine()) != null){
 leRegistro(aux);
  reg.addElement(new String(aux)); }

br.close();

}catch(Exception f){}

arq = true; }

if(arq == false){
 for(i = 0 ; i < keys.length ; i++){
  leRegistro(keys); }  }

for(i = 0 ; i < val.size() ; i++){
 base.addElement(val.elementAt(i)); }

for(;;){

val.removeAllElements();
String a = "" , b = "";

try{ Thread.sleep(3000); }catch(Exception e){}


if(arq == false){
 for(i = 0 ; i < keys.length ; i++){
  leRegistro(keys); }  }
   else {
    for(i = 0 ; i < reg.size() ; i++){
     leRegistro(reg.elementAt(i).toString()); } }


//valor adicionado
for(i = 0 ; i < val.size() ; i++){
 a = val.elementAt(i).toString();

for(k = 0 ; k < base.size() ; k++){
 b = base.elementAt(k).toString();
  if(a.equals(b))ok = true; }

if(ok == false){
 alerta("Um novo valor foi adicionado ao registro\n",a.trim());
  base.addElement(new String(a)); }

ok = false;

}
//valor adicionado

ok = false;


//valor removido
for(i = 0 ; i < base.size() ; i++){
 a = base.elementAt(i).toString();

for(k = 0 ; k < val.size() ; k++){
 b = val.elementAt(k).toString();
  if(a.equals(b))ok = true; }

if(ok == false){
 alerta("Valor removido do registro\n",a.trim());
  base.remove(i); }

ok = false;

}
//valor removido

ok = false;

}//for

}//end of constructor


/** Metodos

*******************************************************************/

public void leRegistro(String key){

String cmd = "REG QUERY " + key;
String aux = "";

try{

BufferedReader br = new BufferedReader(
                    new InputStreamReader(
                    Runtime.getRuntime().exec(cmd).getInputStream()));

while( (aux = br.readLine()) != null){

if(aux.length() == 0)continue;
if(Character.isWhitespace(aux.charAt(0)) == false)continue;

val.addElement(new String(key + ":" + aux.trim())); }

br.close();

}catch(Exception a){ System.out.println(a.getMessage());}

}//end of leRegistro


public void alerta(String f , String a){

String h = "";

for(int i = 0 ;  i < a.length() ; i++){
 if(Character.isWhitespace(a.charAt(i))){ h += " "; continue;}
   else h += a.charAt(i); }

String vet[] = new String[2];
StringTokenizer st = new StringTokenizer(h,":");
int j = 0;

while(st.hasMoreTokens()){
 vet[j] = st.nextToken();
  j++; }

JOptionPane.showMessageDialog(this,f + "Chave\n" + vet[0] +

"\nNome/Tipo/Dados\n" + vet[1],"Alerta",JOptionPane.WARNING_MESSAGE);

}//end of alerta

/** Main

**********************************************************************/

public static void main(String args[]){ new monitor(); }//end of main

}//end of class monitor







                        Only
                        n
                        e


The power of JAVA
No céu toca Joy Division