Domanda

di Windows ha la capacità di applicare spessori per le applicazioni mis-Comportarsi . Spessori sono utilizzati per intercettare chiamate API e cambiarlo. Ad esempio, gli spessori possono essere utilizzati per:

  • cambiare le paramters in arrivo
  • mentire circa i valori di ritorno
  • cambiarlo chiamare qualcos'altro

Il Application Compatibility Toolkit ha un bel paio di spessori esistenti voi può applicare alla propria applicazione mis-comportarsi. Ecco un esempio di uno che ignora la chiamata API chiede invece un'API completamente diverso, invece:

alt text

ho bisogno di uno spessore che non è una delle centinaia di spessori Microsoft già scritto. ho bisogno di uno shim personalizzato .

Nel mio caso voglio intercettare le chiamate a:

GetSystemMetrics(0x1000)

in modo che restituisca 0. non riesco a trovare tutte le informazioni su come dare a Windows mia DLL che avrà la correzione ho bisogno. Io non so nemmeno se si possono creare spessori personalizzati.

Lo spessori supporto personalizzati di Windows?

È stato utile?

Soluzione

Io non sono a conoscenza di alcun modo di una persona diversa da Microsoft attuazione di uno spessore appcompat.

Si potrebbe voler indagare Detours , potrebbe fornire le funzionalità desiderare.

Altri suggerimenti

Si deve pensare a questo dal punto di vista di Raymond Chen. Immaginate se fosse possibile per qualcuno diverso da Microsoft di scrivere spessori di compatibilità. Poi ogni volta che Microsoft fa una modifica sostanziale, oltre a tutto il loro altro lavoro compatibilità avranno anche scrivere spessori per gli spessori 3rd party che ha fatto la cosa sbagliata. Mantenere la compatibilità all'indietro è già abbastanza difficile così com'è.

E 'possibile, ma richiede un certo lavoro.

Si depongono le uova l'applicazione utilizzando il proprio programma di avvio che si applicherà lo spessore. A tale scopo, lasciare il vostro programma di avvio creare il processo con privilegi sufficienti per modificare la sua memoria. La maggior parte delle funzioni API iniziano con un NOP due byte preceduto da più nops. È possibile modificare il NOP di due byte in un breve salto e PON precedenti per un salto in lungo dove mai volete andare.

Una soluzione alternativa che ho usato in passato è caricare l'eseguibile come DLL, ma che può causare più lavoro poiché seconda di come meticolosi l'applicazione è. Nella mia situazione ho dovuto caricare il file eseguibile come DLL di soli dati e fare tutte le mie importazioni, ma purtroppo la soluzione precedente non era un'opzione per me.

Ho anche una volta scritto un DLL di aggancio che utilizza principi simili, ma che è solo un'opzione se è possibile modificare il sorgente per caricare la DLL o se il processo supporta la DLL plug-in.

si può sempre utilizzare il reverse engineering per risolvere il problema :), fatemi sapere se avete bisogno di aiuto con esso

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top