Conceitos sobre Registro do Windows #2

Vou continuar a série sobre o Registro do Windows com um artigo um pouco mais avançado. O primeiro era bem básico, depois que postei fiquei até com vergonha. É claro que quem não está acostumado a mexer no Registro obviamente não sabia daqueles termos, mas chamar o post anterior de artigo é demais também...

Neste, vou apresentar (e ensinar como funciona) um programinha pequeno, leve, simples e absurdamente útil. Este eu carrego, juntamente com outras "pérolas", no meu CD de emergência (enquanto não consigo um pendrive...). Trata-se do RegShot.

A idéia por trás dele é bem simples: comparar dois estados do Registro e descobrir o que foi alterado entre esses dois pontos. Ainda não convenci da utilidade dele? Pois bem, vou explicar melhor.

Antes de aprofundar no programa, uma breve explicação que deveria ter vindo no primeiro artigo.

A grande maioria das configurações no Windows fica armazenada na estrutura do Registro, que foi apresentada anteriormente. A idéia dele foi centralizar os antigos arquivos .INI num único local. Pra quem não lembra deles, essa era a forma que o Windows, até a versão 3.11 se não me engano (precisava pesquisar mais... mas acredito que somente depois do 3.5 o Registro foi criado), guardava as configurações dos programas. Existiam rotinas simples para ler e gravar essas configurações, tais como existem hoje os métodos RegRead e RegWrite no Windows Script Host. Com o Registro, tudo fica centralizado, facilitando o backup e o melhorando a velocidade de acesso às informações, por exemplo. Sob o meu ponto de vista, ele também tem seus pontos negativos, mas, de uma forma simplificada, é isso.

O problema é que, assim como nos arquivos .INI, a documentação sobre o que significa cada entrada (chave, valor e dado, juntos) é praticamente inexistente, uma vez que depende em grande parte dos fabricantes dos softwares e não da Microsoft. Somente as entradas relacionadas ao SO realmente são de responsabilidade da MS e boa parte delas está documentada, de forma espalhada, em portais de produtos, em sites como o MSDN e Technet.

Descobrir então onde é necessário alterar o Registro quando se precisa implantar alguma alteração em várias máquinas (uma rede corporativa, por exemplo) torna-se um parto. Vou citar alguns exemplos bem comuns e que boa parte de vocês já deve ter passado:

  • Alteração das datas de início e término do Horário Brasileiro de Verão. Como no Brasil sempre muda a data, a solução oficial recomendada pela Microsoft é alterar no registro de todas as máquinas. Já escrevi sobre isso há um tempo atrás.
  • Alterar a cor de fundo do papel de parede de computadores na rede. Trocar o azul tradicional por um preto, que emite menos luz, por exemplo. Vale para a cor de fundo e para o próprio papel de parede... (G. Kaneto)
  • Alterar o registro de várias máquinas para configurar a utilização de autenticação em redes comuns (A. Leal)
  • Remover um serviço instalado por um vírus, por exemplo, em larga escala, sem precisar de nenhum Antivírus. Dá trabalho, e precisa perder algum tempo "pegando o vírus na mão" e testando em várias máquinas virtuais pra saber como ele funciona antes de criar um "remédio" para ele. Inviável quando você não tem muito tempo e não pode ficar muito tempo parado com isso, mas extremamente útil na janela de tempo entre a infecção na sua rede e o lançamento de uma definição de vírus por parte da empresa de Antivírus.
  • E por aí vai...

Todas essas situações dependem de duas ações muito simples.

  1. Descobrir qual entrada foi criada/alterada/removida
  2. Criar um script para fazer o mesmo ou desfazer a alteração
  3. Testar
  4. Colocar para ser executado

O RegShot, nesse caso, resolve o primeiro ponto. Tudo que você precisa é bater uma foto (snapshot, na interface do programa), fazer a alteração manualmente, bater a segunda foto, comparar e analisar o resultado. Com os dados em mãos você pode criar um script (WSH ou Powershell, as soluções mais indicadas) ou simplesmente exportar um arquivo .REG para ser aplicado em várias máquinas, que é uma solução mais rápida.

Abaixo, tenho a tela inicial do programa

Ele é simples. Você pode configurar qual o formato de saída (HTML ou TXT), pedir que ele verifique também por alterações em um diretório e subdiretórios. Pode também configurar onde vai ficar o arquivo de saída e colocar um comentário nele... Isso eu nem precisava dizer, uma vez que ele tem uma interface em Português também.

Do lado direito, há botões que você vai usar para bater as fotos e comparar. Obviamente, somente o primeiro botão fica habilitado de início. Você bate a primeira foto, realiza as alterações que quer monitorar, depois bate a segunda e na sequência, compara.

O que impressiona é a velocidade. Esse, sem dúvida nenhuma, é o mais rápido programa que eu já vi para fazer esse tipo de coisa (já vi outros, mas nenhum tão rápido quanto). No meu P4 1.8 512MB RAM, varrer o registro todo demora menos de 30 segundos. Se você considerar que ele é uma base de dados considerável, esse tempo é quase nada...

Depois da comparação, você precisa analisar o resultado. Aqui vão algumas dicas:

  • O resultado do RegShot é bem abrangente. Ele pega exatamente a diferença entre os dois pontos, e frequentemente você encontra muito mais entradas alteradas do que realmente precisa. Algumas delas são alteradas por outros programas rodando simultaneamente no computador, e nada tem a ver com a alteração que você fez e quer monitorar. Saiba diferenciar isso. Treinos, e várias fotos ajudam a se acostumar.
  • Tome cuidado com o tipo de alteração que está procurando. Se for uma alteração global, procure por entradas que comecem por HKLM (HKEY_LOCAL_MACHINE), que correspondem à porção do registro que contém a configuração da máquina como um todo, incluindo programas instalados e hardware. Configurações do usuário (papel de parede, por exemplo), ficam abaixo de HKCU (HKEY_CURRENT_USER) e a correspondente em HKU.
  • Só complementando: o RegShot captura alterações do usuário na chave HKU\{SID_DO_USUÁRIO}. Se for criar um .REG ou um script, tenha em mente trocar isso por HKEY_CURRENT_USER. Como o próprio nome indica, essa chave-raiz é um "ponteiro" pra porção do registro do usuário logado atualmente. Se você não fizer isso, vai ter um script que altera dados somente em um usuário no domínio inteiro.
  • Parece óbvio, mas a gente esquece (especialmente eu). Quando quiser monitorar uma alteração global no computador, lembre de executar o RegShot também como administrador. Se não fizer isso, pode ser que o RegShot não consiga acesso às chaves alteradas e, consequentemente, não vai mostrá-las no log.
  • Existem ainda algumas chaves que não podem nem ser acessadas pelo Administrador. Consequentemente, nem o RegShot vai conseguir abrir... muito menos monitorar. São casos raros, e se você tiver idéia de qual chave está sendo acessada, (você pode descobrir isso com outros programas, que irei abordar no próximo artigo), basta abrir o acesso à ela no registro. Funciona de forma semelhante às permissões NTFS.

Bom, é isso. Se tiverem dúvidas, perguntem... Mais pra frente explico mais sobre o que é HKLM, HKCU, HKU, HKCR e todas as outras siglas... além de programinhas interessantes como esse.

 

Até mais!

Categorias dessa postagem:

Comentários

Luciano Queiroz. : um sonho realizado
sempre quis saber mais sobre o ssunto hermetico sobre registro ..
parabens e obrigado aguardo mais novidades !!!
sds [27/5/07 16:23 - link]

Vinicius Canto : Olá,


obrigado pelo comentário. Em breve escreverei mais sobre o assunto.


[]s,

Vinicius [4/6/07 09:26 - link]

Anônimo : Fala Vinicius. Não conhecia seu blog. Po a pesquisa na internet é fascinante pq se vc não salvar o endereço vc não volta ao mesmo lugar duas vezes. Bom sobre o registro do Windows me fascina pq sempre penso em melhorar o desempenho dele e logicamente do Windows em si mesmo q seja manualmente. Confesso q já apanhei e apanho dele ainda (como reinstalar o Windows) mas hj com pouco mais de experiência a gente se vira como pode. Bom eu uso o Vista aqui em casa e o registro continua igual até para ver ter compatibilidade com os sistemas anteriores do Windows (como XP e 2000 além dos 9.x). Mas li num site em q o B. Piropo escreveu (não tenho o link para informar) que o registro deve voltar a ser individual como cada configuração de chave como HKLM (HKEY LOCAL MACHINE) será salvo em um arquivo, ou seja, o registro será descentralizado e cada chave será salvo num arquivo específico q na minha opinião é boa contra vírus, trojans e etc., mas uma desvantagem será qdo o tamanho dos arquivos ficar enorme tipo 50, 100, 300 MB ou até 1GB. [13/8/07 02:12 - link]

Anônimo : Fala Vinicius tudo tranquilo? Po tem como vc me mandar umas dicas de como ser profissional em T.I.? Desculpe usar seu blog pra pedir umas dicas q nem tem nada a ver com o assunto. Qualquer coisa vc manda um e-mail pra mim: lgomesroc@hotmail.com
Falou!!!!!
PS: Sobre o comentário do registro fui eu q coloquei. Valeu!!! [13/8/07 10:19 - link]

Vinicius Canto : Olá Luciano,

eu acho difícil. O Registro por si só é meio controverso. Há desenvolvedores na MS que acreditam que ele não tenha sido realmente uma boa idéia.
Por um lado, ele serviu pra substituir a tonelada de arquivos .ini que existiam até o Windows 3.5. Isso deu mais velocidade e segurança, uma vez que o o backup fica mais interessante. Por outro lado, por ser centralizado, uma falha (arquivo corrompido, por exemplo) pode afetar o SO inteiro. Além disso, ele não é bem documentado e os programadores em geral não sabem usá-lo bem. Eu, particularmente, ele tem mais a ajudar do que a prejudicar, dado que o acesso ao disco é algo realmente mais lento que o acesso à RAM.
Sobre a descentralização, eu acho improvável. Os arquivos já são estruturados de uma forma lógica. O Registro global fica no system.dat, e só admins podem escrever, cada usuário tem seu user.dat com opções dele. Da mesma forma que o /proc no *nix, ele também tem uma parte volátil... é bem eficiente da forma como foi projetado. O problema, nesse caso, é a forma como ele é utilizado.

[]s,

Vinicius [14/8/07 14:27 - link]

Anônimo : Olha para ser sincero, o Registro do Windows só se tornou seguro com a popularização do sistema de arquivo NTFS porque o FAT 16 e FAT 32 sempre corrompia o arquivo system.dat (se não me engano) e sempre tinha q fazer backup ou então reinstalar o S.O. Sempre haverá vantagens e desvantagesn sobre qualquer coisa e nem tudo é 100% a prova de falhas. Posso concordar com vc q 98% de problemas q acontece no Registro do Windows é parte dos usuários. Agora o que me deixa mais chateado é ter q retirar lixo. A Microsoft tinha um software chamado RegCleaner que varria o Registro atrás de erros e corrigia. Mas não sei o pq que ela própria descontinuou esse software. Agora não entendi sobre o system.dat e user.dat que administradores e usuários podem modificar. Valeu! [15/8/07 10:08 - link]

Vinicius Canto : Então... sobre o "lixo" no registro eu discordo. O "lixo" que vc se refere são somente chaves, valores e dados que não são usados mais, mas permanecem por lá.

O lixo, nesse caso, não é criado nem pelo próprio SO, nem pelo registro sozinho. As chaves que ficam "sem dono" lá e passam a ser inúteis são criadas por programas que você instala e remove. A grande maioria dos programas é criada por programadores que não se preocupam em remover (durante a desinstalação) todas as chaves que eles utilizam. Isso faz com que, com o tempo, o registro fique inchado, com chaves inúteis.

Isso ocorre também com arquivos... vários programas instalam DLLs nas pastas do sistema e nào os removem depois. Ocorre também no Linux, caso o programa não tenha um desinstalador decente. É independente de SO isso, porque nem todo mundo se preocupa em fazer o trabalho bem feito, infelizmente...

O que a MS fez foi tentar acabar com isso criando um programa que procura referências inválidas por si só e as remove caso não estejam sendo usadas mais. O problema é decidir o que é inútil e pode ser apagado... não há como fazer isso nem em 10% dos casos.

[]s,

Vinicius [15/8/07 11:55 - link]

Anônimo : Hehehe. Fala Vinícius a discussão tá boa cara. No bom sentido. Po é aonde quero chegar vc sabe de algum scrpit (quero aprender com vc sobre PowerShell dá uma ajuda?) ou programa (que seja decente e remove mesmo) chaves do Registro como um [b]TODO[/b], ou seja, as sub-chaves de [b]TODAS[/b] as chaves q contém o Registro. Não sei se expliquei direito se não me fale!!!! Ah po vc não respondeu a minha solicitação para dar umas dicas de como ser um profissional em T.I. Você pode me ajudar??? [16/8/07 02:48 - link]

Anônimo : Po esqueci de falar q quanto aos arquivos q vc citou que ficam sujeira tem o CleanSweep da Symantec e é bom porque ele te avisa quais arquivos DLLs que você pode excluir. Verde (pode escluir sem preocupação segundo o programa); amarelo (atenção ao excluir); vermelho (não é recomendado excluir). Salvo que se você for excluir crie um backup e reinicie. Se der certo aí vc exclue o backup se não der certo recoloca os arquivos nos lugares de origem!!! [16/8/07 02:53 - link]

Vinicius Canto : Sobre como se tornar um profissional de TI, a regra é muito simples: estude. Há centenas de artigos na Internet e em revistas (uns bons, outros nem tanto... principalmente nessas revistas que se dizem "especializadas" mas nenhum dos profissionais que escrevem nela tem formação na área de TI).

Você pode estudar para obter certificações, para entrar em uma universidade boa, ou começar trabalhando num estágio mesmo, para adquirir experiência. Eu já passei pelos três, e hoje estou terminando meu curso de graduação. Dessas três, fico com a universidade. Ela é a única que dá base de verdade pra aprender qualquer tecnologia futura.

Sobre o CleanSweep, ele é muito "user-friendly" pro meu gosto, nõa é uma ferramenta profissional. Além do mais, é só em computador doméstico que você vai sentir necessidade de usar um programa desses. No dia-a-dia de uma empresa com um setor de TI organizado, todas as aplicações necessárias são instaladas e configuradas logo após a instalação. E depois, nada mais é alterado, com exceção dos patches de securança, claro. [18/8/07 10:06 - link]

Anônimo : Ola! Muito bom teu blog. Este assunto do Registro é muito interessante e pouco divulgado, principalmente por que entente como voçe. Deixo aqui meu obrigado pelas esplicações. Um abraço... [8/11/08 15:30 - link]

Vinicius Canto : Obrigado pelo comentário.


Um abraço! [17/11/08 23:46 - link]

Anônimo : Muito tenho lido sobre o Regedit, mas não encontrei nada sobre a maneira de controlar a tela de entrada numa rede de Pcs.
É um problema quando falta a energia e o PC fica á espera da password para entrar na rede.
A maneira creio eu, seria criar uma chave no registo com o nome da password para assim ele avançar.
É possível fazer isso?
Alvaro [31/12/08 08:21 - link]