| Autor |
Beitrag |
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Mi 12.03.03 13:04
Hallo,
ich habe folgendes Problem.
Ich habe Eine EXE Datei, und einen Datenblock fester Größe an diese gehängt. Nun möchte ich, das die EXE, die Werte in diesem Datenblock selbst ändert.
Leider bekomme ich eine Zugriffsverletzung, wenn ich versuche die Datei zu öffnen (leider sagt die Exeption nicht viel aus (Zugriffsverletzung bei Adresse XXX).
Quelltext 1: 2: 3: 4: 5:
| VAR f : tFileStream; begin f.Create(ParamStr(0), fmOpenWrite); [...] |
Ich erkläre es mir das damit, das die EXE ja bereits geöffnet ist (denn sie läuft ja) und ich deshalb nciht schreibend auf sie zugreifen kann.
Gibt es eine Möglichkeit wie ich trotzdem mein Ziel erreichen kann?
Gruß
Klabautermann
|
|
DeCodeGuru
      
Beiträge: 1333
Erhaltene Danke: 1
Arch Linux
Eclipse
|
Verfasst: Mi 12.03.03 13:12
jo, das Problem hatte ich auch mal. Habe es so nicht lösen können - was nicht heißt, dass es nicht gelöst werden kann, obwohl ich denke, dass es wirklich nicht geht.
Na ja, musste dann einen Workaround verwenden (bitte nicht lachen) und der sah so aus:
- Hauptprogramm extrahiert Programm zum Patchen des Hauptprogramm
- Hauptprogramm startet das Patch-Programm mit entsprechenden Parametern.
- Hauptprogramm beendet sich und wird dann gepatcht.
- Wenn das Patchprogramm das Hauptprogramm "gepatcht" hat, startet es wieder das Hauptprogramm
- Das Hauptprogramm löscht ggf. wieder das andere Programm.
Soweit ich mich erinnern kann, hat das sogar gefuntzt, war aber keine schöne lösung. Seit dem habe ich mir aber nicht mehr mit dem Problem beschäftigt.
_________________ Viele Grüße
Jakob
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 12.03.03 13:14
Könntest du aus dem Datenblock nicht eine Datei machen, die du dann extrahierst und auf die Paltte schreibst?
|
|
DaFox
      
Beiträge: 189
|
Verfasst: Mi 12.03.03 14:18
@Luckie: Und wie bekommst den dann wieder zurück in die EXE?
Gruß,
Markus
|
|
Klabautermann 
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Mi 12.03.03 15:36
Hallo,
ersmal danke für die Antworten.
Leider war die Ideale lösung noch nicht dabei.
Da das Ausladen der Daten wesentlich wichtiger ist als das reinschreiben. Diesen währe nur das Sahnehäubchen bei der Geschichte.
@DeCodeGuru: Die Idee ist nicht schlecht, wenn auch für meinen Fall zu aufwändig.
@Luckie: Ich wüde das ganze gerne so anstellen, das der (durchschnitliche) User nichts davon mitkriegt. Das anlegen einer Datei kann aber gesehen werden, da diese ja sofort im Explorer sichtbar wird (ich halte nciht viel davon Datein im Windows Verzeichnis oder ähnlichen auzulegen).
Ich Schätze ich werde dann nur die Ausgangsdaten an die Datei hängen und die daraus resultierenden Variablen dann "öffnetlich" in einer Klassischen Datei speichern. Anders währe es schöner - aber naja.
Ein weiteres Interessantes (und ärgerliches) Problem ist aufgetreten.
Wenn ich versuche, die EXE als Stream "nur lesend" zu öffnen bekomme ich ebenfalls die oben beschriebene Zugriffsverletzeung:
Quelltext 1: 2: 3: 4:
| VAR f : tFileStream; begin f.Create(ParamStr(0), fmOpenRead or fmShareDenyWrite); |
Ich kann mir nicht erklären warum, denn ich will ja nur lesen.
Auch wenn ich es auf die Klassische Art versuche bekomme ich Probleme beim lesen:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| VAR f2 : FILE; Buf : Array[1..100] OF Byte; begin AssignFile(f2, ParamStr(0)); FileMode := fmOpenRead; Reset(f2); Blockread(f2, Buf, 100); |
Wenn ich diese 2te Variante in der IDE laufen lasse, springt Delphi in's CPU Fenster. Wenn ich es außerhalb der IDE laufen lasse verabschiedet sich das Programm Kommentalos. Auch dann wenn ich das ganze mit TRY EXCEPT Klammere und versuche mir die Exception ausgeben zu lassen.
Mache ich da was grundlegendes Falsch oder wodran liegt das?
Gruß
Klabautermann
PS: Verwendet wird D7 und W2k SP3.
|
|
DeCodeGuru
      
Beiträge: 1333
Erhaltene Danke: 1
Arch Linux
Eclipse
|
Verfasst: Mi 12.03.03 15:58
| Zitat: | | @DeCodeGuru: Die Idee ist nicht schlecht, wenn auch für meinen Fall zu aufwändig. |
Jo, ich habe ja gesagt, dass das nicht ne "schöne" Lösung ist.
| Zitat: | Wenn ich versuche, die EXE als Stream "nur lesend" zu öffnen bekomme ich ebenfalls die oben beschriebene Zugriffsverletzeung:
Quelltext 1: 2: 3: 4:
| VAR f : tFileStream; begin f.Create(ParamStr(0), fmOpenRead or fmShareDenyWrite); |
Ich kann mir nicht erklären warum, denn ich will ja nur lesen. |
Ähm, das verstehe ich nicht, denn mit
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure ReadInformation; var fs: TFileStream; EMessage: String; begin fs := TFileStream.Create(ParamStr(0),fmOpenRead or fmShareDenyWrite); try fs.Position := fs.Size - 512; fs.Read(ServerInf,512); finally fs.Free; end; |
dem Codeausschnitt habe ich genau das gemacht und das funktioniert einwandfrei.
_________________ Viele Grüße
Jakob
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mi 12.03.03 16:35
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
Klabautermann 
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Mi 12.03.03 16:36
Autsch,
ich sollte mir mal die Glupscher putzen.
Natürlich kann
Quelltext
nicht funktionieren. Es muss
Quelltext 1:
| f := tFileStram.Create |
heißen  .
Dann werde ich mal weiter Probieren.
Auf jeden fall noch mal danke. Warscheinlich hätte ich das Stundenlang anstarren können ohne den Fehler zu entdechen, weil er zu Simpel war.
Gruß
Klabautermann
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mi 12.03.03 16:43
Übrigens.. eine exe kann NIE selbst Daten an sich anhängen, da exe und dll-Files von Windows als memory mapped files geöffnet werden und daher alle Versuche die Datei mit Schreibzugriffen zu öffnen scheitern! Über ein zweites Prog, das kurzfristig temporär erstellt wird und die Daten anhängt und sich dann selbst wieder entfernt würde es gehen..
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
DaFox
      
Beiträge: 189
|
Verfasst: Mi 12.03.03 16:53
Yep, darauf zielte auch meine Frage an Luckie ab...
Gruß,
Markus
|
|
Klabautermann 
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Mi 12.03.03 17:06
Hallo,
also ich habe jetzt die Experimente mit dieser Technick (nur lesen) erfolgreich abgeschlossen und werde mich gleich an die Eigentliche implementierung machen.
Danke noch einmal an alle. Ihr habt mir sehr geholfen, auch wenn es schade ist, das die EXE nicht an sich selbst rumpfuschen kann  .
Gruß
Klabautermann
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Mi 12.03.03 17:19
| Klabautermann hat folgendes geschrieben: | | Ich wüde das ganze gerne so anstellen, das der (durchschnitliche) User nichts davon mitkriegt. Das anlegen einer Datei kann aber gesehen werden, da diese ja sofort im Explorer sichtbar wird (ich halte nciht viel davon Datein im Windows Verzeichnis oder ähnlichen auzulegen). |
Ich hab sowas in der Art auch mal gemacht. Damals hab ich die Patchexe einfach im Tempordner abgelegt und den Programmpfad als Parameter übergeben. Nach dem Patch hab ich das Programm einfach neu gestartet. Dieses Programm hat dann im Tempordner geprüft ob da eine Patchexe ist. Wenn ja, dann wurde sie gelöscht. Wer guckt schon nach im Tempordener nach. Und wenn, da werden permanent Dateien angelegt.
Auserdem kenn ich ein Trick wie man eine xyz.tmp als Exe ausführen kann.
Die ganze Aktion war dann eigentlich nur ein Flackern auf dem Bildschirm.
_________________ Popov
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Mi 12.03.03 19:03
>xyz.tmp als Exe
was denn für ein trick ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Mi 12.03.03 23:13
| mimi hat folgendes geschrieben: | >xyz.tmp als Exe
was denn für ein trick ? |
Guck dir in der Registry unter HKEY_CLASSES_ROOT den Schlüssel .exe an. Dann denk logisch nach und du wirst es erkennen.
_________________ Popov
|
|
torstenheinze
      
Beiträge: 461
|
Verfasst: Mi 12.03.03 23:16
mit dem parameter exefile?
meinst dudas?
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Mi 12.03.03 23:20
Jo. Bis heute war das mein bester Virenschutz. Was für ein Virus greift ein .prg Programm an.
_________________ Popov
|
|
torstenheinze
      
Beiträge: 461
|
Verfasst: Mi 12.03.03 23:24
aha.
aber du musst doch dannimmer deinprog starten, welches dann auf die methode dein 'pseudoprog" startet.
da ist es doch besserwenn du mal kurz die dateiendung "renamest"
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Do 13.03.03 00:30
kann mir nicht vorstellen das ein virus oder was auch immer nur nach .exe dateien geht, die suchen warscheinlich ausfürbaren code und die endung ist egal......
aber zurück zum Thema !
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Do 13.03.03 00:32
@torstenheinze
Das meinte ich nicht. Ich habe ne Zeitlang fast alle Programme in .prg umbenannt. Unter Windows ist Exe nur eine Datei die "geöffnet" wird. Du kannst auch jeden anderen Dateityp registrieren und wie eine Exe ausführen. Das meinte ich.
was die xyz.tmp angeht, so kann man kurzfristig .tmp els Exefile registrieren, die Tmp-Datei als Programm starten und danach die registrierung wieder löschen. Wer glaubt schon, daß die Tmp-Datei ein Programm ist. Das ist übrigens ein guter Trick einen Trojaner zu verstecken. Wer glaubt schon, daß yxz.tro ein Trojanerprogramm ist. Allerdings ist das ein Trick made by Popov. Deshalb ist er nicht so bekannt.
_________________ Popov
|
|
DeCodeGuru
      
Beiträge: 1333
Erhaltene Danke: 1
Arch Linux
Eclipse
|
Verfasst: Do 13.03.03 10:40
| Zitat: | | was die xyz.tmp angeht, so kann man kurzfristig .tmp els Exefile registrieren, die Tmp-Datei als Programm starten und danach die registrierung wieder löschen. Wer glaubt schon, daß die Tmp-Datei ein Programm ist. Das ist übrigens ein guter Trick einen Trojaner zu verstecken. Wer glaubt schon, daß yxz.tro ein Trojanerprogramm ist. Allerdings ist das ein Trick made by Popov. Deshalb ist er nicht so bekannt. |
Sprichst aus Erfahrung?
Ich würde trotzdem nur die Extension ändern und dann das Prog ganz normal starten.
_________________ Viele Grüße
Jakob
|
|