--- 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]]