- Como os travamentos do Explorer aumentaram muito, ao investigar a causa foi encontrado na pilha um ponteiro de função parecido com o de um malware
- Depois de investigar, descobriu-se que não era malware, e sim um uninstaller
- Quando o uninstaller termina, ele fica esperando para apagar seu próprio binário (Self Deleting)
- Esse código usava um método apresentado no CodeProject há 10 anos
- Provavelmente precisava chamar a função de alguma DLL, mas isso acabou sendo desviado (
Detour), causando o problema
- Para se apagar, em vez de fazer injeção de código ou desvio em outro processo (Explorer), use um arquivo temporário como
cleanup.js, como abaixo
- Esse código apaga a si mesmo e também tenta apagar o uninstaller por 20 segundos
var fso = new ActiveXObject("Scripting.FileSystemObject");
fso.DeleteFile("C:\\Users\\Name\\AppData\\Local\\Temp\\cleanup.js");
var path = "C:\\Program Files\\Contoso\\contoso_update.exe";
for (var count = 0; fso.FileExists(path) && count < 40; count++) {
try { fso.DeleteFile(path); break; } catch (e) { }
WSH.Sleep(500);
}
5 comentários
Lembro daquela época em que eu usava programas para remover resíduos... Ainda assim, hoje em dia até o Windows está melhorando aos poucos seus gerenciadores de pacotes, então estou otimista. +_+
Acho que usaram muito a expressão "altamente". Ciência suficientemente avançada é indistinguível de magia.
O título do texto vem de uma frase do famoso escritor de ficção científica Sir Arthur C. Clarke.
Opinião do Hacker News
LD_PRELOADdo Linux