- Gli spessori in Windows Sono livelli intermedi che modificano le chiamate API, consentendo alle vecchie applicazioni di funzionare correttamente in quelle nuove. OS.
- Microsoft utilizza gli Shim nell'Application Compatibility Kit (ACT) per simulare ambienti legacy e risolvere problemi di compatibilità senza modificare il software originale.
- En programmazioneGli shim vengono applicati anche per i test unitari utilizzando strumenti come Microsoft Fakes, intercettando le chiamate di metodo per garantire risultati coerenti.
- Sebbene utili per la compatibilità, gli Shim possono essere sfruttati per scopi dannosi, consentendo iniezioni di DLL o escalation di privilegi nascosti se non gestiti correttamente.
Se hai mai provato a eseguire un'applicazione meno recente su una versione recente di Windows, probabilmente hai riscontrato problemi di compatibilità. Molti utenti non lo sanno, ma dietro quelle soluzioni magiche che Windows offre per far funzionare i programmi più vecchi, si celano i cosiddetti spessoriAnche se può sembrare un termine tecnico, questi piccoli elementi svolgono un ruolo fondamentale nell'ecosistema di compatibilità di Microsoft.
In questo articolo spiegheremo Cosa sono gli spessori nelle finestre?, come vengono utilizzati, i diversi scenari in cui entrano in gioco, sia in modo legittimo che malevolo, e la loro importanza negli ambienti di sviluppo, test e sicurezza IT. Se sei interessato al funzionamento approfondito di Windows o lavori con applicazioni legacy, questo articolo fa al caso tuo.
Che cosa è uno Shim in informatica?
Nella programmazione, un Shim È uno strato di codice che intercetta le chiamate a un'API per modificarne il comportamento senza alterare il codice originale dell'applicazione o dell'API. Questa tecnica è comunemente utilizzata per garantire la compatibilità tra le versioni di un software o per modificarne la funzionalità in modo temporaneo e controllato.
Gli shim possono intercettare, modificare o reindirizzare una chiamataAd esempio, se un'applicazione si aspetta una funzione che non esiste più in una nuova versione del sistema operativo, uno Shim può catturare quella chiamata e reindirizzarla a un'altra funzione compatibile. È anche possibile modificare gli argomenti o persino simulare una risposta.
Questo concetto è stato ampiamente utilizzato in vari ambiti, dai browser che implementano nuove funzionalità per le versioni precedenti tramite polyfill, agli ambienti di rete e ai sistemi operativi come Windows che devono garantire il funzionamento senza errori delle applicazioni degli anni precedenti.
Utilizzo di Shim su Windows: compatibilità con le versioni precedenti

