Como desinstalar antivírus no Mac sem quebrar a rede
Um produto de antivírus não é um app só. É um bundle de app mais um conjunto de registros que o macOS gerencia à parte: uma extensão do sistema, uma configuração salva de filtro de rede, um ou mais jobs do launchd, em geral um auxiliar privilegiado e, num Mac gerenciado, um perfil de configuração. Arrastar o bundle para o Lixo remove a frente, mas pode deixar outros registros no lugar. Por isso esta categoria tem fama de ser irremovível, e por isso o primeiro movimento é o desinstalador do próprio fabricante, não o Finder.
O que um produto de segurança instala além do bundle do app
Você pode inventariar a superfície inteira em somente leitura, em qualquer Mac, em cerca de um minuto:
systemextensionsctl list
ls -la /Library/LaunchDaemons /Library/LaunchAgents ~/Library/LaunchAgents
ls -la /Library/PrivilegedHelperTools
profiles list
pkgutil --pkgs | grep -i vendorname
Uma extensão do sistema carrega o código que inspeciona arquivos e tráfego, no lugar das
extensões de kernel que este software costumava trazer, e por isso o conselho antigo de apagar um
.kext não descreve mais nada. O
guia de extensões do sistema
da Apple diz onde ela mora: as extensões do sistema ficam dentro da pasta
Contents/Library/SystemExtensions do app. Ativar uma exige a sua aprovação, e
por isso instalar software de segurança sempre envolve uma ida aos Ajustes. A
nota técnica de implantação
da Apple acrescenta a propriedade que importa na hora da remoção: um provedor empacotado assim roda num
contexto global, independente por completo do usuário que está conectado.
Um filtro de conteúdo de rede ou um proxy transparente é um objeto separado, e é ele que tira a internet das pessoas. A configuração que o liga pertence ao sistema, não ao app. NEFilterManager é explícito: a configuração do filtro fica nas preferências de Network Extension, gerenciadas pelo framework Network Extension, e as mudanças só entram em vigor quando o app dono as salva de forma explícita.
Jobs do launchd iniciam as peças em segundo plano. /Library/LaunchDaemons roda como root na
inicialização, antes de qualquer login. /Library/LaunchAgents roda para todo usuário no login.
~/Library/LaunchAgents roda para você. Um plist nessas pastas é um registro no
launchd, não um arquivo de ajustes comum.
Um auxiliar privilegiado em /Library/PrivilegedHelperTools é um executável de root
pareado com um daemon que deve ser descarregado antes de o arquivo ir para qualquer lugar. Um
perfil de configuração, num Mac implantado por um empregador ou uma escola, carrega as aprovações da extensão
e as cargas do filtro para o software instalar sem pedir a ninguém, e o
mesmo mecanismo pode colocá-lo de volta.
Por que arrastar para o Lixo não funciona
A Apple documenta uma boa notícia, e ela é mais estreita do que parece à primeira leitura: o sistema desinstala automaticamente as extensões do sistema quando o usuário apaga o app correspondente. Isso cobre a extensão dentro do bundle e não diz nada sobre os outros registros, nenhum dos quais está dentro do bundle.
A configuração do filtro está por trás da reclamação mais comum aqui. Ela tem a própria vida nas preferências de Network Extension, e a Apple documenta a remoção como uma chamada explícita que o app dono faz. Apagar um app nunca faz essa chamada. O que resta é um filtro ativado apontando para um provedor que não existe mais, e os sintomas são os que as pessoas relatam depois de uma remoção pela metade: buscas de DNS que falham, um navegador que trava em toda página, conexões que expiram enquanto o ícone de Wi-Fi mostra sinal cheio. A rede está bem. O tráfego está sendo entregue a um filtro que não consegue responder.
Os jobs do launchd são a segunda falha. Apagar um executável não cancela o registro do job que o inicia. Converte um serviço que funcionava num que falha a cada abertura, e um job configurado para permanecer vivo é tentado de novo em loop, e é daí que vêm os relatos de "a ventoinha dispara depois que desinstalei". Apagar o plist enquanto o job está carregado é a imagem espelhada: o launchd mantém o job até a próxima reinicialização, sem nada no disco por trás. O auxiliar e o perfil sobrevivem pelo mesmo motivo, e um perfil que carrega uma carga de software reinstala o que você apagou.
A dificuldade é uma decisão de projeto
Software de segurança que qualquer processo pudesse desinstalar em silêncio não valeria nada, porque a
primeira coisa que um malware capaz faria é remover o que o observa. Então o macOS coloca as duas
pontas do ciclo de vida onde um processo em segundo plano não alcança: a ativação precisa de uma pessoa
clicando em Permitir nos Ajustes (a página de alerta
da Apple aponta Itens de Início e Extensões no macOS 15 e posteriores, Privacidade e Segurança antes disso),
e a desativação é um pedido do app que é dono da extensão. O atrito é esse
projeto funcionando, e não existe uma sequência de comandos rm que seja a desinstalação real
escondida de você.
A regra: rode o desinstalador do fabricante primeiro
Sempre, e antes de tocar em qualquer outra coisa. Só o app que contém pode enviar um pedido de desativação da própria extensão. Só o app que salvou a configuração do filtro pode removê-la das preferências de Network Extension. Só a ferramenta do fabricante sabe quais dos componentes reinstalam os outros se forem parados fora de ordem. Nenhum desinstalador de terceiros consegue obter esses controles, então um varredor de resíduos, o Mole incluído, serve para o que resta depois que a ferramenta do fabricante rodou, nunca como substituto dela.
Se você já arrastou o app para o Lixo, devolva com Arquivo › Devolver, abra-o e use o desinstalador dele. As seções abaixo dizem onde cada fabricante o guarda.
Onde cada fabricante guarda o desinstalador
Cada link abaixo aponta para o site de suporte do próprio fabricante, que é onde os passos atuais moram. Páginas de suporte mudam de lugar, então siga a página, não este resumo, se os dois discordarem.
McAfee
O desinstalador já está no Mac, em Aplicativos, com o nome do produto que você comprou, então uma instalação do Total Protection e uma do LiveSafe não usam o mesmo. O artigo da McAfee manda entrar como administrador, encerrar todo app da McAfee, depois abrir Ir › Aplicativos e dar um clique duplo nesse desinstalador. Dois dos passos são o motivo de lê-lo em vez de improvisar: ele manda clicar em Permitir quando o macOS perguntar sobre uma extensão do sistema, e termina com uma reinicialização como passo numerado, não como sugestão. Um ícone morto no Dock pode sobreviver à remoção e precisa ser arrastado para fora à mão.
Norton
Também um app desinstalador separado, já em Aplicativos. A página de desinstalação do Norton percorre Ir › Aplicativos, depois um clique duplo em Norton Uninstaller, depois "digite a senha da conta de administrador e clique em Install Helper", depois a senha de novo, depois Finish. O passo do auxiliar é como o desinstalador obtém os privilégios para desfazer os próprios componentes de nível de sistema.
Avast
Um desinstalador dentro do app, numa página que abre descartando a alternativa óbvia: "Mover o Avast Security para o Lixo ou usar o Clean My Mac não desinstala o aplicativo por completo." O caminho documentado é Avast Security › Uninstall Avast Security na barra de menus, Continue, depois a senha de inicialização do Mac e Install Helper. O mesmo desinstalador também fica em Aplicativos como Avast Security Uninstaller, para quando o app não abre.
Bitdefender
Um binário de desinstalação dedicado, não um arrastar. A página de desinstalação manda abrir a pasta do Bitdefender, dar um clique duplo em Bitdefender Uninstaller, marcar o produto, clicar em Uninstall e informar um nome e uma senha de administrador. A mesma passagem oferece remover o Bitdefender VPN, o que vale aceitar se você não for mantê-lo, porque esse componente registra uma extensão de rede própria.
Malwarebytes
Um item de menu dentro do app. O
artigo de desinstalação
leva por Help › Uninstall Malwarebytes na barra de menus, um pedido de
confirmação e a senha do Mac. Fora do comum nesta categoria, a mesma página também aceita
remoção pelo Finder, o que é uma declaração do fabricante sobre a própria pegada. Artigos antigos de
desinstalação em support.malwarebytes.com agora redirecionam. Use a página help.malwarebytes.com.
Sophos
Dois produtos, duas respostas. Sophos Home, o produto de consumo, usa um app separado Remove
Sophos Home, aberto pelo Spotlight. A
página
é direta sobre a alternativa: não arraste o Sophos Home para o Lixo, porque isso não
desinstala o programa. Ele instala um auxiliar, pede a senha e precisa de uma reinicialização.
A mesma página traz uma seção opcional para remover as extensões de sistema da Sophos depois,
e esse procedimento coloca systemextensionsctl uninstall entre desativar e
reativar a Proteção da Integridade do Sistema. Essa é a declaração mais clara de onde fica a
fronteira: até o desinstalador do próprio fabricante nem sempre leva as extensões junto.
Esses passos são opcionais, exatamente como o fabricante os rotula, e o SIP vale a pena deixar ligado.
Sophos Endpoint, o produto gerenciado, usa Remove Sophos Endpoint pelo Launchpad, mas a documentação condiciona: se a proteção contra adulteração estiver ligada, você precisa desligá-la antes de desinstalar o Sophos Endpoint. Isso precisa de um administrador do Sophos Central ou da senha por aparelho guardada nesse console, então num Mac de trabalho não é uma operação do lado do usuário.
Kaspersky
Dentro do app, pelo painel de suporte. A
página de desinstalação percorre
Help › Support, Uninstall, Uninstall de novo, depois credenciais de
administrador, e avisa que as extensões do Chrome e do Firefox sobrevivem ao app. A Kaspersky
também publica uma ferramenta de remoção separada,
kavremover-mac, para quando o caminho dentro do app falha. As duas páginas trazem datas de 2024, então confirme
contra a sua versão.
Se o Mac é gerenciado, a resposta é a equipe de TI
Antes de gastar uma noite nisto, confira se a decisão é sua:
profiles status -type enrollment
profiles list
O primeiro imprime o estado de registro DEP e MDM sem direitos de administrador. O segundo lista os perfis de configuração instalados para o seu usuário, e a mesma informação aparece em Ajustes do Sistema › Geral › Gerenciamento de Dispositivos. O guia de Gerenciamento de Dispositivos da Apple é direto sobre o que segue: alguns perfis só podem ser removidos por um administrador do sistema do Mac. Se você não conseguir remover um perfil, o Mac pode ser um computador gerenciado.
Num Mac gerenciado, o software de segurança é uma carga desse gerenciamento. Remova localmente e o perfil reinstala. Tente desativar a proteção contra adulteração localmente e você não consegue, porque a senha mora num console que você não tem. Peça à TI para desatribuir.
Verificar a remoção
É aqui que uma remoção pela metade é pega enquanto ainda é barata. Faça isso depois que o desinstalador do fabricante terminar e o Mac reiniciar, porque várias destas verificações só dizem a verdade depois de uma inicialização.
1. Extensões do sistema.
systemextensionsctl list
Num Mac sem nada instalado, a saída é uma linha só, 0 extension(s).
Caso contrário, cada linha nomeia o identificador de equipe, o identificador de bundle da extensão, a
versão e um estado entre colchetes. Qualquer coisa que ainda carregue o identificador do fabricante removido
significa que a desativação não se completou. A ferramenta oferece
systemextensionsctl uninstall <teamID> <bundleID>, e alguns fabricantes a documentam exatamente
para este caso, mas só recorra a ela quando a página do fabricante mandar.
2. Registros do launchd. Procure os rótulos do fabricante nos três locais, depois pergunte ao launchd o que está de fato carregado:
ls -la /Library/LaunchDaemons /Library/LaunchAgents ~/Library/LaunchAgents
launchctl list | grep -i vendorname
sudo launchctl list | grep -i vendorname
As duas chamadas launchctl list respondem a perguntas diferentes: a primeira cobre a sua sessão
de login, a segunda o domínio do sistema, onde vivem os daemons de root. Um plist restante sem
job carregado correspondente está velho, um job carregado sem plist é um Mac que precisa reiniciar, e
um job nos dois é software ainda em execução. O Mole mostra os mesmos três locais como uma lista,
que é a próxima seção.
3. Filtros de rede. Confira Ajustes do Sistema › Rede em busca de uma entrada Filtros do produto removido. Um filtro ainda listado depois que o app sumiu é uma causa possível de problema de conexão, não uma prova.
4. Itens de início e extensões. Abra Ajustes do Sistema › Geral › Itens de Início e Extensões e leia tanto a lista de início quanto os itens em segundo plano abaixo. Componentes do fabricante com frequência duram mais que o app aqui.
5. Processos em execução. No Monitor de Atividade, procure o nome do fabricante e mude para Todos os Processos no menu Visualizar, para daemons de root entrarem. Um resultado vazio depois de uma reinicialização é a confirmação que você quer.
6. Recibos. pkgutil --pkgs | grep -i vendorname nomeia o que o instalador gravou,
o que dá os caminhos que valem revisão em ~/Library/Application Support quando os
componentes ativos tiverem saído.
Se estas verificações não acharem componentes ativos, você pode passar a revisar arquivos restantes. Se os sintomas continuarem, peça ao fabricante para verificar a remoção antes de apagar mais arquivos.
O que o Mole faz aqui, e o que ele se recusa a fazer
A aba Software do Mole reúne o inventário de apps e os itens de início numa tela, então os launch agents, launch daemons e itens de início que um produto registrou ficam visíveis ao lado do app que os registrou, cada um com o caminho real.
Para resíduos, o Mole casa pela identidade do bundle, não pelo nome, e os caminhos de nível de sistema
que ele conhece são os de cima: /Library/LaunchDaemons/<bundle-id>.plist,
/Library/LaunchAgents/<bundle-id>.plist, /Library/PrivilegedHelperTools/<bundle-id>
e os recibos em /private/var/db/receipts. Toda correspondência de nível de sistema é
confiança de revisão, o que significa que chega desmarcada: você opta por cada caminho depois de lê-lo,
em vez de optar por sair de uma lista já marcada. As remoções vão para o Lixo, então um erro é um
arrastar de volta, itens pulados e com falha são informados, e tudo roda localmente.
Duas recusas importam mais que qualquer parte disso. O Mole varre /Library/SystemExtensions em busca de
extensões pertencentes ao app que está sendo removido e, quando acha uma, levanta um aviso
nomeando essa extensão e dizendo que ela pode permanecer depois que o app sair. Ele não tenta
a desativação, porque não consegue: esse pedido tem de vir do app dono. E para
fabricantes cujos produtos são travados, gerenciados ou destrutivos de remover em pedaços, inclusive
ESET, CrowdStrike, SentinelOne, Jamf, Palo Alto GlobalProtect e Cisco Secure Client,
o Mole recusa desinstalá-los e aponta o desinstalador oficial do fabricante.
A fronteira é o que torna o resto desta página confiável, então ela fica sem rodeio: o Mole não
é resposta a malware, não é backup e não substitui o desinstalador do fabricante em
software que traz drivers, componentes de VPN ou extensões do sistema. Para antivírus, o trabalho do Mole
começa depois que o desinstalador do fabricante terminou. No terminal, a
Mole CLI, gratuita e de código aberto, cobre a mesma revisão com mo uninstall, e
os comandos clean, uninstall e optimize aceitam --dry-run para você revisar o plano primeiro.
Perguntas frequentes
A internet parou de funcionar depois que apaguei o antivírus. O que faço?
Uma causa possível é uma configuração de filtro de rede que durou mais que o app. Ela mora nas
preferências de Network Extension, que o framework gerencia independente do bundle, então
apagar o app deixa um filtro ativado apontando para um provedor que não está mais lá.
Confira Ajustes do Sistema › Rede em busca de uma entrada Filtros e systemextensionsctl list em busca de
uma extensão que sobreviveu. A correção é reinstalar o produto do fabricante e rodar o
desinstalador dele. Reinstalar um software que você está tentando remover parece errado e ainda é o
caminho mais curto.
Posso só apagar os plists em /Library/LaunchDaemons?
Não como primeiro movimento, e raramente como último. Um plist ali é um registro no
launchd, então remover o arquivo enquanto o job está carregado deixa o job rodando até a próxima
reinicialização, sem nada no disco para explicá-lo. Depois que o desinstalador do fabricante rodou, o Mac
reiniciou e sudo launchctl list não mostra job carregado correspondente, um plist velho é
resíduo inerte. Nunca remova um que pertença a software ainda instalado.
O desinstalador do fabricante pede a senha e depois falha. E agora?
Confira três coisas. O Mac é gerenciado? Nesse caso a proteção contra adulteração ou um perfil está bloqueando a remoção, e a resposta é a TI. O produto ainda está em execução? Alguns desinstaladores não conseguem terminar enquanto o próprio daemon segura arquivos abertos, então reinicie e tente de novo. E o desinstalador está atual? Alguns fabricantes publicam uma ferramenta de remoção avulsa, separada do caminho dentro do app. Se os três estiverem limpos, o suporte do fabricante é a próxima parada.
Preciso reiniciar antes de conferir se sumiu?
Sim. A desmontagem da extensão e o cancelamento do registro no launchd se completam ao longo de uma inicialização, então uma verificação feita logo depois que o desinstalador termina pode mostrar restos já programados para sumir, e pode igualmente esconder um daemon que vai voltar.
Leitura relacionada
- Como desinstalar apps por completo no Mac para a sequência geral, identificadores de bundle e containers compartilhados.
- Remover arquivos restantes depois de desinstalar apps de Mac para o resíduo quando os componentes ativos estiverem confirmados como fora.
- O que limpadores de Mac nunca deveriam apagar para o outro lado do mesmo julgamento.