![]() |
Re: exe in die exe integrieren
Zitat:
Delphi-Quellcode:
Beispiel:
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;
Delphi-Quellcode:
Nach dem Kopilieren zeigt es an:
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;
Code:
Nach "COPY /B Project1.exe + /B Projekt1.dpr Foo.exe" zeigt Foo.exe an:
Offset: 0x00068400
Size : 0x00000000
Code:
Nach "upx.exe --best Foo.exe" zeigt Foo.exe an:
Offset: 0x00068400
Size : 0x00000107
Code:
(letzteres weil UPX die angehängten Daten erkennt und nach dem Komprimieren wieder hinten anhängt)
Offset: 0x00029E00
Size : 0x00000107 Gruss Nico [edit] Typo im Kommentar - sind bestimmt noch mehr :) [/edit] |
Re: exe in die exe integrieren
ok leute thx, ich habs schon zum laufen gebracht!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz