>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
Rust

Hoe Windhawk Werkt en Waarom Windows Aanpassen Weer Gemakkelijk Werde

Iedereen die geprobeerd heeft om Windows aan te passen naar zijn voorkeuren, liep onvermijdelijk tegen systeembeperkingen aan. Windows 11 heeft vertrouwde taakbalkfuncties verwijderd, Explorer verandert periodiek zijn gedrag, en een kleine functie die je nodig hebt in een programma van derden kan niet worden geconfigureerd met ingebouwde tools. Voorheen vereiste elke dergelijke oplossing het zoeken naar aparte tweakers, het patchen van systeembibliotheken, of het downloaden van twijfelachtige binaries van forums.

Het Windhawk-project pakte de taak vanuit een andere hoek aan. Het idee lijkt op Tampermonkey voor browsers of Magisk voor smartphones, maar werkt in de omgeving van klassieke Windows-toepassingen.

Screenshot

Wat is Windhawk

Windhawk is gemaakt door ontwikkelaar m417z, bekend in de systeemhulpprogramma-gemeenschap voor het 7+ Taskbar Tweaker-project. In tegenstelling tot oude tweakers, die monolithische hulpprogramma's waren, heeft de auteur hier een open platform gebouwd.

De essentie is eenvoudig: er is een uniforme code-injectie-engine en een catalogus van kleine mods. Elke mod lost een specifiek probleem op — herstelt de klassieke taakbalk, voegt volumeaanpassing met het muiswiel boven het systeemvak toe, of verwijdert onnodige knoppen uit Explorer.

Gebruikers zien een overzichtelijke grafische interface waar ze de benodigde oplossing met één klik kunnen inschakelen. Voor ontwikkelaars opent Windhawk een volledig uitgeruste C++ hook-creatieomgeving direct in het programma, met een ingebouwde code-editor en directe compilatie.

Architectuur en Technische Details

De belangrijkste uitdaging bij het modificeren van programma's in Windows is ervoor te zorgen dat code op tijd wordt geïnjecteerd, stabiel werkt en geen naburige processen breekt.

High level architecture diagram

In de repository is de broncode verdeeld in drie hoofdcomponenten:

  • windhawk — de systeemservice windhawk.exe, evenals 32-bit en 64-bit windhawk.dll bibliotheken verantwoordelijk voor globale injectie en functie-interceptie;
  • vscode-windhawk — de interface-backend die mod-installatie, updates en configuratie beheert;
  • vscode-windhawk-ui — de frontend gebaseerd op webtechnologieën en de Monaco-editor, waar mod-parameters worden geconfigureerd en code wordt geschreven.

De engine gebruikt globale interceptie en DLL-injectie in doelprocessen. Wanneer een programma dat onder de modificatieregels valt wordt gestart, injecteert Windhawk zijn bibliotheek. Deze bibliotheek onderschept Win32 API-aanroepen of interne ongedocumenteerde functies van de applicatie en vervangt hun gedrag door wat in de mod wordt beschreven.

Deze aanpak beschermt het besturingssysteem tegen corruptie. Bestanden op schijf worden niet gewijzigd, systeembibliotheken blijven onaangetast, en sfc /scannow integriteitscontroles rapporteren geen fouten. Als een mod na een Windows-update niet meer werkt, kun je deze eenvoudig uitschakelen in de interface of het systeem in veilige modus opstarten.

Hoe Mods Worden Geschreven

Het schrijven van modificaties vereist geen installatie van een zware Visual Studio met alle systeem-SDK's. Windhawk downloadt de benodigde compiler-toolchain op de achtergrond.

De broncode van een mod is een C++-bestand met speciale metadata in opmerkingen, vergelijkbaar met browser-userscripts:

// ==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;
}

De mod wordt gecompileerd direct in de applicatie. De engine bewaakt bestandswijzigingen en laadt de dynamische bibliotheek opnieuw in het doelproces zonder dat het besturingssysteem opnieuw hoeft te worden opgestart.

Praktische Voordelen

Het hulpmiddel pakt verschillende scenario's aan die voorheen workarounds vereisten.

Ten eerste, fijnafstelling van de Explorer- en taakbalkinterface. Mods zijn beschikbaar voor het veranderen van de taakbalkhoogte, het verbergen van onnodige contextmenu-items, het schakelen tussen tabbladen met het muiswiel en het aanpassen van het systeemvak.

Ten tweede, het oplossen van irritant gedrag van software van derden. Als een programma geen sneltoets heeft of zijn venster standaard niet naar het systeemvak minimaliseert, kun je een hook schrijven voor user32.dll of win32u.dll en de verwerking van vensterberichten opnieuw definiëren.

Ten derde is het een uitstekende basis voor reverse engineering. Als je de interne werking van Windows-applicaties bestudeert, vereenvoudigt Windhawk experimenten met functie-interceptie, parameter-logging en het testen van hypothesen.

Nuances en Beperkingen

Bij het werken met globale injectie is het belangrijk om rekening te houden met de specificaties van beveiligingssoftware. Antivirusprogramma's reageren soms op functie-interceptie in systeemprocessen, hoewel de uitvoerbare bestanden van het project een geldige digitale handtekening hebben.

Het schrijven van complexe mods voor ongedocumenteerde Explorer-interfaces vereist nog steeds reverse engineering-vaardigheden en begrip van het gebruik van debuggers zoals x64dbg of IDA Pro. Windows-interfaces veranderen vaak van build tot build, dus auteurs moeten functiehandtekeningen voor verschillende bibliotheekversies onderhouden.

Is Het de Moeite Waard om te Proberen

Windhawk heeft de gefragmenteerde wereld van Windows-tweaks getransformeerd in een gestructureerde en transparante omgeving. Het project is geschreven in C++ en Rust, gedistribueerd onder de GPL-3.0-licentie, en heeft een actieve ontwikkelaarsgemeenschap.

Als je vertrouwde functies in Windows 11 mist, is het de moeite waard om het project in ieder geval te installeren voor de kant-en-klare mod-catalogus. En voor C++-ontwikkelaars die geïnteresseerd zijn in de low-level Win32 API, zal de repository-broncode veel praktische technieken tonen voor bibliotheek-injectie en hooking.

Gerelateerde projecten