-->

sábado, 4 de abril de 2009

O propósito da extensão .local

Na segunda parte da minha análise do vírus Wplugin apresentei duas questões que na época ficaram sem resposta:
  • Por que o vírus criou um arquivo chamado "explorer.exe.local"?
  • Como o vírus fez para a ws2help.dll infectada ser carregada no lugar da legítima?
Hoje eu descobri que as duas coisas estão relacionadas.

A extensão .local é um "redirecionador de DLLs". O conteúdo do arquivo é irrelevante (pode até ter zero bytes) e sua mera existência faz com que o Windows procure primeiro qualquer DLL chamada pela aplicação dentro do diretório da aplicação, mesmo que a aplicação declare um caminho explícito para a DLL.

No caso, o vírus colocou uma cópia infectada de ws2help.dll no mesmo diretório que explorer.exe e criou um arquivo explorer.exe.local. No próximo boot explorer.exe tentou carregar %windir%/System32/ws2help.dll, mas por causa da presença de explorer.exe.local, a cópia infectada foi carregada em seu lugar.

As DLLs listadas em KnownDLLs (veja no Process Explorer) não podem ser redirecionadas, mas infelizmente ws2help.dll não está nesta lista.

Talvez seja o caso de incluí-la :)

   

3 comentários:

  1. Você não sabe como essa da estensão .local vai me quebrar um galho pra tentar consertar uns bugs de um programa aqui, no caso o miranda-im. Tem alguns plugins de terceiros que insistem em chamar alguns pontos inexistentes em DLLs. Minha ideia, copiar as DLL correspondentes na pasta do programa (talvez copiar do windows xp ou vista) e usar a extensão local para forçar o programa a usar estas dll ao invez da que estão lá no system32.

    E as dll que eu quero redirecionar eu já verifiquei e não estão lá em KnownDLLs.

    Digamos que essa dica veio MUITO a calhar!

    ResponderExcluir
  2. Luciano,

    Você esqueceu de mencionar que você vai precisar disso porque usa o Windows 2000 (e esses plugins provavelmente esperam DLLs do XP ou mais novas).

    Eu sei que você usa o 2K, mas outros leitores não vão entender se não souberem.

    ResponderExcluir
  3. Ah sim, me esqueci desse detalhe, eu realmente uso o windows 2000 professional. No caso eu copiei as dll (todas) de runtime do microsoft C e C++, e mais algumas raptadas de uma instalacao do windowx xp, todas para a pasta do miranda e forcei a barra colocando um arquivo vazio como o nome miranda-im.exe.local

    Por enquanto esta tudo bem e os bugs pararam.

    Somente duas DLLs que eu tentei que nao deram certo porque eu ja imaginava que elas chamem outras dlls que eu nao copiei e/ou pontos inexistentes no registro. A titulo de curiosidade foi a ntdll.dll e a kernel32.dll

    ResponderExcluir

Siga as regras do blog ou seu comentário será ignorado.