[C] ELF infection

Hi
Ich habe im Internet das hier gefunden:
http://dirkgerrits.com/publications/elf-virus.pdf

ich versuche grade das hier zu verstehen:
Code:
      phdr.p_offset = payload_offset = lseek(fd, 0, SEEK_END);
       payload_address = 0x8048000 - (payload_size + pre_payload_size);
       adjustment = payload_offset % 0x1000 - payload_address % 0x1000;
       if(adjustment > 0)
         payload_address -= 0x1000;
       payload.address += adjustment;
       ehdr.e_entry = payload_address;
       phdr.p_type = PT_LOAD;
       phdr.p_vaddr = phdr.p_paddr = payload_address;
       phdr.filesz = phdr.p_memsz = payload_size + pre_payload_size;
       phdr.p_flags = PF_R | PF_X;
       phdr.p_align = 0x1000;
Die Adresse für die Nutzlast wird hier ja mit der Konstante 0x8048000 berechnet. Warum?
Ich nehme an dass das nur auf 32bit systemen funktioniert und dass die adresse auf 64bit systemen eine andere ist.
(irgendwas mit 0x400000). Da wollte ich mal fragen wo man diese Konstante her bekommt und ob man die auch
irgendwie durch etwas dass nicht so systemabhängig ist ersetzen kann...

Die zweite Frage ist etwas thoretischer: warum werden hier nur die segmente mnipuliert?
Es gibt doch auch sections... Was genau ist der unterschied? Und warum wird das eine verändert und das andere nicht?
Ich habe vor einiger zeit einmal mit dem PE Format herumgespielt und wenn ich mich richtig erinnere dann
musste ich da auch etwas mit den sections machen...

Dritte Frage: In dem Text wird geschrieben, dass das NOTE segment entführt wird, weil man um ein weiteres segment hinzu zu fügen die ganze, restliche, Datei nach hinten
verschieben müsste... Heißt nach hinten verschieben einfach nach hinten verschieben? (Was ja ziemlich einfach sein dürfte) oder muss dann auch noch etwas anderes angepasst werden...
Hat jemand irgendwo einen Text oder code stückchen wo beschrieben wird, wie man eine section hinzufügt/vergrößert?

liebe grüße :)
 
Zuletzt bearbeitet:
Eventuell helfen dir die Kapitel "Object Files" und "Storage Location" aus dem Buch Linkers and Loaders. Bin darüber gestolpert da ich mich nebenher mit dem PE-Format etwas außeinandersetze (Im Buch wird auch das ELF-Format angesprochen), dachte das könnte nützlich sein.

Unter "Storage Location" findest du z.B.:

On 386 systems, the text base address is 0x08048000, which permits a reasonably large stack below the text while still staying above address 0x08000000, permitting most programs to use a single second-level page table.

Du kannst mit objcopy und dem --add-section Parameter einer Object-Datei eine neue Sektion hinzufügen. Es gibt noch weitere Parameter womit man die z.B. die Flags für die Sektion setzen kann (--set-section-flags)
 
Zuletzt bearbeitet:
Zurück
Oben