Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi EXE aus recource starten ohne extra eine Datei zu erzeugen? (https://www.delphipraxis.net/4934-exe-aus-recource-starten-ohne-extra-eine-datei-zu-erzeugen.html)

magicshadow 17. Mai 2003 11:31


EXE aus recource starten ohne extra eine Datei zu erzeugen?
 
Halo, ist es möglich eine exe aus einer recource zu starten, ohne diese erst in eine extra Datei zu speichern?

Wäre super!

Luckie 17. Mai 2003 12:45

Ja ist es, aber nur unter NT-basierenden Systemen, also XP ginge.

magicshadow 17. Mai 2003 14:17

Ist nur für nt-systeme :)

Wäre super, wenn ich erführe wie! :bounce1:

Luckie 17. Mai 2003 14:21

Liste der Anhänge anzeigen (Anzahl: 1)
Glaub mir das willst du nicht wissen. Ich kann dir gerne Quellcode geben, aber ich denke damit wirst du nicht viel anfangenkönnen.

Ich hänge das mal an.

magicshadow 17. Mai 2003 15:31

na ja, durchsehen tuh ich echt nicht, kann man ja irgendwie auch nciht debuggen :-? aber funsen tuts, also kann ich's nutzen!
THX :)

Luckie 17. Mai 2003 15:37

Ich würde davon abraten etwas zu benutzen, was ich nicht verstehe.

magicshadow 17. Mai 2003 15:46

Na ja, ist doch nicht ganz das was ich brauche, kann man das so abändern, dass das gestarteteprogramm auch läuft, wenn die exe beendet wird?

Also mein eigentliches Vorhaben ist es eine Artsicherungssoftware für die Rechner unserer Schule zu programieren, leider bringt diese Software nichts, solange man sie mit kill.exe beenden kann, da dieses programm irgendwei alles killen kann was so läuft (sogar kritische Dienste) sehe ich nur den weg über eine Anwendung die keine exe hat, damit wird sie im taskmanager und so ziemlich allen ähnlichen Programmen nicht gelistet und kann also auch nicht beendet werden.

Von Treibern habe ich keine ahnung (also lass ich die finger von) und ne andere Möglichkeit ist mir nicht eingefallen, vieleicht kennt ja noch eine eine?

Luckie 17. Mai 2003 15:51

Auch wenn du die Anwendung aus dem Speicher startest, wird sie im Taskmanger gelistet, meine ich.

magicshadow 17. Mai 2003 16:05

also bei mir hab ich sie nicht gefunden, wie sollte sie auch, sie hat ja keinen exe-namen, oder sehe ich das falsch? Gelistet wird nur die inmem.exe und diese soll ja nach dem start des eigentlichen programmes beendet werden.

Luckie 17. Mai 2003 16:08

Hast recht, war auch nur eine Vermutung.

Motzi 19. Mai 2003 13:38

@Luckie: verstehst du den Code?
Du hast mir den Code ja auch schonmal geschickt, ich hatte damals aber grad nicht viel Zeit und hab nur kurz reingeschaut... hab mir das jetzt mal genauer zu Gemüte geführt (allerdings nur im Notepad, da ich im Zivi kein Delphi hab) und muss sagen ein äußerst interessanter Ansatz! Werd mir das zu Hause nochmal näher anschaun müssen!!

ShadowCaster 19. Mai 2003 14:03

der Ansatz mit den Sektinoen ist sehr gut. Wenn du mir jetzt noch sagen könntest, wie ich die Checksumme des PE-headers der Exe berechne, wäre ich der glücklichste Delphi-Coder der Welt ... lol Danach such ich nämlich. Der Rest mit dem PE-Header und den Sektionen ist relativ einfach im Code zu verstehen. Du gehst alle sektionen durch und schaust ob die read- oder writeable sind und alloziierst dann dementsprechend den RAM wenn ich das richtig sehe. aber ich :chat: laber wieder zuviel ;) wäre cool wenn du hilfe wüsstest.

ShadowCaster 22. Mai 2003 13:03

Achja, Luckie, in deinem Proggie hab ich noch einFehler im Exe-Header gefunden.


TImageFileHeader sollte so aussehen:

Code:
  PImageFileHeader = ^TImageFileHeader;
  TImageFileHeader = record
    PEName              : array[1..4] of Char;
    Machine             : WORD;
    NumberOfSections    : WORD;
    TimeDateStamp       : DWORD;
    PointerToSymbolTable : DWORD;
    NumberOfSymbols     : DWORD;
    SizeOfOptionalHeader : WORD;
    Characteristics     : WORD;
  end;
Mich wundert, dass dein Programm so überhaupt läuft :freak:

Solltest du vielleicht im Download ändern. :nerd: Anonsten isses echt goil.

Motzi 22. Mai 2003 13:46

Zitat:

Zitat von ShadowCaster
Achja, Luckie, in deinem Proggie hab ich noch einFehler im Exe-Header gefunden.


TImageFileHeader sollte so aussehen:

Code:
  PImageFileHeader = ^TImageFileHeader;
  TImageFileHeader = record
    PEName              : array[1..4] of Char;
    Machine             : WORD;
    NumberOfSections    : WORD;
    TimeDateStamp       : DWORD;
    PointerToSymbolTable : DWORD;
    NumberOfSymbols     : DWORD;
    SizeOfOptionalHeader : WORD;
    Characteristics     : WORD;
  end;
Mich wundert, dass dein Programm so überhaupt läuft :freak:

Solltest du vielleicht im Download ändern. :nerd: Ansonsten isses echt goil.

Aus dem MSDN:
Zitat:

Zitat von MSDN
IMAGE_FILE_HEADER Fields

Code:
WORD Machine
  The CPU that this file is intended for.
WORD NumberOfSections
  The number of sections in the file.
DWORD TimeDateStamp
  The time that the linker (or compiler for an OBJ file) produced this file.
DWORD PointerToSymbolTable
  The file offset of the COFF symbol table.
DWORD NumberOfSymbols
  The number of symbols in the COFF symbol table. See above.
WORD SizeOfOptionalHeader
  The size of an optional header that can follow this structure.
WORD Characteristics
  Flags with information about the file.

Link: http://msdn.microsoft.com/library/de..._peeringpe.asp

Die Deklaration im Source von Luckie ist also korrekt..!
BTW: der Source stammt gar nicht von Luckie, steht auch im Readme-File...

ShadowCaster 22. Mai 2003 14:18

Da hat Microsoft aber gehörigen Mist gebaut! Ich hab 30 anderer Abhandlungen übers PE-Format. Die sagen ALLE was anderes und zudem hab ich nach Luckies(oder von wem auch immer das Programm ist) Programm-Exeheader beim Debuggen da an der Stelle Fehler rausbekommen. Die Anzahl der Sektionen, der größe des optionalen Headers war 0 und auch sonst im optionalen Header war alles 0. Habe ich diesen zusätzlichen wert noch hinzugefügt, wurde jede Exe meines Betriebssystems richtig eingelesen.

da hätte ich gerade mal eine andere Frage:

Nehmen wir an, ich hab den Sectionheader ausgelesen. Da ist ja eine Virtual-Address mit bei. In jeder Abhandlung steht, dass die was mit dem Laden der Sektion zu tun hat. Das ist ja alles schön und gut, nur wie krieg ich jetzt raus ab welcher Adresse die Sektion im Programm anfängt und wo sie wieder aufhört? Wenn ich das weiß, kann ich nämlich Records drüber legen und dann passt das auch. Aber so weiß ich es nicht. VirtuallAddress scheint es jedenfalls nicht zu sein. Bei mir kommt da immer Müll raus. :(

Luckie 22. Mai 2003 14:34

Ist nicht mein Source. Habe ich auch nie behauptet. Und das Nico da einen Fehler einbaut, halte ich für sehr unwahrscheinlich. Götter machen keine Fehler. :wink:

ShadowCaster 22. Mai 2003 14:41

selbst wenn da ein Fehler ist... ist das so schlimm? Das war doch nur gut gemeint von mir. Achja, könntest du meine Frage bitte bittte bitte noch vom vorherigen Posting beantworten, wie ich an die Dateiadressen der Sections rankomm?


Meine Herleitung sieht folgendermaßen aus, warum auch dieser "Nico" einen Fehler machen kann:

Jedes Programm enthält mindestens ein Fehler.
Meine Herleitung: Jeder Programmierer, der ein Programm schreibt, macht mindestens einen Fehler :mrgreen:


also ich freu mich auf die Antwort auf die in diesem Beitrag wiederholt gestellte Frage :dancer:


Nachtrag: Offenbar war doch kein Fehler drinnen, hab gesehen, dass in den NT-Headers noch ein DWORD-Wert vorne rangestellt wird. Der entspricht wohl dem Fehlenden. Asche über mein Haupt (mal wieder :freak: )

Habs getestet, die Header sind OK!

Luckie 22. Mai 2003 14:53

Dass Beispiel funktioniert sowieso nur unter NT-basierenden Systemen.

Und wenn ich dir antworten könnte, würde ich es auch tun. Du brauchst mich nicht extra auffordern. Aber ich habe von den Zeugs keine Ahnung. Ich war nur eben im besitzt dieses Demos von Nico.

Sicher macht Nico auch Fehler, aber du kennst Nico anscheinend nicht. :mrgreen:

ShadowCaster 22. Mai 2003 15:16

Ok, die Records für die Sections hab ich eigentlich und ermitteln, wann ich welchen Record einsetze kann ich auch.

Die Größe einer Section ist: SectionSize := SizeOfRawData - VirtualSize

Das hab ich jetzt schonmal rausgefunden. Allerdings brauch ich jetzt noch die Formel, wie ich die Beginnadresse dieser Sektion errechnen kann. Wenn ich das hätte, wär ich sogut wie fertig mit meinem PE-Dumper.

Motzi 22. Mai 2003 16:53

Woher hast du denn deine Informationen bezogen? Am besten ladest du dir die CHM-PE-Doku von Assarbad runter (ist nur eine kompilierte Version der PSDK/MSDN Dokus. Und auf der vorherigen Seite hab ich dir ja den Link zur MSDN-Seite der PE-Doku gepostet...

ShadowCaster 23. Mai 2003 07:44

danke Motzi. Die Berechnung im vorherigen Posting von mir war übrigens fehlerhaft. es gibt eine virtual address für die Rawdata der Section, das ist der Beginnpunkt.

hab den Dreh mit den Sections jetzt raus und weiß jetzt zu 90% wie der Virus arbeitet. Jaja.. der Programmierer war ein ganz gewitzter. Die Virusdll hat zwei Einstiegspunkte. Ein Teil in jeder infizierten Exe wird nicht verschlüsselt. Das ist die Section der Dll die als Loader funktioniert. Wird die Exe gestartet und die Dll ausgeführt, wie sie ganz normal wie eine Dll gestartet mit dem Unterschied, dass der Einstiegspunkt jetzt ein anderer ist, der jedoch vorher in der exe verschlüsselt war. Falls ihr das nicht blickt, :freak: ich werd nächste Woche mal ne kleine Page ins Netz stelln. Dann kriegt ihr die Infos :mrgreen:

Ansonsten hab ich den Dreh jetzt glaub ich 2/3 mit dem Exe-Format raus. Ich muss nurnoch den ursprünglichen Einstiegspunkt der Exe ermitteln und das dürfte nicht allzu schwer werden (muss ja nur in der infizierten Section danach suchen) und ihn in den PE-Header schreiben. Ansonsten hab ich gestern in ner Exe die virusinfizierte Sektion entfernt und das bei jeder infizierten Exe erfolgreich. Noch ein paar kleinere (jedoch schwierigere) Änderungen und wolla ich hab einen Remover :)

danke nochmal.. ich denke (ich hoffe) ich werd jetzt allein klar kommen. :chat:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz