Thema: Delphi .text section dumpen

Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: .text section dumpen

  Alt 22. Okt 2015, 11:59
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.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat