Hallo Leute,
Ich wollte mich mal daran machen einen Exe-Packer zu schreiben. Allerdings bekomme ich schon Probleme damit eine neue Section einzufügen. Mein Problem ist das folgende:
Ich müsste ja hinter den anderen Section Headers noch einen einfügen.
PEView zeigt mir aber einen großen leeren Raum zwischen der Code Section und dem letzten Section Header an:
334 Ist die Letzte RVA im Section HEader,
die erste RVA der Code Section lautet aber 1000.
Ich frage mich jetzt
1. Was ist dieser Zwischenraum?
2. Wo muss ich jetzt korrekt den neuen Header einfügen?
Mein Code zum Auslesen der Datei bis nach den Section Headern sieht ungefähr so aus, das Fragment wird erstmal gespeichert, PEView zeigt in dieser Datei aber nur den Code Section Header an:
Delphi-Quellcode:
var
OldFile : TMEMorystream;
Base : Pointer;
DosHeader : PIMAGEDOSHEADER;
NTHeader : PIMAGENTHEADERS;
NewFile : TMemoryStream;
FirstSectionHeader : Cardinal;
NewSectionHeader : Cardinal;
begin
OldFile := TmemoryStream.Create;
NewFile := TmemoryStream.Create;
OldFile.LoadFromFile('D:\pfad\zu\einer.exe');
Base := OldFile.Memory;
DosHeader := Base;
NTHEader := Pointer(Integer(Base) + DosHeader^._lfanew);
FirstSectionheader := DosHEader^._lfanew + SizeOf(IMAGE_NT_HEADERS);
Showmessage(IntToStr(Integer(FirstSectionHeader)));
NewSectionHeader :=FirstSectionHeader + (NtHeader^.FileHeader.NumberOfSections * SizeOf(IMAGE_SECTION_HEADER));
Showmessage(IntToStr(NewSectionHeader));
NewFile.SetSize(newSectionHeader);
CopyMemory(NewFile.Memory,OldFIle.Memory,NewSectionHEader);
NewFile.SaveToFile('D:\tempbla.exe');
NewFile.Free;
OldFile.Free;
Das Leben ist wie ein Strand...und dann stirbt man.