#manutenção
O cliente chamou reportando que o computador ficava inicializando permanentemente. Chegando lá, desativei a inicialização automática e a mensagem de erro era:
Stop: c0000221
A imagem RPCRT4.dll está corrompida
Tentei o Modo de Segurança, mas nem assim entrava.
Dei boot via CD com o "mini XP" do Hiren's, renomeei o arquivo problemático e copiei no seu lugar a cópia de segurança encontrada em %windir%system32 dllcache.
Mesmo problema.
Novo boot com o mini XP. Mandei localizar todas as cópias de rpcrt4.dll no HDD do cliente. Existiam várias, de backups dos patches feitos pela MS. A cópia corrompida era de 07/10 então eu escolhi a cópia mais próxima, de 2009, e coloquei no lugar.
Problema resolvido. Ao menos por enquanto.
Eu chequei o CRC das duas cópias corrompidas de rpcrt4.dll e elas eram idênticas. Os possíveis cenários em que isso pode acontecer são complicados. Se, de alguma maneira, a versão que eu encontrei era legítima mas incompatível (fora de sincronismo) com algo instalado posteriormente, é possível que um futuro update faça o problema voltar.
Não encontrei nenhum indício evidente de vírus. A máquina vai ficar em observação.
Tempo que levei até deixar o Windows operando novamente: 25 minutos. Gastei o resto da hora a que o cliente tinha direito analisando as possíveis causas do problema.
Num caso como esse eu testaria o HD com o software do fabricante, pois já vi coisa parecida ser causada por cluster defeituoso (o cliente tinha a velha mania de desligar o computador na marra, sem ser pelo sistema operacional). O HDD Regenerator (como o Jefferson já comentou) pode resolver o problema, se for o HD mesmo.
Wagner, duas cópias distintas do mesmo arquivo deram o mesmo CRC. A probabilidade disso ocorrer por problema no HDD é, para todos os efeitos práticos, zero.
E, como eu suspeitava, o problema aconteceu de novo. O cliente disse que estava trabalhando e o PC voltou a reiniciar em loop.
Chegando lá constatei que minha modificação tinha sido revertida. Tanto a cópia de rpcrt4.dll em %windir%system32 quanto o seu backup em %windir%system32dllcache tinham voltado a ser as com data de 2010. Coloquei de novo as versões de 2009 e o PC voltou a iniciar normalmente.
No primeiro boot bem sucedido, apareceu uma mensagem dizendo que uma atualização importante havia sido instalada que havia requerido o reinício automático do sistema. Conferi a configuração e esse PC estava programado para baixar a atualizações e aplicar automaticamente todo dia às 15h. O cliente me ligara por volta das 15h30m.
Confirmado. O problema estava sendo provocado pelas atualizações automáticas. O novo rpcrt4.dll está conflitando com outra coisa instalada no PC. Não está descartada a hipóstese do conflito ser com um malware.
Deliguei as atualizações, claro. Não gosto delas mesmo.
https://jefferson-ryan.blogspot.com/2008/12/por-que-no-gosto-de-atualizaes.html
A hipótese de malware ganha força:
rpcrt4.dll causando problemas
Tamanho: 590.848
Data: 22/07/2010
CRC32: 4DF6EEE0
Compactado com Winzip fica com 589 bytes (WTF!!!!).
Fiz uma busca por cópias de rpcrt4.dll no meu PC principal. Encontrei uma de mesma data no backup de uma cliente.
Tamanho: 590.848
Data: 22/07/2010
CRC32: 1EA9F5C4
Compactado com Winzip fica com 345.680 bytes (normal).
Minha teoria no momento é que um malware está interceptando o update e substituindo o rpcrt4.dll por um "stub" de mesmo tamanho e data para não chamar atenção, que por sua vez executa o resto do malware.
Submeti o arquivo suspeito ao Virustotal, que reportou 0/42 (0%).
Muito estranho.
Além das duas cópias usuais, ainda haviam duas cópias do mesmo arquivo (mesmo CRC) em
%windir%$hf_mig$KB982802SP3QFE
%windir%SoftwareDistributionDownload79205212168b6b30197dc7641f8b512dsp3gdr
%windir%SoftwareDistributionDownload79205212168b6b30197dc7641f8b512dsp3qfe
Seria possível que a cópia em %windir%$hf_mig$KB982802SP3QFE esteja corrompida e o Windows esteja tentando reaplicá-la a cada atualização? Não sei o suficiente sobre o mecanismo de atualizações para determinar isso, mas ou o Windows está fazendo isso ou há um malware bem esperto nesta máquina.
A propósito, KB982802 é descrita aqui:
http://support.microsoft.com/kb/982802
Curiosamente, a MS cita toda a árvore genealógica de cada arquivo mas esquece de dizer o CRC.
O download do patch está aqui:
http://www.microsoft.com/downloads/details.aspx?familyid=7AD0F2CF-03DC-49A0-A16E-17FED0C01CC6&displaylang=pt-br
Apliquei manualmente o patch KB982802 e reiniciei. Nenhum problema.
Verifiquei o CRC32 do arquivo instalado: CBF3B501
Note que isso nem corresponde ao arquivo corrompido, nem ao arquivo que encontrei em meu PC. Além disso, data é ligeiramente diferente: 23/07/2010. É como se a MS tivesse feito uma correção de KB982802 um dia depois. Se você olhar com cuidado a descrição do patch verá que essa data corresponde ao "service branch" SP3QFE
Curiosamente, mesmo após o patch as cópias em
%windir%$hf_mig$KB982802SP3QFE
%windir%SoftwareDistributionDownload79205212168b6b30197dc7641f8b512dsp3gdr
%windir%SoftwareDistributionDownload79205212168b6b30197dc7641f8b512dsp3qfe
Continuaram sendo as corrompidas (4DF6EEE0)
Então o problema poderia voltar?
É importante notar que o fato do patch ter funcionado quando aplicado manualmente pode ter outra explicação. Eu precisei, por um motivo diferente, reinstalar o XP SP3 nesta máquina. Isso pode ter eliminado o possível malware que estivesse aqui.
Status do problema: ainda um mistério. Vou parar a análise por enquanto, até que apareça um fato novo.
Eu tenho a mania "feia" de testar HD e memórias RAM toda vez que pego um micro, mesmo que seja para fazer uma simples modificação no sistema operacional. Mas nesse caso realmente é estranho ele copiar novamente o arquivo no lugar do outro que tu copiou. Dependendo do cliente (e do uso do micro), eu levaria a máquina pra casa e rodaria uns dois ou três anti-vírus de uma máquina minha e por fim o Spybot e o Spyware Terminator (recomendo). Além dos habituais ComboFix, SmitFraudFix e BankerFix. Essa reinstalação do SP3 em máquinas que removi alguns vírus, também já resolveu problemas pra mim.
Um duvida que fiquei, se ele tava reiniciando sem parar como você desabilitou a reinicialização automática?
Se você der F8 para entrar no menu de inicialização, uma das opções é "desativar reinicialização…"
Só funciona por um boot. Você tem que ficar repetindo, se necessário. Mas na primeira vez que eu consigo entrar no Windows já desativo permanentemente.
Valeu, essa eu não conhecia.