
Inietta codice negli eseguibili ELF dopo la build

drow è un'utilità a riga di comando utilizzata per iniettare codice e hookare il punto di ingresso di eseguibili ELF (dopo la compilazione). Prende eseguibili ELF non modificati come input ed esporta un ELF modificato contenente un payload fornito dall'utente che viene eseguito in fase di runtime.
Drow esegue i seguenti passaggi per creare il nuovo ELF patchato:
sh_size dell'ultima sezione (nel segmento) e p_memsz/p_filesz dell'header del programma della dimensione del payload fornito dall'utentesh_offset degli header delle sezioni e i p_offset degli header dei programmi (sposta in basso sezioni e segmenti per fare spazio al payload e a un piccolo "stager stub")e_shoff, e_phoff, ecc...)e_entry (offset del punto di ingresso ELF) nell'header ELF per puntare al codice iniettatoOltre a iniettare il payload fornito dall'utente, drow inietta un piccolo stub di codice che viene preposto all'inizio del payload. Questo stub è progettato per chiamare il payload. Se il payload è scritto per tornare al chiamante, dopo il ritorno del payload lo stager esegue una tailcall a _start, ripristinando l'esecuzione in modo che il programma possa funzionare come previsto.
Installa gcc e scons. Quindi esegui scons dalla radice della directory.
Oltre a compilare drow, questo progetto compila anche un payload Linux x86-64 chiamato rappers_delight.bin che semplicemente stampa su stdout. Questo può essere utilizzato per i test. Attualmente, drow funziona solo con file ELF64 destinati a x86-64.
C'è molto lavoro open source fatto in questo dominio. Ti incoraggio a dare un'occhiata anche ai seguenti progetti e pubblicazioni correlate: