Como desinstalei o software da NoPing

O desinstalador da NoPing faz uma questionário para concluir a desinstalação, e é preciso “acertar” as respostas.


O problema

Recentemente instalei o NoPing para checar meu ping em alguns servidores, e tive uma experiência no mínimo estranha. Na verdade o problema foi na desinstalação.

Esse aqui é o questionário mostrado quando rodamos o desinstalador:

Quais seriam as resposta certas?
Quais seriam as resposta certas?

Respondi qualquer coisa e tive essa surpresa:

Erro: Por favor, insira uma resposta coerente com a pergunta
Erro: Por favor, insira uma resposta coerente com a pergunta
Erro: Você precisa responder a essa pergunta
Erro: Você precisa responder a essa pergunta

As respostas nunca eram aceitas, mesmo tentando responder com coerência.

Depois de mais inúmeras tentativas, a angústia foi se transformando em desespero: eu não conseguia desinstalar o programa (pelos menos não pelos meios “oficiais”). Nenhuma resposta era aceita.

Achei até algumas reclamações no Reclame Aqui com o mesmo problema, porém sem solução aparente:

Reclame Aqui
Reclame Aqui

Claro que havia outras formas de remover o software, porém virou uma questão de honra executar o desinstalador.

A solução

Rodei o programa no Cheat Engine e olhei as strings do desinstalador:

Strings do desinstalador
Strings do desinstalador

Podemos ver que ele faz algumas requisições para uma API (!!!) pra validar as respostas, além de coletar diversas informações do meu computador.

Também notei o mais importante aqui:

AI_SetMsiProperty
AI_SetMsiProperty

Talvez se eu conseguisse forçar essa chamada do AI_SetMsiProperty ALLOW_UNINSTALL "True" o meu problema estaria resolvido.

Olhando a lista de DLLs carregadas no Cheat Engine, encontrei a função nativa do Windows que seria executada pela AI_SetMsiProperty: MsiSetPropertyW.

MsiSetPropertyW
MsiSetPropertyW

Setei um breakpoint no início dessa função e rodei novamente o desinstalador. Assim que cliquei em Validar Respostas o breakpoint ativou. Analisei os registros e percebi que o r8 apontava em memória para um valor False, e pouco antes tínhamos a string ALLOW_UNINSTALL:

MsiSetPropertyW e o registro r8 em False
MsiSetPropertyW e o registro r8 em False

Setei manualmente o valor para True, forçando a habilitação do botão.

MsiSetPropertyW e o registro r8 em True
MsiSetPropertyW e o registro r8 em True
Agora foi
Agora foi
Finalmente
Finalmente
Acabou a angústia
Acabou a angústia

Quero acreditar que o desinstalador irá realmente remover todos os arquivos necessários.