2010-09-29 12 views
15

Stavo navigando su Internet ultimamente, quando sono incappato in Dll Injection.Iniezione Dll - Cosa è possibile con esso?

Penso che sia un argomento interessante ma, non ho idea di quale sia lo scopo?

Ho letto che può essere utilizzato per crackare/hackerare giochi e software ma è anche possibile fare qualcosa di positivo con esso?

se sì, a cosa serve?

E quali lingue supportano questo?

Per la cronaca, non ho intenzione di provare e crackare/hackerare qualsiasi gioco con conoscenze acquisite, nessuna intenzione di fare qualcosa di illegale!

Grazie per il tempo,

Emerion

ps: i siti Web/libri che sono su questo argomento sarebbe apprezzato!

risposta

18

Ci sono molti usi che mi vengono in mente:

  • Hot patch: consente di aggiornare/parti di patch del codice senza realmente arrestare il processo o il riavvio. Microsoft stessa si è assicurata che ampie parti di Windows fossero hot-patchable facendo precedere le funzioni con un blocco NOP da 5 byte. Perché? Poiché puoi eseguire il JMP su qualsiasi altra parte del tuo codice in 5 byte, quindi l'hot patching sovrascrive in pratica il prefisso byte con un JMP per il codice aggiornato/patchato e voilà, il tuo codice fa qualcosa di completamente nuovo. Questo è spesso utilizzato insieme con iniezione DLL per caricare il nuovo codice nel processo di destinazione, e pur non obbligatorio, è uno dei suoi usi

  • Logging: Nello stesso spirito, deviando codice viene spesso usato come prefisso un funzione per la registrazione, cioè per vedere con quali parametri è chiamato. Inoltre, alcune applicazioni che registrano l'output dello schermo dalle applicazioni DirectX eseguono tale operazione deviando le chiamate DirectX, il che implica di nuovo l'iniezione di una DLL nel processo di monitoraggio delle chiamate.

  • sottoclasse: Non nel senso OOP, ma nel senso di Windows, cioè fornendo un nuovo WndProc di una finestra esistente per alterare il suo comportamento.Mentre è possibile semplicemente impostare una diversa routine di gestione dei messaggi tramite SetWindowLongPtr, il fattore limitante è che la funzione deve risiedere nello spazio degli indirizzi del processo di destinazione. È qui che arriva di nuovo l'iniezione: si fornisce una nuova implementazione in una DLL, si inserisce questo nel processo di destinazione e si chiama SetWindowLongPtr. Questo può essere usato per fornire un disegno aggiuntivo personalizzato su una finestra esterna, per esempio.

Personalmente ho avuto a che fare con tutti i casi d'uso di cui sopra, in passato, nelle applicazioni di business regolari, usare i patch a caldo per garantire tempi di attività su un sistema di notifica critica nei servizi medici di utilizzare deviazioni/logging consentire una gestione proprietaria dei record (da un negozio di software già morto) per parlare con una soluzione CRM completa in tempo reale.

Come sempre, è solo uno strumento nella tua scatola, e non c'è nulla di intrinsecamente "cattivo" a riguardo. è per qualsiasi scopo tu ne faccia uso che conta.

3

Nella programmazione di computer, iniezione DLL è una tecnica utilizzata per eseguire codice all'interno dello spazio di indirizzi di un altro processo, costringendola a caricare una libreria di collegamento dinamico. [1] L'iniezione di DLL viene spesso utilizzata da sviluppatori di terze parti per influenzare il comportamento di un programma in un modo che i suoi autori non avevano previsto o previsto. Ad esempio, il codice iniettato potrebbe intrappolare le chiamate alla funzione di sistema o leggere il contenuto delle caselle di testo delle password, che non possono essere eseguite nel modo consueto.

Fonte e maggiori informazioni qui: http://en.wikipedia.org/wiki/DLL_injection Si possono trovare anche alcuni buoni riferimenti a fonti esterne.

Dll Injection può essere utilizzato per una buona ragione quando si dispone di un sistema legacy senza codice sorgente ed è necessario modificarne il comportamento. È un trucco sporco e dovrebbe essere usato come ultima risorsa, IMO.

4

C'è stato un ottimo progetto svolto in Microsoft Research su questo argomento, incentrato sull'intercettazione delle chiamate alle funzioni WinAPI mediante l'iniezione di dll.

questo è il link, si dovrebbe tenervi occupati per un po ': Detours

+1

Detours è bello, ma per un nuovo sviluppo si dovrebbe probabilmente preferiscono http://easyhook.codeplex.com/ invece - permette x64 pure come hook di kernelmode e consente di scrivere gli hook come codice gestito (!) – snemarch

+0

@snemarch - nice !! Sapevo che Detours era vecchio, ma non sapevo che qualcuno avesse mantenuto il concetto in corso - mi divertirò a giocarci. – slugster

Problemi correlati