AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

exe in die exe integrieren

Ein Thema von Meflin · begonnen am 11. Feb 2004 · letzter Beitrag vom 12. Feb 2004
Antwort Antwort
Seite 2 von 2     12   
NicoDE
(Gast)

n/a Beiträge
 
#11

Re: exe in die exe integrieren

  Alt 11. Feb 2004, 23:29
Zitat von Meflin:
die fällt auch weg, da ich mein programm komprimiere und somit die dateigröße nicht angeben kann!
Musst Du doch gar nicht. Folgende Funktion ermittelt, wie groß die Exe vor dem Anhängen der Daten war (zur Laufzeit).
Delphi-Quellcode:
function DetectPE32Overlay(out Offset, Size: DWORD): Boolean;
type
  PImageSectionHeaders = ^TImageSectionHeaders;
  TImageSectionHeaders = array [Word] of TImageSectionHeader;
var
  Hand: THandle;
  Read: DWORD;
  DosHdr: TImageDosHeader;
  NtHdrs: TImageNtHeaders;
  SecHdr: PImageSectionHeaders;
  SecIdx: Word;
begin
  Result := False;
  // Datei zum Lesen oeffnen...
  Hand := CreateFile(PChar(ParamStr(0)), GENERIC_READ, FILE_SHARE_READ,
    nil, OPEN_EXISTING, 0, 0);
  if (Hand <> INVALID_HANDLE_VALUE) then
  try
    // MS-DOS Datei-Header einlesen um den Offset des PE32-Headers zu erhalten
    // (unter einigen OS nicht zwingend; aber in fast allen Faellen vorhanden)
    if not ReadFile(Hand, DosHdr, SizeOf(TImageDosHeader), Read, nil) or
      (Read <> SizeOf(TImageDosHeader)) or
      (DosHdr.e_magic <> IMAGE_DOS_SIGNATURE) then
      DosHdr._lfanew := 0;
    // PE32-Header einlesen (inklusive 'optionalem' Header)
    if (SetFilePointer(Hand, DosHdr._lfanew, nil, FILE_BEGIN) <> DWORD(-1)) and
      (ReadFile(Hand, NtHdrs, SizeOf(TImageNtHeaders), Read, nil) and
      (Read = SizeOf(TImageNtHeaders))) and
      (NtHdrs.Signature = IMAGE_NT_SIGNATURE) then
      // 'Optionalen' Header pruefen
      with NtHdrs, FileHeader, OptionalHeader do
        if (SizeOfOptionalHeader >= IMAGE_SIZEOF_NT_OPTIONAL_HEADER) and
          (OptionalHeader.Magic = IMAGE_NT_OPTIONAL_HDR_MAGIC) then
        begin
          // Sektionen durchlaufen und letzte merken
          SecHdr := GetMemory(NumberOfSections * SizeOf(TImageSectionHeader));
          if (SecHdr <> nil) then
          try
            if (SetFilePointer(Hand,
              SizeOfOptionalHeader - IMAGE_SIZEOF_NT_OPTIONAL_HEADER,
              nil, FILE_CURRENT) <> DWORD(-1)) and
              ReadFile(Hand, SecHdr^,
              NumberOfSections * SizeOf(TImageSectionHeader),
              Read, nil) and
              (Read = NumberOfSections * SizeOf(TImageSectionHeader)) then
            begin
              Offset := 0;
              for SecIdx := 0 to NumberOfSections - 1 do
                with SecHdr[SecIdx] do
                  if ((PointerToRawData + SizeOfRawData) > Offset) then
                    Offset := (PointerToRawData + SizeOfRawData);
              Size := GetFileSize(Hand, nil) - Offset;
              Result := True;
            end;
          finally
            FreeMemory(SecHdr);
          end;
        end;
  finally
    CloseHandle(Hand);
  end;
end;
Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Offset: DWORD;
  Size: DWORD;
begin
  if DetectPE32Overlay(Offset, Size) then
    ShowMessage('Offset'#9': 0x' + IntToHex(Offset, 8) + #13#10 +
      'Size'#9': 0x' + IntToHex(Size, 8));
end;
Nach dem Kopilieren zeigt es an:
Code:
Offset: 0x00068400
Size : 0x00000000
Nach "COPY /B Project1.exe + /B Projekt1.dpr Foo.exe" zeigt Foo.exe an:
Code:
Offset: 0x00068400
Size : 0x00000107
Nach "upx.exe --best Foo.exe" zeigt Foo.exe an:
Code:
Offset: 0x00029E00
Size : 0x00000107
(letzteres weil UPX die angehängten Daten erkennt und nach dem Komprimieren wieder hinten anhängt)


Gruss Nico

[edit] Typo im Kommentar - sind bestimmt noch mehr [/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#12

Re: exe in die exe integrieren

  Alt 12. Feb 2004, 16:24
ok leute thx, ich habs schon zum laufen gebracht!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz