2010-08-12 10 views
5

Sto provando ad agganciare le chiamate al metodo GDI ExtTextOut e DrawTextExt di un'altra applicazione.Come collegare le chiamate api in un'altra applicazione

So che ho bisogno di utilizzare GetProcAddress per trovare l'indirizzo di quei metodi in gdi32.dll e sovrascrivere l'indirizzo nel processo che voglio collegare con l'indirizzo della mia funzione. Poi nella mia funzione faccio quello che mi serve, quindi chiamo la funzione originale.

Desidero rendere disponibile questa funzionalità di hook per le applicazioni .net, e apparentemente ciò è possibile creando una dll non intermedia "intermedia" che esegue l'aggancio ed è in grado di attivare un evento sul lato .net, in modo che la nuova funzione possa scommettere scritta nell'ambiente gestito. Non sono sicuro di come implementarlo. Qualcuno ha qualche esempio di codice o link a informazioni?

risposta

5

Consiglierei Microsoft Detours (solo C++ x86) o EasyHook (C++ & C#, x86/x64).

http://easyhook.codeplex.com/

ho usato prima, funziona piuttosto bene. Devi passare una funzione o un indirizzo e dove vuoi reindirizzare, e puoi avere tutte le chiamate (per tutti i processi o uno specifico) inviate alla tua funzione. Le esercitazioni coprono la maggior parte delle nozioni di base, ma posso modificare il codice in questa risposta, se lo desideri.

Un po 'di curiosità è che funziona anche nell'altro senso. Passa un puntatore alla tua funzione e puoi reindirizzare le chiamate in un codice esterno. Rende l'integrazione interessante con vecchie app o closed-source.

+0

FWIW la versione pro di Detours supporta ia/x64 –

+0

EasyHook suona meglio per me, in quanto è completamente funzionale (può fare 64 bit) gratuitamente ... Esiste una sorta di tutorial disponibile per camminare attraverso ottenere un piccolo campione in esecuzione? Non ho visto nulla nella sezione documentazione. – Jeremy

+0

È nascosto nella pagina dei download: http://easyhook.codeplex.com/releases/view/24401 Documenti API gestiti, tutorial e introduzione. Non i migliori tutorial, ma dovrebbero essere sufficienti per iniziare. :) – ssube

4

È possibile utilizzare Deviare API Hook, utilizzare DeviareCSharpConsole che è uno strumento incluso nel pacchetto che consente di agganciare qualsiasi API e visualizzare i valori dei parametri in un controllo ad albero. L'unico trucco di cui ha bisogno in Windows7 deve essere caricato come amministratore, ho segnalato.

+0

Molto interessante. Anche gratuito – Jeremy

Problemi correlati