Aufbau von exe-Dateien

4 Antworten

Mit Notepad kannst du eigentlich rein gar nichts an Binärdateien verändern. Wenn du es troztzdem versuchst, stürzt das Programm höchstwahrscheinlich an einer bestimmten Stelle ab oder wird erst gar nicht von Windows geladen.

Eine Ausnahme gibt es allerdings, nämlich Zeichenketten. Die solltest du auch problemlos mit dem Notepad bearbeiten können. Dabei musst du allerdings beachten dass die Zeichenkette nach der Bearbeitung immer noch genau die gleiche Länge haben muss wie vorher.

Wenn du die Datei nicht mit Notepad modifizieren willst, kannst ich dir zum allgemeinen Aufbau von Binärdateien (PE=Portable Executable unter Windows) sagen.

Die allerersten Daten im Programm, also Offset 0, ist immer der sog. DOS-Header, der noch aus alten Zeiten von Microsoft stammt, und ist wie folgt aufgebaut:

typedef struct _IMAGE_DOS_HEADER
{
     WORD e_magic;
     WORD e_cblp;
     WORD e_cp;
     WORD e_crlc;
     WORD e_cparhdr;
     WORD e_minalloc;
     WORD e_maxalloc;
     WORD e_ss;
     WORD e_sp;
     WORD e_csum;
     WORD e_ip;
     WORD e_cs;
     WORD e_lfarlc;
     WORD e_ovno;
     WORD e_res[4];
     WORD e_oemid;
     WORD e_oeminfo;
     WORD e_res2[10];
     LONG e_lfanew; // Zeiger auf neuen (NT-)header
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;

Die Variable e_lfanew ist eine Art Zeiger auf den Windows-NT-Header, der einiges mehr über die Datei aussagt. Eigentlich nicht direkt ein Zeiger, aber es gilt dafür folgendes:

PVOID ImageBase;
IMAGE_DOS_HEADER *hdr = (IMAGE_DOS_HEADER*)ImageBase;
IMAGE_OPTIONAL_HEADER *hdrNT = (IMAGE_OPTIONAL_HEADER*)((DWORD)ImageBase + hdr->e_lfanew);

der IMAGEOPTIONALHEADER sieht dann so aus:

typedef struct _IMAGE_OPTIONAL_HEADER {
  WORD                 Magic;
  BYTE                 MajorLinkerVersion;
  BYTE                 MinorLinkerVersion;
  DWORD                SizeOfCode;
  DWORD                SizeOfInitializedData;
  DWORD                SizeOfUninitializedData;
  DWORD                AddressOfEntryPoint;
  DWORD                BaseOfCode;
  DWORD                BaseOfData;
  DWORD                ImageBase;
  DWORD                SectionAlignment;
  DWORD                FileAlignment;
  WORD                 MajorOperatingSystemVersion;
  WORD                 MinorOperatingSystemVersion;
  WORD                 MajorImageVersion;
  WORD                 MinorImageVersion;
  WORD                 MajorSubsystemVersion;
  WORD                 MinorSubsystemVersion;
  DWORD                Win32VersionValue;
  DWORD                SizeOfImage;
  DWORD                SizeOfHeaders;
  DWORD                CheckSum;
  WORD                 Subsystem;
  WORD                 DllCharacteristics;
  DWORD                SizeOfStackReserve;
  DWORD                SizeOfStackCommit;
  DWORD                SizeOfHeapReserve;
  DWORD                SizeOfHeapCommit;
  DWORD                LoaderFlags;
  DWORD                NumberOfRvaAndSizes;
  IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} IMAGE_OPTIONAL_HEADER, *PIMAGE_OPTIONAL_HEADER;

Ist zwar vielleicht nicht ganz das, wonach du gefragt hast, aber ich hoffe ich konnte ein Paar Leuten helfen.

Normalerweise gar nicht. Sobald da ein einziges Zeichen drin ist, das Notepad nicht kennt, wird das nicht richtig abgespeichert hat.

Die bekannteste Ausnahme ist die EICAR-Testfile.

Woher ich das weiß:Berufserfahrung – Software-Entwickler
PWolff  18.09.2014, 00:56

Wenn du ausführbare Dateien direkt bearbeiten willst, nimm einen Hex-Editor, also ein Programm, das Dateien Byte für Byte verändern kann.

1

Du kannst höchstens Klartext ändern. Wenn die Anzahl der Zeichen gleich bleibt, sollte das Programm noch laufen. Habe ich früher öfters mal gemacht (allerdings mit Windows Write).

Um Programmbefehle zu ändern, brauchst Du einen Decompiler, der aus der exe-Datei den Quelltext generiert. Und Du musst natürlich die zugehörige Programmiersprache beherrschen. Nach der Änderung wird der Quelltext wieder kompiliert.

RobertSmith123 
Fragesteller
 18.09.2014, 00:29

und was is bei raus gekomm? John Lennon lebt noch?

0

Eine Exe-Datei ist compiliert. Du kannst willkürliche Zeichen eingeben und hoffen, dass nichts kaputt geht, aber, wenn Du wirklich etwas am Programm ändern möchtest, musst Du die Exe ersteinmal decompilieren und dann mit einem entsprechenden Programm öffnen.

Woher ich das weiß:Studium / Ausbildung – Informatik Studium.
RobertSmith123 
Fragesteller
 18.09.2014, 00:20

und womit kann man exedatein dekompilieren?

0
apophis  18.09.2014, 00:23
@RobertSmith123

Dafür brauchst Du ein decompiler Programm für die entsprechende Programmiersprache.

0
Useruser454  19.05.2016, 18:23
@apophis

ich glaube du suchst nach reverse engineering. das ist eine methode, die die chinesen bei waren auch machen. nämlich ein fertiges produkt nehmen und es auseinanderbauen um zu sehen wie es gemacht wurde.

grundsätzlich ist es so: sourcecode in den editor dann compilieren also in maschinencode umsetzen= exe

du musst den umgekehrten weg gehen und wenn du den sourcecode hast, kannst du ihn dann umbauen.

was ist das für ein programm? vielleicht ist es opensource? dann kannst du den sourcecode sogar downloaden und manipulieren.

0