Thema: Delphi .text section dumpen

Einzelnen Beitrag anzeigen

Lyan

Registriert seit: 5. Aug 2011
188 Beiträge
 
#5

AW: .text section dumpen

  Alt 22. Okt 2015, 15:05
Ich muss auch gestehen, dass ich die letzte Zeile in diesem Thread gelöscht habe. In der stand: "Ich warte dann mal auf die Antwort von Zacherl, mit viel Glück hat er noch was übrig".


Habe leider nichts fertiges hier, aber zum iterieren der Sections schnell aus dem Kopf:
Delphi-Quellcode:
var
  ImageBase: Pointer;
  ImageDosHeader: PImageDosHeader;
  ImageNtHeaders: PImageNtHeaders;
  ImageSectionHeader: PImageSectionHeader;
  I: Integer;
begin
  ImageBase := Pointer(hInstance);
  ImageDosHeader := PImageDosHeader(ImageBase);
  if (ImageDosHeader^.e_magic <> IMAGE_DOS_SIGNATURE) then
  begin
    Exit;
  end;
  ImageNtHeaders := PImageNtHeaders(PByte(ImageDosHeader) + ImageDosHeader^._lfanew);
  if (ImageNtHeaders^.Signature <> IMAGE_NT_SIGNATURE) then
  begin
    Exit;
  end;
  ImageSectionHeader := PImageSectionHeader(PByte(ImageNtHeaders) + SizeOf(TImageNtHeaders) -
    SizeOf(TImageOptionalHeader) + ImageNtHeaders^.FileHeader.SizeOfOptionalHeader);
  I := 1;
  while (I < ImageNtHeaders^.FileHeader.NumberOfSections) do
  begin
    WriteLn('Section Name:');
    WriteLn(PAnsiChar(@ImageSectionHeader^.Name[0]));
    WriteLn('Virtual Address:');
    WriteLn(IntToHex(NativeUInt(ImageBase) + ImageSectionHeader^.VirtualAddress,
      SizeOf(Pointer) * 2));
    WriteLn('Size:');
    WriteLn(IntToHex(ImageSectionHeader^.SizeOfRawData, 1));
    Inc(ImageSectionHeader);
    Inc(I);
  end;
end;
Statt hInstance kannst du auch die ImageBase einer beliebigen Dll nehmen, falls du das brauchst. Die Section dumpst du dir dann einfach mit CreateFile/WriteFile über die Virtual Address.

Würde mich allerdings nicht drauf verlassen, dass sich alle Binaries an die .text bzw. .code Konvention bezüglich des Section Names halten.
Wow vielen Dank

Ja für .UPX etc. brauche ich ja keinen Support, schließlich dumpe ich ja die eigene Section und den Namen kann ich ja (wenn er wirklich != .text/.code sein sollte anpassen

Anonsten hast du mir das Leben erleichtert, ist schon eine ganze Weile her seitdem ich was mit w32 PE zeug gemacht habe, und ich vergesse leider schnell.

Ich schreibs später fertig, dann poste ich es mal


Bis dann & nochmals danke
  Mit Zitat antworten Zitat