2012-05-10 11 views

risposta

-2

`pthread.h # include

int pthread_create (pthread_t * filo, const pthread_attr_t * attr, void * (* start_routine) (void *), void * arg);` Compilare e collegare con - pthread.

vedono l'uomo pthread_create per i dettagli

+2

Ecco come creare un thread, non creare un thread e inserirlo in un processo remoto. –

6

Il modo tradizionale di fare questo su Linux potrebbe essere quella di creare una libreria dinamica (.so) con il tuo codice in essa, poi separatamente forzare il caricamento della libreria nella applicazione in esecuzione . Non esiste uno sportello unico come lo è con CreateRemoteThread su Windows.

Così qui sono i passaggi fondamentali:

  1. Creare un dylib/in modo che contiene il codice che si desidera eseguire nel processo remoto.
  2. Scrive un codice molto semplice in assembly che carica il file specificato (principalmente copia e incolla da this link, parte 1).
  3. Incorpora detto caricatore ASM come carico utile binario in un buffer in un secondo file di codice/app. Qui si utilizzerà ptrace per eseguire il payload binario scritto nel passaggio 2, che attiverà l'app di destinazione per chiamare _dl_open() sul file .so creato nel passaggio 1, che contiene il codice effettivo che si desidera eseguire. (Campione indicata nella the same link, parte 2.)

Se è necessario il codice per l'esecuzione in un thread separato dalla pompa principale, quindi si dovrebbe utilizzare pthread_create nel codice nel passaggio 1.

Spero che questo risponde alla tua domanda. Sì, è più complicato che su Windows; ma dovrebbe funzionare altrettanto bene. Inoltre, è possibile riutilizzare l'intero codice dai passaggi 2 e 3 per i futuri progetti di immissione di codice in modalità remota.