2009-07-06 6 views
5

Qual è il tuo consiglio per una libreria o codice di aggancio API da utilizzare in un'applicazione commerciale?Qual è il modo consigliato di agganciare le API Win32 per un'applicazione commmercial?

Ho visto Microsoft Detours che sembra essere molto buono, ma sicuramente non ha budget per il profitto che mi aspetto dalla mia applicazione.

C'è qualche libreria che offre compatibilità tra WinXP e Vista (e Windows 7 se non troppo da chiedere!)? C'è qualcuno con esperienza passata nell'uso di una tale libreria in un prodotto commerciale?

+0

Potrebbe essere utile se si potesse indicare quali API si desidera collegare e perché. – Michael

+0

Detours è un pacchetto di strumentazione. È questo che vuoi fare, strumentare le tue DLL Win32? –

+0

In primo luogo, mi dispiace molto per non aver risposto in tempo, è stato per una lunga vacanza. Torna all'argomento, voglio agganciare CreateProcess e le funzioni di gestione dei file di Windows. Fondamentalmente voglio che la mia app acquisisca il controllo prima che il sistema operativo Windows possa toccare un file (probabilmente un file EXE). –

risposta

0

Si potrebbe provare EasyHook, sembra essere utile. Tuttavia, non è possibile applicare patch "a livello di sistema", per cui sarebbe necessaria una DLL proxy.

http://www.codeplex.com/easyhook

+0

EasyHook si è spostato su https://github.com/EasyHook/EasyHook – brewmanz

15

L'aggancio dell'API in Win32 non è realmente possibile in tutto il sistema. È possibile approssimarlo iniettando una DLL in ogni processo e quindi applicando le patch di ogni processo dall'interno. È possibile utilizzare i patch IAT (dove si patch il binario chiamante) o una patch in stile Detours (dove si patch il callee).

L'applicazione di patch al chiamante (patch IAT) indica che è necessario enumerare ogni DLL caricata nel processo e applicare una patch a ciascuna di esse separatamente. Dovresti anche agganciare lo LoadLibrary per applicare patch alle nuove DLL caricate al volo.

Patching the callee (Detours) presenta il vantaggio che è necessario applicare una patch solo in una posizione per applicare l'hook all'intero processo.

È necessario eseguire l'applicazione per processo anche se si collegano le API da DLL di sistema condivise; il sistema operativo invoca la copia su scrittura per cui quando si esegue il patch della DLL di sistema, al processo viene assegnata una copia privata da correggere.

DLL iniezione viene ad essere un po 'brutto, e ancora una volta ci sono diverse tecniche: AppInit_DLLs, che funziona solo per i processi che caricano USER32.DLL (e ha diverse nuove restrizioni in Vista e Windows 7), utilizzando SetWindowsHookEx, oppure utilizzando CreateRemoteThread . Integrity levels in Vista e Windows 7 rendono più difficile l'inserimento nei processi a livello di sistema. La tua app dovrà essere eseguita con i privilegi di amministratore e un alto livello di integrità per poterla estrarre con successo.

Un'altra tecnica è quella di agganciare i servizi di sistema in modalità kernel. Ciò richiede la scrittura di un driver di periferica, ma è fondamentalmente la tecnica utilizzata da Sysinternals Process Monitor (o almeno lo ha fatto). Questo è un problema su Vista a 64 bit e Win7 a causa di PatchGuard e dei requisiti di firma del driver. È possibile monitorare alcune attività del file system utilizzando i driver file system filter.

+0

Ottima risposta. – blez

2

Mi raccomando MinHook. È sicuramente la migliore libreria gratuita che si possa trovare e non è peggio di Microsoft Detours.

+0

Ho usato il minhook in diverse occasioni con grande successo. Sicuramente raccomandato – Qix

0

Hai provato la Deviare API Hook ...

Deviare è rilasciato sotto una licenza commerciale e open source (GNU General Public License versione 3).