Domanda

Non è un terribilmente buona domanda, mi spiace.

Ho un programma che deve ricevere un avviso quando un file viene aperto da explorer (cioè ShellExecute (A / W) è chiamato).

Purtroppo, Microsoft ha rimosso l'interfaccia COM (IShellExecuteHook) che permette di collegare questi eventi in Vista e fino, presumibilmente perché il codice più vecchio potrebbe causare un crash a causa di cambiamenti. C'era un work-around per riattivare questa funzione, ma non funziona più.

Ho fatto qualche ricerca e sembra che l'unico modo per catturare le chiamate a ShellExecute è quello di ri-instradare la chiamata a shell32.dll. Al momento, sto guardando iniettando la mia DLL nel processo explorer, quindi copiare la voce IAT per ShellExecute a qualche allocazione degli indirizzi nella mia DLL, e, infine, modificando la voce IAT per ShellExecute per puntare la mia funzione, che ne informa il programma che un file è stato aperto e saltare alla funzione ShellExecute originale, il cui indirizzo abbiamo memorizzato in precedenza.

La mia più grande preoccupazione qui è antivirus. Saranno in grado di cura che sto iniettare in Explorer? Saranno in grado di cura che sto modificando l'IAT?

Un'altra preoccupazione è se questo è sicuro; è possibile (anzi probabile) per privilegi di sicurezza di Explorer per non permettere l'iniezione tramite CreateRemoteThread? Se è così, c'è un modo migliore per fare questa iniezione?

C'è un modo migliore per fare questo in generale?

EDIT: Per chi si imbatte in futuro, explorer.exe ha IAT per shell32.dll; ha un colpo di testa, ma il thunk è pieno di valori spazzatura, quindi non c'è alcun modo (per quanto posso dire) per recuperare la voce per eventuali funzioni importate.
Sembra che il codice tunneling è l'unico modo per agganciare questo.

È stato utile?

Soluzione

La maggior parte dei buoni euristica antivirus dovrebbero salire su tabella di importazione patch come una bandiera rossa per un Trojan.

La documentazione on-line per madcodehook ha alcuni articoli estesi su diverse tecniche di iniezione di codice, i loro benefici / svantaggi, e l'API fornisce alcune opzioni per specificare "sicuro" aggancio: http://www.madshi.net/madCodeHookDescription.htm

Altri suggerimenti

La biblioteca Detours:

http://research.microsoft.com/en-us/projects/ deviazioni /

Da Microsoft Research permette di aggancio arbitrario di funzioni. Si potrebbe dare che un colpo.

Alcuni forum su API di aggancio:

Facile gancio: http://www.codeplex.com/easyhook

Deviare: http://www.nektra.com/products/ deviare-api-allacci finestre /

Un post interessante: http://www.codeproject.com/KB/system /hooksys.aspx

Quando si fa API agganciandolo è molto importante per asini in cui ambienti è necessario eseguire. Non tutte le librerie di supporto x86 / x64, ad esempio.

Deviazioni supporta solo x64 nella versione con licenza (pagato). Facile gancio supporta x86 e x64.

Esplora risorse in Windows Vista e Windows 7 non ha nemmeno chiamare ShellExecuteA o ShellExecuteW.

Nessun punto di fastidio. Lol: -)

E, se posso aggiungere, Ho testato agganciando entrambe le funzioni di entrambi i ganci linea 32 bit e 64 bit.

Siamo spiacenti. Lol: -)

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