Wat zijn Shims in Windows en waar worden ze eigenlijk voor gebruikt?

Laatste update: 30/06/2025
Auteur: Isaac
  • De Shims in Windows Het zijn tussenlagen die API-aanroepen aanpassen, zodat oude applicaties correct werken in nieuwe applicaties. besturingssystemen.
  • Microsoft gebruikt Shims in de Application Compatibility Kit (ACT) om oudere omgevingen te simuleren en compatibiliteitsproblemen op te lossen zonder de oorspronkelijke software te wijzigen.
  • En programmeringShims worden ook gebruikt voor unit-testen met behulp van hulpmiddelen als Microsoft Fakes. Hierbij worden methodeaanroepen onderschept om consistente resultaten te garanderen.
  • Hoewel Shims nuttig zijn voor compatibiliteit, kunnen ze ook worden misbruikt voor kwaadaardige doeleinden, zoals DLL-injecties of verborgen privilege-escalaties als ze niet goed worden beheerd.

Processen in Windows stoppen met de opdracht taskkill-4

Als je ooit hebt geprobeerd een oudere applicatie te draaien op een recente versie van Windows, ben je waarschijnlijk compatibiliteitsproblemen tegengekomen. Veel gebruikers weten dit niet, maar achter de magische oplossingen die Windows biedt om oudere programma's aan de praat te krijgen, zitten zogenaamde VulplatenHoewel het misschien klinkt als vakjargon, spelen deze kleine elementen een grote rol binnen het compatibiliteitsecosysteem van Microsoft.

In dit artikel zullen we het uitleggen Wat zijn Shims in Windows?, hoe ze worden gebruikt, de verschillende scenario's waarin ze een rol spelen – zowel legitiem als kwaadwillig – en hun belang in ontwikkel-, test- en IT-beveiligingsomgevingen. Als u geïnteresseerd bent in de diepgaande werking van Windows of met oudere applicaties werkt, is dit artikel iets voor u.

Wat is een Shim in de computerwetenschappen?

Bij het programmeren is een shim Het is een codelaag die aanroepen van een API onderschept om het gedrag ervan aan te passen, zonder de oorspronkelijke code van de applicatie of de API te wijzigen. Deze techniek wordt vaak gebruikt om de compatibiliteit tussen softwareversies te garanderen of om de functionaliteit tijdelijk en gecontroleerd te wijzigen.

Shims kunnen een oproep onderscheppen, wijzigen of omleidenAls een applicatie bijvoorbeeld een functie verwacht die niet meer bestaat in een nieuwe versie van het besturingssysteem, kan een Shim die aanroep opvangen en doorsturen naar een andere compatibele functie. Argumenten kunnen ook worden aangepast en zelfs een respons kan worden gesimuleerd.

Dit concept wordt op veel verschillende gebieden veelvuldig toegepast, van browsers die nieuwe functies voor oudere versies implementeren via polyfills, tot netwerkomgevingen en besturingssystemen zoals Windows die ervoor moeten zorgen dat applicaties van eerdere jaren foutloos blijven draaien.

  Auto SR in Windows 11: wat het is, hoe het werkt en hoe u kunt profiteren van automatische superresolutie.

Shims gebruiken op Windows: achterwaartse compatibiliteit

shim

Microsoft heeft Shims officieel geïmplementeerd binnen de Toolkit voor toepassingscompatibiliteit (ACT), een set tools die is ontworpen om compatibiliteitsproblemen in moderne versies van Windows op te lossen. Deze functionaliteit is cruciaal als het gaat om applicaties die zijn ontworpen voor oudere versies van het systeem en die niet zijn bijgewerkt met de tijd.

Een van de krachtigste opties binnen de ACT is de mogelijkheid om "versie liegt"Dit type Shim misleidt een applicatie door deze te laten denken dat deze bijvoorbeeld op Windows XP draait, terwijl deze in werkelijkheid op Windows 10 of 11 draait. Dit wordt bereikt door systeemoproepen te onderscheppen die verband houden met de OS-versie en het manipuleren van de waarden die worden geretourneerd.

Praktisch voorbeeld van het gebruik van Shims met ACT

Sommige programma's voeren zeer strenge controles uit op het versienummer van het besturingssysteem voordat ze worden geïnstalleerd. Een applicatie die specifiek voor Windows XP is ontworpen, kan bijvoorbeeld controleren of het systeem versie 5.1 retourneert en, als dat niet het geval is, de installatie blokkeren. In deze gevallen kan een Shim de aanroep onderscheppen. Systeem.Omgeving.Besturingssysteemversie en retourneert de waarden 5.1, waardoor het programma denkt dat het op XP draait.

Om dit type correctie toe te passen wordt het component gebruikt Compatibiliteitsbeheerder van de ACT, waar een Shim wordt geselecteerd als WinXPSP3VersieLie en is van toepassing op alle modules van de applicatie.

Hoe shims te installeren

Nadat Shim is geconfigureerd vanuit de ACT, wordt het opgeslagen als een .sdb-bestand (Shim Database). Dit bestand kan op het systeem worden geïnstalleerd zodat Windows het elke keer kan gebruiken wanneer de betreffende applicatie wordt gestart. Het besturingssysteem detecteert de aanwezigheid van de Shim en past het gedrag ervan aan tijdens runtime..

Dit maakt het mogelijk toepassingen die anders niet compatibel zouden zijn kan zonder fouten worden uitgevoerd, zonder dat er wijzigingen in het originele uitvoerbare bestand of externe emulators nodig zijn.

Shims in ontwikkelomgevingen: unittesten in Visual Studio

Een ander gebied waar Shims een relevante rol spelen is de unit testenIn ontwikkelomgevingen zoals Visual Studio is de compatibiliteitsoplossingen (shim) Ze worden gebruikt om delen van de code te isoleren tijdens het testen. Dit maakt deel uit van het framework. Microsoft-vervalsingen, die zowel omvat stompjes als shims.

Met Shims kunt u aanroepen van methoden in assembly's onderscheppen die geen deel uitmaken van uw eigen oplossing, zoals systeem- of externe bibliotheken. Hun doel is uitvoering omleiden naar aangepaste testcode, waardoor wordt gegarandeerd dat tests voorspelbaar zijn en niet afhankelijk van externe factoren, zoals het bestandssysteem, het netwerk of de systeemtijd.

  Wat zijn .DSK-bestanden en hoe kan ik ze uitvoeren in Windows?

Praktisch voorbeeld met System.IO

Stel dat u een methode hebt die Systeem.IO.Bestand.AlleRegelsLezenIn een unit test wil je niet dat de aanroep daadwerkelijk van schijf wordt gelezen, maar dat er een vaste set gegevens wordt geretourneerd. Met een Shim kun je die aanroep onderscheppen en bijvoorbeeld laten retourneren: {"Hello", "World", "Shims"}.

Dit wordt bereikt met behulp van het bestand fakes overeenkomstig, die automatisch wordt gegenereerd vanuit het testproject. Binnen de Shim wordt de oorspronkelijke aanroep vervangen door een aangepaste functie.

Typen ondersteunde methoden

Nep-shims kunnen worden toegepast op:

  • Statische methoden:Ze worden onderschept en er wordt een afgevaardigde aan hen gekoppeld die het nieuwe gedrag definieert.
  • Instantiemethoden (alle instanties): Gebruik de klasse AllInstances om de methode op een willekeurig object van die klasse te onderscheppen.
  • Instantiemethoden voor een enkele instantie:Een Shim-object wordt gemaakt dat gebonden is aan een specifiek exemplaar.
  • Bouwers:Gewijzigde exemplaren van het betreffende object kunnen worden onderschept en geretourneerd.

Beperkingen van shims bij het testen

Niet alles kan met Shims worden onderschept. Bijvoorbeeld, kan niet worden gebruikt in bepaalde .NET-basisklassen zoals mscorlib in sommige omgevingen. Ook, Het is niet aan te raden om tests parallel uit te voeren bij het gebruik van Shims, aangezien deze het gehele AppDomain beïnvloeden en geen thread-affiniteit hebben, wat kan leiden tot inconsistente resultaten.

Shims als offensief cybersecurity-instrument

Shims hebben ook de aandacht getrokken van kwaadwillende actoren. Als legitieme manier om systeemprocessen te onderscheppen en te wijzigen, kunnen ze worden gebruikt om kwaadaardige code injecteren in veilige processen of zelfs voor escaleer de privileges.

Een techniek die bekend staat als Shimming-aanval Het bestaat uit het maken van een aangepaste compatibiliteitsdatabase die een uitvoerbaar bestand of DLL in de Boot, waardoor ongeautoriseerde code kan worden uitgevoerd zonder het systeem opnieuw op te starten. Dit kan worden bereikt met hetzelfde .sdb-bestandssysteem dat door Microsoft wordt gebruikt, maar dan voor kwaadaardige doeleinden.

  Hoe de VERR_FILE_NOT_FOUND-fout in VirtualBox te verhelpen

De tool Shims-databaseparser stelt beveiligingsonderzoekers in staat deze .sdb-bestanden te analyseren en te detecteren of er pogingen zijn om Hotpatching, DLL-injectie of wijzigingen in uitvoeringsrechten.

Hoe deze aanvallen worden gedetecteerd

Enkele belangrijke indicatoren waar u op moet letten zijn:

  • Shim-database installeren buiten de verwachte mappen
  • Ongebruikelijke wijzigingsdata
  • Verdachte matching-/herschrijfpatronen binnen de bytes van de doelapplicaties

Deze manipulaties worden opgeslagen in het Windows-register en kunnen zelfs na een herstart van het systeem blijven bestaan. Het is daarom essentieel om verdachte wijzigingen in de .sdb-bestanden in het register in de gaten te houden. \Windows\AppPatch\sysmain.sdb of hun equivalenten.

Wat is het verschil tussen een Shim, een Wrapper en een Stub?

In de softwareontwikkeling zijn er verschillende vergelijkbare concepten die gemakkelijk met elkaar verward kunnen worden:

  • shim: Onderschept en wijzigt API-aanroepen door hun gedrag te herschrijven of om te leiden zonder de oorspronkelijke code te wijzigen.
  • Wikkel: kapselt een andere functie of een ander object in, waarbij functionaliteit wordt toegevoegd zonder het oorspronkelijke object te wijzigen.
  • Stomp: vereenvoudigde vervanging van een echte functie, meestal gebruikt tijdens testen om gedrag te simuleren.

Terwijl wrappers en stubs expliciet in de code worden gemaakt, werken Shims op een lager niveau, het runtime-gedrag wijzigen, zelfs op gecompileerde bibliotheken of het besturingssysteem zelf.

Deze elementen zijn essentieel om te begrijpen hoe Windows compatibiliteit handhaaft, tests ontwikkelt en hoe kwaadwillenden er misbruik van kunnen maken. Een goed begrip van de verschillen en functies is essentieel om te profiteren van de voordelen en om je te beschermen tegen de risico's.