2016-08-01 17 views

Antwort

2

nein, PE-Header bei Offset 0x3C - das ist IMAGE_DOS_HEADER.e_lfanew, die ein beliebiger Wert sein kann> = 0x40

8

Viele Programme haben eine Rich signature, die nach dem DOS-Stub angehängt wird, nach unten die NT-Header drückt durch ein variabler Betrag

Es ist auch völlig möglich, einen anderen DOS-Stub oder gar keinen zu verwenden. Es muss nicht gedruckt werden "Dieses Programm kann nicht im DOS-Modus ausgeführt werden", Sie könnten ein kleines DOS-Spiel dort platzieren, einen Festplattenwischer, etwas ganz anderes drucken, was immer Sie wollen.

Sie können sogar, wenn Sie vorsichtig sind, overlap the NT header with the DOS header, und verwenden Sie daher einen Offset < 0x40. Dies ist nicht einmal zu schwer, da die einzigen Teile des DOS-Headers, die wichtig sind, e_lfanew und "MZ" sind, alles andere kann alles sein, was notwendig ist, um den NT-Header arbeiten zu lassen. Sie müssten e_lfanew nur mit einem Teil des NT-Headers ausrichten, der diesen Wert sicher haben kann.

+0

Danke, keine meiner Diagramme von PE zeigen eine Rich-Signatur. Außerdem ist der DOS-Stub nicht Teil des PE-Standards (ich meine seinen Inhalt)? – Shuzheng

+1

@NicolasLykkeIversen Ich bin 100% sicher, dass Sie in DOS-Stub setzen können, was Sie wollen (und es wird korrekt ausgeführt werden, solange es DOS DOS ausführbar ist). Einige einfache Apps nutzten dies sogar, um die ausführbare Datei für mehrere Plattformen bereitzustellen, sodass sie sowohl unter DOS als auch unter Windows ausgeführt werden konnte. – Ped7g