Autor Beitrag
Biarchiv
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 688



BeitragVerfasst: Di 04.03.03 11:48 
Hallo,

Habe folgende Frage:

Suche einen Simples Beispiel für:

Es soll sich bei einer EXE PE Win32 Datei die SizeOfHeaders um ZB 200h erhöhen. Das Programm soll also bei jeder Sektion die neuen Werte eintragen und die 200h freigeben die benötigt werden. Die EXE Datei muß aber ausführbar bleiben.

Also rein den SizeOfHeaders vergrößern das die EXE aber startbat bleibt.
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: Di 04.03.03 21:23 
HI,
kannst DU kurz erläutern, warum du das tun willst? ***GRÜBEL***
CU
MSCH :?:
Biarchiv Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 688



BeitragVerfasst: Mi 05.03.03 16:14 
Hallo,

Ich benötige für einen eigenen SFX Entpacker platz im PE Header.

Was mir helfen?
ShadowCaster
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: Fr 23.05.03 09:25 
Hi Biarchiv,

Den SFX-Packer zu schreiben löst man aber nicht so wie du das vorhast. Du darfst nicht den PE-Header vergrößern. Eine Exe besteht aus Sektionen und Headern. Du müsstest lediglich eine Sektion an das Ende der Exe vom Typ ".data" anfügen und das Feld NumberOfSections im Optionalen PE-header ändern. Dann musst du einen Sektionsheader an die Sektionsliste im PE-Header anfügen. Jetzt kannst du den PointerToRawData neu setzen. Dann musst du noch SizeOfRawData für diese Sektion setzen. Beide Werte stehen im Sektionsheader deiner neuen Sektion.

Es kann sein dass du noch ein paar andere Werte setzen musst und ads ist sogar sicher. Da oben das sind nur die Grundlagen dafür. Was du da machen willst ist nicht gerade einfach (oder an einem Abend geproggt).

(Sorry für die späte Antwort, aber ich kenn mich erst seid ner Woche richtig damit aus ;))

Nachtrag: Size of Headers ist die Größe des PE-Headers. Da solltest du GAR NIX dran ändern, es sei denn du fügst mehr als 16 Sektionen in die Exe ein ;) Wenn du den Wert änderst, musst du einige andere Werte ändern und dann verschieben sich sämtliche Adressen in der Exe um diesen Wert und du brauchst dann einen Disassembler und Reassembler und musst den Code durchlaufen und jede Jumpadresse, die auf Dateninhalt der Exe zeigt ändern.
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Fr 23.05.03 09:48 
ShadowCaster hat folgendes geschrieben:
Sorry für die späte Antwort, aber ich kenn mich erst seid ner Woche richtig damit aus ;)

Und für einen SFX braucht man nicht am PE-Header herumfuhrwerken. *den Kopf schüttelt*
Da reicht es die Datendatei gefolgt von einer Information, wo die EXE aufhört und die Daten losgehen, an die EXE anzuhängen.

_________________
Ist Zeit wirklich Geld?
ShadowCaster
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: Fr 23.05.03 10:26 
Das ist aber der unkluge Weg, einfach mal Eben Daten ans Ende der Exe zu hängen und dann dem PE-Header zu sagen. So lieber PE-Header: da am Ende sind nochn paar Daten. Einige Virenscanner mögen das nicht und schlagen alarm, weil die Exe verändert wurde und das sichtbar. Selbst wenn die Exe-Datei ausführbar ist danach würd ich den weg niemals gehen. Wenn schon, dann professionell (gibt ja genug Abhandlungen darüber im Internet).

Die Größe des PE-Headers darf auf keinen Fall verändert werden. Höchsten eine Section kann hinzugefügt werden. Du brauchst für dein SFX tool nur ein Programm was sich selbst entpacken kann. Dann schreibst du in den Sectionheader ein Header für eine neue Section. Danach änderst du den PE-header entsprechend, setzt am Besten die Checksumme auf 0, damit sie nicht benutzt wird und es zu keinen Fehlern kommt. Die Sektion sollte vom Typ .data oder .text sein. Dein SFX Programm geht beim Start her und ließt die letzte Section aus (als Stream oder Blockread) und entpackt diese Daten. So einfach ist das und kein Virenscanner wird meckern.

Nachtrag: Ich hab nicht gesagt, dasss man nicht den PE header verändern darf sondern, dass man die zu entpackenden Daten nicht in den Header hängen sollte und die size neu setzen. Vielleicht ist das falsch rüber gekommen.
Biarchiv Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 688



BeitragVerfasst: Fr 23.05.03 11:04 
Hallo,

Ja wenn ich eine Sektion hinten hinzufügen.

Aber ich brauche die Vergrößerung der SizeOfHeaders dafür
wenn kein Platz zwischen letzten Sectionsheader und den Inhalt
des ersten Section mehr ist.
Meist bei C++ Builder.

Darum gehts.
ShadowCaster
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: Fr 23.05.03 11:10 
Aha, das ist was anderes. Dann solltest du den Entrypoint der Exe um die vergrößerung des Headers ändern, und die PointerToRawData und die Virtual-Adress von jedem Sectionheader. Also im Prinzip addierst du auf alle adresswerte in jedem Sectionheader dein Offset. Das schließt auch die Relocation-Adressen mit ein. Allerdings müsste ich mir das jetzt anschauen. Ich werde sicher mal einen SFX-Extractor schreiben. Aber das Projekt hab ich erstmal etwas weiter weg gerückt, da ich das momentan nicht brauch und andere Projekte hab.

Eigentlich solletn obige Änderungen reichen aber das ist ohne Gewähr. Vielleicht kann dir Motzi noch was helfen oder andyb, ich denke mein Wissen ist hier noch nicht weit genug ausgebaut :( .
Biarchiv Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 688



BeitragVerfasst: Mo 26.05.03 12:53 
Hallo,

Ich habe noch niergend etwas gefunden.

Gibts da gute Tutorials in Deutsch und Englisch für PE-Bearbeitung
in Delphi?
ShadowCaster
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: Mo 26.05.03 16:44 
also Tuts würd ich mal bei google suchen rund um "PE" und "Exe-Header". Da müsstest du eine ganze Menge finden.

Ich hab selbst auch ein neues Problem aber werd keinen Thread aufmachen, weil mir eh keiner helfen kann. Ich möchte den alten Entrypoint einer Exe-Datei ermitteln, wenn diese z.B. von einem Virus verändert wurde. Das Problem ist, dass der PE-Header überschrieben wurde und ich den alten Entrypoint nicht mehr ermitteln kann anhand des Headers. Hilfe scheint man nirgendwo zu bekommen :-(

Ansonsten glaub ich dass ich nichts mehr mit dem PE-Format mach. 3 Wochen Arbeit umsonst um herauszufinden, dass man den alten Entrypoint der Exe ohne Header nicht mehr ermitteln kann. Son Schrott.
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Mo 26.05.03 19:05 
ShadowCaster hat folgendes geschrieben:
Ansonsten glaub ich dass ich nichts mehr mit dem PE-Format mach. 3 Wochen Arbeit umsonst um herauszufinden, dass man den alten Entrypoint der Exe ohne Header nicht mehr ermitteln kann. Son Schrott.

Mit einem Disassemlber müsste es machbar sein, da du nur alle jmp und call Befehle darauf überprüfen musst, ob sie in die original Section springen. Dabei dürfte aber der Zeit-Nutzen-Vergleich nicht haltbar sein.

_________________
Ist Zeit wirklich Geld?
ShadowCaster
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: Mi 28.05.03 14:57 
Die Idee hatte ich auch schon aber ist zu aufwendig. :-(