Què són els Shims a Windows i per què s'utilitzen realment

Darrera actualització: 30/06/2025
Autor: Isaac
  • Els Shims a Windows són capes intermèdies que modifiquen trucades a APIs, permetent que aplicacions antigues funcionin correctament en nous sistemes operatius.
  • Microsoft fa servir els Shims al Kit de Compatibilitat d'Aplicacions (ACT) per simular entorns anteriors i resoldre problemes de compatibilitat sense modificar el programari original.
  • En programació, els Shims també s'apliquen per a proves unitàries mitjançant eines com Microsoft Fakes, interceptant crides a mètodes per garantir resultats consistents.
  • Encara que útils per a la compatibilitat, els Shims poden ser explotats amb fins maliciosos, permetent injeccions de DLL o escalades de privilegis ocultes si no es gestionen correctament.

com aturar processos en windows amb l'ordre taskkill-4

Si alguna vegada heu intentat executar una aplicació antiga en una versió recent de Windows, segurament us haureu topat amb problemes de compatibilitat. Molts usuaris no ho saben, però darrere d'aquestes solucions màgiques que ofereix Windows perquè els programes antics funcionin, s'amaguen els anomenats Calces. Encara que soni a argot tècnic, aquests petits elements compleixen una funció enorme dins de l'ecosistema de compatibilitat de Microsoft.

En aquest article anem a explicar què són els Shims a Windows, com s'utilitzen, els diferents escenaris en què entren en joc —tant legítimament com amb fins maliciosos— i quina és la seva importància en entorns de desenvolupament, proves i seguretat informàtica. Si estàs interessat en el funcionament profund de Windows o treballes amb aplicacions heretades, aquest article està fet per a tu.

Què és un Shim en informàtica?

En programació, un Femení és una capa de codi que intercepta trucades a una API per modificar-ne el comportament sense alterar el codi original de l'aplicació ni de l'API. Aquesta tècnica es fa servir comunament per garantir compatibilitat entre versions de programari o per alterar funcionalitats de forma temporal i controlada.

Els Shims poden interceptar, modificar o redirigir una trucada. Per exemple, si una aplicació espera una funció que ja no existeix en una nova versió del sistema operatiu, un Shim pot captar aquesta trucada i redirigir-la a una altra funció compatible. També es poden modificar els arguments o fins i tot simular una resposta.

Aquest concepte s'ha utilitzat àmpliament en diferents àrees: des de navegadors que implementen noves funcions per a versions antigues mitjançant polyfills, fins a entorns de xarxa i sistemes operatius com Windows que necessiten mantenir aplicacions d'anys anteriors funcionant sense errors.

  Away LED LED Flash Alerts On iPhone

L'ús de Shims al Windows: compatibilitat amb versions anteriors

fustes

Microsoft va implementar de forma oficial els Shims dins del Application Compatibility Toolkit (ACT), un conjunt d'eines dissenyat per solucionar errors de compatibilitat en versions modernes de Windows. Aquesta funcionalitat és crucial quan es tracta de aplicacions que van ser dissenyades per a versions antigues del sistema i que no s'han actualitzat amb el temps.

Una de les opcions més potents dins de l'ACT és la possibilitat d'aplicar mentides sobre versions (version lies). Aquest tipus de Shim fa creure una aplicació que s'està executant a Windows XP, per exemple, quan en realitat ho està fent sobre Windows 10 o 11. Això s'aconsegueix interceptant les trucades de sistema relacionades amb la versió del SO i manipulant els valors que es tornen.

Exemple pràctic dús de Shims amb ACT

Alguns programes fan comprovacions molt estrictes sobre el número de versió del sistema operatiu abans d'instal·lar-se. Per exemple, una aplicació dissenyada específicament per a Windows XP pot comprovar si el sistema torna la versió 5.1 i, si no ho fa, bloqueja la instal·lació. En aquests casos, un Shim pot interceptar la trucada a System.Environment.OSVersion i tornar els valors 5.1, fent que el programa cregui que està corrent sobre XP.

Per aplicar aquest tipus de correcció es fa servir el component Compatibility Administrator de l'ACT, on se selecciona un Shim com WinXPSP3VersionLie i s'indica que s'apliqui a tots els mòduls de l'aplicació.

Com s'instal·len els Shims

Un cop configurat el Shim des de l'ACT, es desa com un fitxer .sdb (Shim Database). Aquest fitxer es pot instal·lar al sistema perquè Windows l'utilitzi cada vegada que s'executi l'aplicació corresponent. El sistema operatiu detecta la presència del Shim i en modifica el comportament en temps d'execució.

Això permet que aplicacions que altrament serien incompatibles puguin executar-se sense errors, sense requerir modificacions a l'executable original o emuladors externs.

Shims en entorns de desenvolupament: proves unitàries a Visual Studio

Una altra àrea on els Shims tenen un paper rellevant és a les proves unitàries. En entorns de desenvolupament com Visual Studio, les correccions de compatibilitat (shim) s'utilitzen per aïllar parts del codi durant les proves. Microsoft Fakes, que inclou tant talons com a calces.

Els Shims permeten interceptar trucades a mètodes d'assemblats que no formen part de la solució pròpia, com ara llibreries del sistema o de tercers. El seu objectiu és desviar l'execució cap a un codi de prova personalitzat, assegurant així que les proves siguin predictibles i no depenguin de factors externs com el sistema de fitxers, la xarxa o l'hora del sistema.

  Aconsegueix el paquet de funcions multimèdia de l'actualització de l'aniversari de Windows 10

Exemple pràctic amb System.IO

Suposa que tens un mètode que truca a System.IO.File.ReadAllLines. En una prova unitària, no vols que llegeixi realment del disc, sinó que torni un conjunt fix de dades. Amb un Shim pots interceptar aquesta trucada i fer que torni, per exemple, {"Hello", "World", "Shims"}.

Això s'aconsegueix utilitzant el fitxer fakes corresponent, que es genera automàticament des del projecte de proves. Dins del Shim, la trucada original es reemplaça amb una funció personalitzada.

Tipus de mètodes suportats

Els Shims de Fakes es poden aplicar a:

  • Mètodes estàtics: S'intercepten i se'ls associa un delegat que defineix el nou comportament.
  • Mètodes d'instància (totes les instàncies): Usen la classe AllInstances per interceptar el mètode en qualsevol objecte d'aquesta classe.
  • Mètodes d'instància per a una instància única: Es crea un objecte Shim lligat a una instància específica.
  • constructors: Es poden interceptar i tornar instàncies modificades de l'objecte en qüestió.

Limitacions dels Shims en proves

No tot es pot interceptar amb Shims. Per exemple, no es poden utilitzar en certes classes base de .NET com mscorlib en alguns entorns. A més, no es recomana executar proves de forma paral·lela quan es fan servir Shims, ja que afecten tot l'AppDomain i no tenen afinitat per subprocessos, cosa que pot generar resultats inconsistents.

Shims com a eina de ciberseguretat ofensiva

Els Shims també han cridat l?atenció d?actors maliciosos. Com que és una forma legítima d'interceptar i modificar processos del sistema, es poden utilitzar per a injectar codi maliciós en processos segurs o fins i tot per escalar privilegis.

Una tècnica coneguda com Shimming Attack consisteix a crear una base de dades de compatibilitat personalitzada que pegat un executable o DLL al arrencada, permetent lexecució de codi no autoritzat sense necessitat de reiniciar el sistema. Això es pot aconseguir utilitzant el mateix sistema de .sdb que utilitza Microsoft, però amb fins maliciosos.

  OBS i Discord: integra el xat i l'àudio al teu stream

l'eina Shims Database Parser permet als investigadors de seguretat analitzar aquests fitxers .sdb i detectar si hi ha intents de hot patching, injecció de DLLs o canvis als privilegis d'execució.

Com es detecten aquests atacs

Alguns indicadors clau a cercar són:

  • Instal·lació de Shim Database fora dels directoris esperats
  • Dates de modificació inusuals
  • Patrons de coincidència/reescriptura sospitosos dins dels bytes de les aplicacions objectiu

Aquestes manipulacions s'emmagatzemen al registre de Windows i poden durar fins i tot després de reiniciar el sistema. Per això, és essencial monitoritzar qualsevol canvi sospitós als fitxers .sdb presents a \Windows\AppPatch\sysmain.sdb o els seus equivalents.

Quina diferència hi ha entre un Shim, un Wrapper i un Stub?

En el desenvolupament de programari hi ha diversos conceptes similars que es poden confondre fàcilment:

  • Femení: intercepta i modifica trucades a APIs, reescrivint o redirigint el seu comportament sense alterar el codi original.
  • Emballador: encapsula una altra funció o objecte, afegint-hi funcionalitat sense modificar l'objecte original.
  • Stub: reemplaçament simplificat d'una funció real, normalment utilitzat durant proves per simular comportament.

Mentre que els Wrappers i Stubs es creen explícitament al codi, els Shims treballen a un nivell més baix, modificant el comportament en temps d'execució, fins i tot sobre llibreries compilades o el propi sistema operatiu.

Aquests elements són fonamentals per entendre com Windows manté la compatibilitat, desenvolupa proves i també com pot ser explotat per actors maliciosos. La comprensió adequada de les seves diferències i funcions és clau per aprofitar-ne els beneficis i protegir-se davant dels seus riscos.