Microsoft ha ufficialmente implementato gli Shims all'interno Toolkit per la compatibilità delle applicazioni (ACT), un set di strumenti progettato per risolvere i problemi di compatibilità nelle versioni moderne di Windows. Questa funzionalità è fondamentale quando si tratta di applicazioni progettate per versioni precedenti del sistema e che non sono stati aggiornati con il tempo.
Una delle opzioni più potenti all'interno dell'ACT è la possibilità di applicare "la versione mente"Questo tipo di Shim inganna un'applicazione facendole credere di essere in esecuzione su Windows XP, ad esempio, quando in realtà è in esecuzione su Windows 10 o 11. Ciò si ottiene intercettando le chiamate di sistema relative alla versione del sistema operativo e manipolare i valori restituiti.
Esempio pratico di utilizzo di Shims con ACT
Alcuni programmi eseguono controlli molto rigorosi sulla versione del sistema operativo prima dell'installazione. Ad esempio, un'applicazione progettata specificamente per Windows XP potrebbe verificare se il sistema restituisce la versione 5.1 e, in caso contrario, bloccare l'installazione. In questi casi, uno Shim può intercettare la chiamata a Sistema.Ambiente.Versione del sistema operativo e restituiscono i valori 5.1, facendo credere al programma di essere in esecuzione su XP.
Per applicare questo tipo di correzione si utilizza il componente Amministratore della compatibilità dell'ACT, dove uno Shim viene selezionato come WinXPSP3VersionLie ed è indicato per essere applicato a tutti i moduli dell'applicazione.
Come installare gli spessori
Una volta configurato Shim da ACT, viene salvato come file .sdb (Shim Database). Questo file può essere installato sul sistema Windows e utilizzato ogni volta che si esegue l'applicazione corrispondente. Il sistema operativo rileva la presenza dello Shim e ne modifica il comportamento durante l'esecuzione..
Questo permette applicazioni che altrimenti sarebbero incompatibili può essere eseguito senza errori, senza richiedere modifiche all'eseguibile originale o ad emulatori esterni.
Shim negli ambienti di sviluppo: test unitari in Visual Studio
Un altro settore in cui gli Shims hanno un ruolo rilevante è quello test unitariIn ambienti di sviluppo come Visual Studio, il correzioni di compatibilità (shim) Vengono utilizzati per isolare parti del codice durante i test. Questo fa parte del framework. Microsoft falsifica, che include entrambi stub come spessori.
Gli shim consentono di intercettare le chiamate ai metodi in assembly che non fanno parte della propria soluzione, come librerie di sistema o di terze parti. Il loro scopo è deviare l'esecuzione al codice di test personalizzato, garantendo così che i test siano prevedibili e non dipendano da fattori esterni quali il file system, la rete o l'ora del sistema.
Esempio pratico con System.IO
Supponiamo di avere un metodo che chiama System.IO.File.ReadAllLinesIn un test unitario, non si desidera che legga effettivamente dal disco, ma restituisca piuttosto un set fisso di dati. Con uno Shim, è possibile intercettare quella chiamata e farla restituire, ad esempio, {"Hello", "World", "Shims"}.
Ciò si ottiene utilizzando il file falsi corrispondente, generato automaticamente dal progetto di test. All'interno dello Shim, la chiamata originale viene sostituita con una funzione personalizzata.
Tipi di metodi supportati
I falsi spessori possono essere applicati a:
- Metodi statici: Vengono intercettati e viene loro associato un delegato che definisce il nuovo comportamento.
- Metodi di istanza (tutte le istanze): Utilizzare la classe AllInstances per intercettare il metodo su qualsiasi oggetto di quella classe.
- Metodi di istanza per una singola istanza:Un oggetto Shim viene creato associato a un'istanza specifica.
- costruttori: Le istanze modificate dell'oggetto in questione possono essere intercettate e restituite.
Limitazioni degli spessori nei test
Non tutto può essere intercettato con gli Shim. Ad esempio, non può essere utilizzato in alcune classi base .NET come mscorlib in alcuni ambienti. Inoltre, Non è consigliabile eseguire test in parallelo quando si utilizzano gli Shim, poiché influenzano l'intero AppDomain e non hanno affinità con i thread, il che può portare a risultati incoerenti.
Gli shims come strumento offensivo per la sicurezza informatica
Gli shim hanno attirato l'attenzione anche di malintenzionati. Come metodo legittimo per intercettare e modificare i processi di sistema, possono essere utilizzati per iniettare codice dannoso in processi sicuri o anche per aumentare i privilegi.
Una tecnica nota come Attacco Shimming Consiste nella creazione di un database di compatibilità personalizzato che applica patch a un file eseguibile o a una DLL nel Boot, consentendo l'esecuzione di codice non autorizzato senza riavviare il sistema. Questo può essere ottenuto utilizzando lo stesso file system .sdb utilizzato da Microsoft, ma per scopi dannosi.
Lo strumento Parser del database Shims consente ai ricercatori di sicurezza di analizzare questi file .sdb e rilevare se ci sono tentativi di Patching a caldo, iniezione di DLL o modifiche ai privilegi di esecuzione.
Come vengono rilevati questi attacchi
Alcuni indicatori chiave da tenere d'occhio sono:
- Installazione del database Shim al di fuori delle directory previste
- Date di modifica insolite
- Modelli di corrispondenza/riscrittura sospetti all'interno dei byte delle applicazioni di destinazione
Queste manipolazioni vengono memorizzate nel Registro di sistema di Windows e possono persistere anche dopo un riavvio del sistema. Pertanto, è essenziale monitorare eventuali modifiche sospette ai file .sdb presenti nel Registro di sistema. \Windows\AppPatch\sysmain.sdb o i loro equivalenti.
Qual è la differenza tra uno Shim, un Wrapper e uno Stub?
Nello sviluppo del software ci sono diversi concetti simili che possono essere facilmente confusi:
- Shim: Intercetta e modifica le chiamate API, riscrivendo o reindirizzando il loro comportamento senza alterare il codice originale.
- Involucro: incapsula un'altra funzione o un altro oggetto, aggiungendo funzionalità senza modificare l'oggetto originale.
- mozzicone: sostituzione semplificata di una funzione reale, solitamente utilizzata durante i test per simulare il comportamento.
Mentre Wrapper e Stub vengono creati esplicitamente nel codice, gli Shim funzionano a un livello inferiore, modifica del comportamento in fase di esecuzione, anche su librerie compilate o sul sistema operativo stesso.
Questi elementi sono essenziali per comprendere come Windows mantenga la compatibilità, sviluppi i test e come possa essere sfruttato da malintenzionati. Una corretta comprensione delle differenze e delle funzioni di Windows è fondamentale per sfruttarne i vantaggi e proteggersi dai rischi.
Scrittore appassionato del mondo dei byte e della tecnologia in generale. Adoro condividere le mie conoscenze attraverso la scrittura, ed è quello che farò in questo blog, mostrarti tutte le cose più interessanti su gadget, software, hardware, tendenze tecnologiche e altro ancora. Il mio obiettivo è aiutarti a navigare nel mondo digitale in modo semplice e divertente.
