E 'possibile in Delphi per ottenere l'indirizzo di una funzione / procedura in un altro processo?

StackOverflow https://stackoverflow.com/questions/3763767

Domanda

I utilizzare i componenti di madCodeHook Madshi per iniettare una DLL in un processo, e quindi agganciare una procedura / funzione. Il problema è che ogni volta che una nuova versione del file EXE viene fuori l'indirizzo delle funzioni può cambiare. Attualmente il modo in cui lo faccio è quello di utilizzare OllyDbg e quindi codificare l'indirizzo nel DLL che faccio l'iniezione nel processo, questo è molto brutto e pericoloso. Chiedo solo se c'è un modo conoscere la definizione del procedimento se posso farlo in modo dinamico.

Si prega di notare, questo non è per malevolo intento, ho solo agganciare un paio di procedure nel file EXE di destinazione a fini di registrazione.

È stato utile?

Soluzione

Se la funzione itsself non cambia (molto) è possibile cercare il codice che avete bisogno di (cercare i codici operativi o dei bytes esadecimali) o utilizzare unità DISASM di Madshi per lo stesso scopo.

Altri suggerimenti

Senza cooperazione da parte del programma che si sta aggancio, non c'è modo semplice per fare ciò che è necessario.

Di solito, che la cooperazione si presenta sotto forma di tabella di esportazione del modulo, ma potrebbe anche venire dal programma che fornisce un API da utilizzare per chiedere per gli indirizzi delle sue funzioni.

Anche se si aggiorna il DLL per ogni rilascio del programma agganciato, non c'è ancora alcuna garanzia il codice funzionerà. Quello che stai facendo è esattamente il tipo di cosa che spazio di indirizzamento Layout Randomization dovrebbe proteggere contro. Il programma potrebbe essere caricato ad un indirizzo diverso ogni volta che viene eseguito.

Credo che la cosa migliore è se si può in qualche modo di automatizzare qualunque processo che si usa per trovare le funzioni in OllyDbg. Quindi è possibile incorporare dentro il vostro DLL in modo che possa cercare per le funzioni stesso.

Dipende. Per impostazione predefinita, Delphi viene compilato in codice macchina nativo. Non c'è metadati così per la maggior parte dei casi. (Un sacco di gente vedere che come una caratteristica di sicurezza, ma eviterà agli utenti di fare esattamente quello che stai cercando di fare qui, che può essere utilizzato per scopi malvagi.) Ma qualsiasi metodo con RTTI disponibile avrà il suo indirizzo nelle tabelle RTTI . Questo include tutti i pubblicati i metodi e tutti i pubblico metodi (per impostazione predefinita, almeno) in D2010 e Delphi XE. Queste tabelle RTTI possono essere letti, ma ci vuole un sacco di conoscenze di basso livello per trovarli.

Inoltre, alcuni programmi sono dotati di una certa varietà di file di mappa o nella cartella di installazione o incorporati come una risorsa, per facilitare la segnalazione degli errori quando qualcosa va storto. Se questo programma ha uno, e si può capire il suo formato, si potrebbe essere in grado di ottenere gli indirizzi di metodo da lì.

se si utilizza una DLL u possibile utilizzare GetProcAddress all'interno del dll alla retrive l'indirizzo della funzione

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