---
tags: [projeto, intranet, notifier, watchdog, seguranca]
date: 2026-04-27
---
# Notifier v1.8.3 - Defesa reforçada anti-fechamento + notificações
## Problema
Erick (user id=8, máquina 10.0.0.20, não admin local) estava conseguindo fechar o Notifier via Task Manager e mantê-lo desligado. A defesa anterior (Watchdog VBS 15s + Scheduled Task 2min) demorava demais ou era contornada.
## Defesa nova (v1.8.2)
### Watchdog VBS — `gotech_notifier/watchdog.py`
- Sleep entre verificações: **15s → 5s**
- Sleep após restart: **30s → 10s**
- Sleep inicial: **30s → 10s**
- Confirmação de morte (anti race com update): **5s → 2s**
### Scheduled Tasks — DUAS camadas redundantes
1. **`GoTechBR Notifier Keep Alive`** (nome principal)
2. **`Microsoft\Windows\GoTechBR Service Helper`** (nome camuflado, defesa em profundidade)
Ambas:
- Trigger ao logon + cada **1 minuto** (era 2min)
- `P9999D` + `false` — repete praticamente para sempre
- `true` — não aparecem no Task Scheduler comum por padrão
### Monitor loop interno
- `monitor_watchdog_loop`: 120s → **30s**
- A cada 30s **reinstala as scheduled tasks** se foram deletadas (re-chama `_ensure_scheduled_task()`)
## Por que funciona com Erick
Erick não é admin local → não consegue:
- Deletar scheduled tasks que rodam no contexto do sistema
- Modificar o registry HKLM
- Parar serviços Windows
Mesmo se matar EXE + wscript.exe, em ≤1min uma das 2 scheduled tasks reinicia o EXE, que recria VBS e tasks. Tempo máximo de janela "fora do ar": ~1 minuto.
## Build & Deploy
```
cd D:/xampp/htdocs/intranet/desktop-notifier
python -m PyInstaller --onedir --noconsole --name "GoTechBR Notifier" \
--icon assets/icon.ico --add-data "assets;assets" \
gotech_notifier/main.py --distpath dist_onedir --clean -y
```
Depois:
- ZIP do `dist_onedir/GoTechBR Notifier/` → `GoTechBR-Notifier.zip`
- Upload pra `writable/downloads/GoTechBR-Notifier.zip`
- Atualizar `writable/downloads/notifier-version.txt` para `1.8.2`
Auto-update do Notifier verifica e baixa.
## Notificações (v1.8.3)
Regra de exibição reformulada:
- **Demandas**: lembrete a cada **10 minutos** (era 60s, ficava chato). `_last_demanda_popup >= 600` em `notifier.py`.
- **Chat / WhatsApp / Social Media**: **uma vez só** (alerta rápido). `'social'` adicionado à lista de tipos não-repetíveis em `toast.py:_shown_ids`.
## v1.8.4 - Proteção SYSTEM via MeshCentral (proteção definitiva)
Aproveita que o MeshAgent já está instalado como SYSTEM em todas as máquinas para criar uma Scheduled Task SYSTEM que usuário comum não consegue deletar.
### Componentes
- `writable/downloads/notifier-protection.ps1`: script SYSTEM que cria task `Microsoft\Windows\Maintenance\GoTechBR Watcher` e watcher.ps1 em `C:\ProgramData\GoTechBR\`
- Rota `GET /api/notifier/protection-script`: serve o PS1 publicamente (Nginx bloqueia .ps1 estático, por isso usa rota CI4)
- Rota `POST /api/notifier/instalar-protecao` (PHP, autenticada): pega mesh_node_id do heartbeat do user → chama mesh-share-api
- Endpoint mesh-share-api `POST :8002/install-protection`: dispara `meshctrl runcommand --powershell --run` no node alvo (MeshAgent baixa PS1 via Invoke-WebRequest e executa como SYSTEM)
- `gotech_notifier/protection.py`: chamado em background pela main.py. Aguarda 90s, chama o endpoint PHP, salva flag `protection_installed_v1=true` em config local
### Fluxo de instalação (sem prompt para o user)
1. v1.8.4 chega via auto-update (≤5min)
2. Notifier inicia → após 90s pede instalação ao servidor
3. Servidor → mesh-share-api → meshctrl runcommand
4. MeshAgent SYSTEM baixa PS1 e executa
5. Task SYSTEM criada em `\Microsoft\Windows\Maintenance\GoTechBR Watcher`
6. Task SYSTEM (cada 1min) reaplica tasks user via `schtasks /XML /F`
7. Tasks user (com `InteractiveToken` e SID do user) reiniciam o EXE
### Por que user comum não consegue derrubar
- Task em `\Microsoft\Windows\Maintenance\` rodando como SYSTEM exige admin pra deletar (UAC/RPC denied)
- Mesmo se usuário deletar as tasks user, a task SYSTEM as recria em ≤1 minuto
- Watcher.ps1 em `C:\ProgramData\GoTechBR\` (acessível só admin para escrita)
### Como reverter (debug/uninstall)
Conectado como admin local (ou via MeshCentral runcommand SYSTEM):
```
schtasks /Delete /TN "Microsoft\Windows\Maintenance\GoTechBR Watcher" /F
schtasks /Delete /TN "GoTechBR Notifier Keep Alive" /F
schtasks /Delete /TN "Microsoft\Windows\GoTechBR Service Helper" /F
Remove-Item -Recurse -Force C:\ProgramData\GoTechBR
```
## Relacionados
- [[sessao-2026-04-24-whatsapp-social-notifier]]
- [[memorias/desktop-notifier]]