McAfee LiveSafe Lenovo: Como hackear o seu desinstalador

Esses dias eu precisei montar um script de “unattended uninstallation” para fazer a desinstalação automática do antivírus McAfee LiveSafe para em seguida colocar os programas homologados por aqui no meu trampo.

Minha surpresa depois de revirar os sites na Internet, foi descobrir que o McAfee LiveSafe não possui desinstalador automático do aplicativo.

Em outras palavras, eu teria que abrir mais de 100 máquinas, entrar no Windows, abrir o painel de controle, ir em programas e recursos, clicar no ícone do McAfee LiveSafe, abrir a tela de desinstalação, e ir manualmente clicando nos devidos botões até conseguir desinstalar o aplicativo de todos os computadores… Nem a pau, Juvenas!

Se você curtir esse artigo, e ele der um adianto no seu trampo, não esqueça de dar uns cliques nos anúncios para ver o que os anunciantes tem para te oferecer. Vou ficar muito contente.

É só um rolloutizinho

E como a gente resolve essa parada?

A gente pode resolver essa parada (sem esgotar as opções), combinando o poder do PowerShell com o bom e velho script do DOS, o tal dos arquivos “*.bat”.

Um pouco de teoria:

Antes de continuarmos:

Todos os scripts abordados aqui devem rodar como administrador, e é presumido que o técnico tem direito de administrador sobre os equipamentos, ok?

PowerShell e segurança:

Se você já mexeu com o PowerShell, sabe que por motivos de segurança o Windows não habilita por padrão a execução de scripts em PowerShell.

Se tentar rodar um script PowerShel em um computador que não esteja habilitado, ele vai dar o erro abaixo:

Erro que dá quando a execução de script não está habilitada

Isso tanto é verdade que se precisarmos executar um script de PowerShell, primeiro temos que dar o comando “Set-ExecutionPolicy RemoteSigned” no prompt do PowerShell, com seus parâmetros e alertas de segurança para depois liberar a execução de scripts.

Outro ponto importante para lembrar é que a chave “-force” dos comandos do PowerShell, só permite a execução de comandos sem confirmação, DEPOIS de termos realizado o comando “Set-ExecutionPolicy RemoteSigned”.

Em outras palavras, não dá para iniciar um script PowerShell em uma máquina bloqueada e dentro dele dar o comando para autorizar sua execução. É a mesma coisa que querer passar na ponte antes de virar o graveto!

Ganha-se em agilidade e perde-se em segurança, o eterno trade-off:

Eu diria que essa trava de segurança trata-se de um mal necessário, porque ao habilitarmos o computador a executar scripts PowerShel, que ajuda em muito a tarefa de administração de um parque de máquinas, também abre-se a vulnerabilidade do computador à execução de scripts maliciosos.

Habilitar, rodar o script e desabilitar sua execução na saída (abrir e fechar as portas):

Uma boa prática quando alguém precisar rodar um script PowerShell, seria habilitar sua execução, rodar o script e não esquecer de desabilitar a execução de scripts ao término do serviço. E aqui mando um aviso: TODO MUNDO um dia vai esquecer de desabilitar a execução de scripts se sempre tiver que fazer isso manualmente.

Entendi. Afinal, como faz para habilitar e desabilitar a execução de scripts PowerShell?

Para habilitar a execução de scripts de PowerShell, basta mandar o comando “Set-ExecutionPolicy RemoteSigned”, antes de rodar o script.

Para desabilitar a execução de scripts de PowerShell, basta mandar o comando “Set-ExecutionPolicy Default”, depois de rodar o script.

E a gente tem que dar um jeito de fazer isso programaticamente.

E é aí que entra o script do DOS e o hackeamento do McAfee LifeSave:

Cola na minha que agora você vai entender a maracutaia.

Vamos criar dois scripts, um em DOS chamado de “configura.bat” e um outro chamado de “script_powershell.ps1”, que funcionarão conforme abaixo:

  • O script “configura.bat” vai servir para habilitar e desabilitar a execução de scripts PowerShell, sem pedir confirmação de nada … ok? Sim, essa idosa linguagem de script do prompt de comando serve e pode fazer isso!
  • A gente inicia rodando o script “configura.bat” que vai habilitar a execução de scripts PowerShell.
  • Em seguida o script “configura.bat”, marotamente vai chamar o “script_powershell.ps1”.
  • O “script_poweshell.ps1” vai lá e desinstala o McAfee LiveSafe, dando uns comandos bem legais.
  • Assim que o “script_poweshell.ps1” termina o seu trabalho sujo, ele volta o controle para o script “configura.bat”.
  • O script “configura.bat” coloca a cereja do bolo, desabilitando a execução de scripts PowerShell.

Como é que fica o script “configura.bat”?

Segue o script “configura.bat”. É auto explicativo e é obvio que deve ser iniciado com direito de administrador.

echo off
cls
echo **************************************
echo ********* Instalador Windows *********
echo **************************************
echo.

REM Coloque aqui outros programas "normais" que deseja instalar ou remover em modo silent...

echo ********** Removendo McAfee **********
C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe "Set-ExecutionPolicy RemoteSigned"
C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe d:/lenovo/script_powershell.ps1
C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe "Set-ExecutionPolicy Default"
echo ********** McAfee removido ***********
echo.

Como é que fica o “script_powershell.ps1” ?

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

& 'C:\Program Files\McAfee\MSC\mcuihost.exe' /body:misp://MSCJsRes.dll::uninstall.html /id:uninstall

sleep 8; 
$wshell = New-Object -ComObject wscript.shell;
$wshell.AppActivate('McAfee LiveSafe');
[System.Windows.Forms.SendKeys]::SendWait('{TAB}{TAB}{TAB} {TAB} {TAB}{TAB}{ENTER}');
sleep 1;
[System.Windows.Forms.SendKeys]::SendWait('{ENTER}');
sleep 120;
$wshell.AppActivate('McAfee LiveSafe');
[System.Windows.Forms.SendKeys]::SendWait('{TAB}{ENTER}');

As duas primeiras linhas do “script_powershell.ps1” servem para importar as bibliotecas System.Drawing e o System.Windows.Form que servem para o script conseguir manusear os objetos da interface gráfica.

A terceira linha de código, executa o desinstalador do McAfee LiveSafe, da mesma maneira que um usuário normal faria, abrindo o painel de controle, indo em aplicativos e selecionando o McAfee para ser desinstalado, tudo isso pela interface gráfica do usuário.

Em seguida o script dá um tempo de 8 segundos para a tela de desinstalação ser apresentada na interface gráfica.

Passado esse tempo, o script abre um objeto janela ($wshell) e usa a propriedade “AppActivate” para colocar em foco a janela do desinstalador do McAfee LiveSafe que acabou de subir.

Cara, depois disso é só alegria.

A gente pega o SendKeys e usando o comando SendWait, manda uma série de comandos como se fosse alguém navegando pelo teclado enquanto vai configurando a desinstalação do aplicativo.

Feito isso, de zoa o script dá um sleep de 1 segundo antes de mandar o <ENTER> que serve para executar a desinstalação que foi previamente configurada.

Dado o comando <ENTER>, o script aguarda 120 segundos, tempo mais que suficiente para acontecer a desinstalação.

Passado os 120 segundos, a tela do McAfee é chamada de volta para o foco, caso alguém tenha indevidamente clicado fora dela e em seguida executa mais um <TAB> e <ENTER>, dando o comando para reiniciar o computador.

Assim que é dado o comando para reiniciar o computador, o “script_powershell.ps1” finaliza, voltando o controle para o script “configura.bat”.

Assim que o script “configura.bat” reassume o controle, ele rapidamente desabilita a execução de scripts PowerShell e finaliza rapidinho, antes que ocorra a reinicialização do computador que já está em andamento.

E assim a gente consegue desinstalar “em modo silent” o McAfee LiveSafe.

By Renato de Pierri.

Publicado em 16/julho/2022

Last updated by at .