'Sicuro' iniezione DLL
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.
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: -)