
Injiziert Code in ELF-Programme nach dem Build

drow ist ein Kommandozeilenwerkzeug, das zum Injizieren von Code und zum Haken des Einstiegspunkts von ELF-Programmen (nach dem Build) verwendet wird. Es nimmt unveränderte ELF-Programme als Eingabe und exportiert eine modifizierte ELF-Datei, die eine benutzergegebene Nutzlast enthält, die zur Laufzeit ausgeführt wird.
Drow führt die folgenden Schritte aus, um das neue gepatchte ELF zu erstellen:
sh_size-Felds des letzten Abschnitts (im Segment) sowie der Felder p_memsz/p_filesz des Programmheaders um die Größe der benutzergegebenen Nutzlastsh_offsets der Abschnittsthesen und der p_offsets der Programmheader (Abschnitte und Segmente werden nach unten verschoben, um Platz für die Nutzlast und einen kleinen "Stager-Stub" zu schaffen)e_shoff, e_phoff, usw.)e_entry-Felds im ELF-Header (Offset des ELF-Einstiegspunkts), sodass es auf den injizierten Code zeigtZusätzlich zum Injizieren der benutzergegebenen Nutzlast injiziert drow einen kleinen Code-Stub, der an den Anfang der Nutzlast gestellt wird. Dieser Stub soll in die Nutzlast springen. Wenn die Nutzlast so geschrieben ist, dass sie zum Aufrufer zurückkehrt, führt der Stager nach der Rückkehr aus der Nutzlast einen Tail-Call in _start aus und stellt so die Ausführung wieder her, damit das Programm wie vorgesehen laufen kann.
Installieren Sie gcc und scons. Führen Sie dann scons aus dem Stammverzeichnis des Ordners aus.
Neben dem Bauen von drow erstellt dieses Projekt auch eine Linux x86-64-Nutzlast namens rappers_delight.bin, die einfach auf stdout ausgibt. Diese kann zum Testen verwendet werden. Derzeit funktioniert drow nur mit ELF64-Dateien, die auf x86-64 abzielen.
Es gibt viele Open-Source-Arbeiten in diesem Bereich. Ich empfehle Ihnen, auch die folgenden Projekte und die zugehörigen Veröffentlichungen anzusehen: