>_ DevTrendspt

Idioma

Início

Linguagens

Seções

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarcados Segurança
Rust

Como o Windhawk Funciona e Por Que Modificar o Windows Ficou Conveniente Novamente

Qualquer pessoa que tentou personalizar o Windows de acordo com suas preferências inevitavelmente encontrou limitações do sistema. O Windows 11 removeu recursos familiares da barra de tarefas, o Explorer muda periodicamente seu comportamento e um pequeno recurso necessário em um programa de terceiros não pode ser configurado com as ferramentas integradas. Anteriormente, cada correção assim exigia buscar tweakers separados, fazer patch em bibliotecas do sistema ou baixar binários questionáveis de fóruns.

O projeto Windhawk abordou a tarefa de um ângulo diferente. Sua ideia se assemelha ao Tampermonkey para navegadores ou ao Magisk para smartphones, mas funciona no ambiente de aplicativos clássicos do Windows.

Captura de tela

O que é o Windhawk

O Windhawk foi criado pelo desenvolvedor m417z, conhecido na comunidade de utilitários de sistema pelo projeto 7+ Taskbar Tweaker. Diferentemente dos tweakers antigos, que eram utilitários monolíticos, o autor construiu aqui uma plataforma aberta.

A essência é simples: existe um motor unificado de injeção de código e um catálogo de pequenos mods. Cada mod resolve um problema específico — restaura a barra de tarefas clássica, adiciona ajuste de volume com a roda do mouse sobre a bandeja ou remove botões desnecessários do Explorer.

Os usuários veem uma interface gráfica elegante onde podem ativar a correção necessária com um único clique. Para desenvolvedores, o Windhawk abre um ambiente completo de criação de hooks em C++ dentro do programa, com um editor de código integrado e compilação instantânea.

Arquitetura e Detalhes Técnicos

O principal desafio ao modificar programas no Windows é garantir que o código seja injetado no momento certo, funcione de forma estável e não quebre processos vizinhos.

Diagrama de arquitetura de alto nível

No repositório, o código-fonte é dividido em três componentes principais:

  • windhawk — o serviço de sistema windhawk.exe, assim como bibliotecas de 32 bits e 64 bits windhawk.dll responsáveis pela injeção global e interceptação de funções;
  • vscode-windhawk — o backend da interface gerenciando instalação de mods, atualizações e configuração;
  • vscode-windhawk-ui — o frontend baseado em tecnologias web e no editor Monaco, onde os parâmetros dos mods são configurados e o código é escrito.

O motor utiliza interceptação global e injeção de DLL em processos-alvo. Quando um programa coberto por regras de modificação é iniciado, o Windhawk injeta sua biblioteca. Essa biblioteca intercepta chamadas da API Win32 ou funções internas não documentadas do aplicativo, substituindo seu comportamento pelo que é descrito no mod.

Essa abordagem protege o sistema operacional de corrupção. Arquivos em disco não são modificados, bibliotecas do sistema permanecem intactas e verificações de integridade do sfc /scannow não relatam erros. Se algum mod começar a falhar após uma atualização do Windows, você pode simplesmente desativá-lo na interface ou inicializar o sistema em modo de segurança.

Como os Mods são Escritos

Escrever modificações não exige configurar um Visual Studio pesado com todos os SDKs do sistema. O Windhawk baixa a cadeia de ferramentas do compilador necessária em segundo plano.

O código-fonte de um mod é um arquivo C++ com metadados especiais em comentários, similar a userscripts de navegadores:

// ==WindhawkMod==
// @id              custom-window-title
// @name            Custom Window Title
// @description     Изменяет заголовок окна блокнота
// @version         1.0
// @include         notepad.exe
// ==/WindhawkMod==

#include <windhawk_api.h>

typedef HWND (WINAPI *CreateWindowExW_t)(
    DWORD dwExStyle, LPCWSTR lpClassName, LPCWSTR lpWindowName,
    DWORD dwStyle, int X, int Y, int nWidth, int nHeight,
    HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam
);

CreateWindowExW_t pOriginalCreateWindowExW;

HWND WINAPI Hook_CreateWindowExW(
    DWORD dwExStyle, LPCWSTR lpClassName, LPCWSTR lpWindowName,
    DWORD dwStyle, int X, int Y, int nWidth, int nHeight,
    HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam
) {
    if (lpWindowName && wcscmp(lpWindowName, L"Untitled - Notepad") == 0) {
        lpWindowName = L"Мой кастомный блокнот";
    }
    return pOriginalCreateWindowExW(dwExStyle, lpClassName, lpWindowName, dwStyle, X, Y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
}

BOOL Wh_ModInit() {
    Wh_Log(L"Инициализация мода");
    
    HMODULE hUser32 = GetModuleHandle(L"user32.dll");
    void* pCreateWindowExW = (void*)GetProcAddress(hUser32, "CreateWindowExW");
    
    Wh_SetFunctionHook(pCreateWindowExW, (void*)Hook_CreateWindowExW, (void**)&pOriginalCreateWindowExW);
    return TRUE;
}

O mod é compilado diretamente no aplicativo. O motor monitora alterações nos arquivos e recarrega a biblioteca dinâmica no processo-alvo sem precisar reiniciar o sistema operacional.

Benefícios Práticos

A ferramenta aborda vários cenários que anteriormente exigiam soluções alternativas.

Primeiro, o ajuste fino da interface do Explorer e da barra de tarefas. Mods estão disponíveis para alterar a altura da barra de tarefas, ocultar itens desnecessários do menu de contexto, trocar abas com a roda do mouse e personalizar a bandeja.

Segundo, corrigir comportamentos irritantes de software de terceiros. Se um programa não tem um atalho de teclado ou sua janela não minimiza para a bandeja por padrão, você pode escrever um hook para user32.dll ou win32u.dll e redefinir o tratamento de mensagens da janela.

Terceiro, é uma excelente base para engenharia reversa. Se você está estudando os internos de aplicativos Windows, o Windhawk simplifica experimentos com interceptação de funções, registro de parâmetros e teste de hipóteses.

Nuances e Limitações

Ao trabalhar com injeção global, é importante considerar as especificidades do software de segurança. Programas antivírus às vezes reagem à interceptação de funções em processos do sistema, embora os executáveis do projeto tenham uma assinatura digital válida.

Escrever mods complexos para interfaces não documentadas do Explorer ainda exige habilidades de engenharia reversa e compreensão do uso de depuradores como x64dbg ou IDA Pro. As interfaces do Windows frequentemente mudam de build para build, então os autores precisam manter assinaturas de funções para diferentes versões de bibliotecas.

Vale a Pena Experimentar

O Windhawk transformou o mundo fragmentado dos tweaks do Windows em um ambiente estruturado e transparente. O projeto é escrito em C++ e Rust, distribuído sob a licença GPL-3.0, e tem uma comunidade ativa de desenvolvedores.

Se você sente falta de recursos familiares no Windows 11, o projeto vale a pena instalar pelo menos pelo catálogo de mods prontos. E para desenvolvedores C++ interessados em API Win32 de baixo nível, o código-fonte do repositório mostrará muitas técnicas práticas para injeção de bibliotecas e hooking.

Projetos relacionados