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