| Autor |
Beitrag |
scrooge
      
Beiträge: 200
|
Verfasst: Sa 18.10.03 18:55
Hi,
weiß jemand, wie man zwei Exe miteinander verschmelzen lässt ?? (Um schon mal vorher die Frage zu beantworten: Nein, ich will keinen Virus oder sowas in der Art schreiben). Hab mal gehört man müsste die in eine Datei quetschen, den Einsprungspunkt auf die hinzugekommenene Anwendung umleiten und dann per jmp den eigentlichen Einsprungspunkt
der breits vorhandenen Anwendung aufrufen (Und wenn das jetzt alles Quatsch war - Habt Mitleid mit nem Asembler-ANFÄNGER).
|
|
toms
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: Sa 18.10.03 18:59
|
|
Ja-Pa
      
Beiträge: 458
Win XP, Suse 9.3
D1, D3, D5 Std, D7 Pro, D2005 Pers, Kylix 3
|
Verfasst: So 19.10.03 10:23
Wenn die beiden Exes nur selten aufgerufen werden sollen oder es nicht schlimm ist, wenn es ein bisschen länger dauert (z.B. bei einem Setup-Programm), dann könnte man auch (habe ich so gemacht) die beiden Exes in ein selbstentpackendes Archiv, das sich ohne einen Dialog in einen temporären Ordner entpackt, packen. Das geht zum Beispiel mit WinRAR. Assembler kann ich allerdings auch nicht 
_________________ Der Autor dieses Textes haftet nicht für Schäden an Soft- oder Hardware
oder Vermögensschäden, die durch das Benutzen des Textes entstehen.
|
|
scrooge 
      
Beiträge: 200
|
Verfasst: So 19.10.03 13:36
Exe-Bundle ist ganz gut, aber ich wollte kein Program, was zwei Exe zusammenfügt und sich dann als Installationsprogramm ausgibt, ich wollte ein Programm schreiben, was auch zwei Exe zusammenführt, aber so, dass sie nacheinander ausgeführt werden, wenn man die so neu enstandene Exe ausführt.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 19.10.03 15:10
Pack die zweite Exe als Binär-Ressource in die erste rein und extrahier sie zur Laufzeit. Ausführen kannst du sie dann mit Shellexecute(Ex) oder CreateProcess.
|
|
scrooge 
      
Beiträge: 200
|
Verfasst: So 19.10.03 19:00
Heißt extrahieren, lesen und speichern (irgendwo auf der Festplatte), oder einfach nur in den Speicher laden
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 19.10.03 22:14
Lesen und Speichern auf der Fetsplatte. Unter NT könnte man die Exe auch aus dem Speicher starten, aber warum?
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mo 20.10.03 10:16
| Luckie hat folgendes geschrieben: | | Unter NT könnte man die Exe auch aus dem Speicher starten, aber warum? |
Nicht direkt... gestartet werden muss sie auch von der Festplatte, aber man kann im Nachhinein das MMF-File der Exe freigeben und das neue Image in den Adressraum laden. (Vorgehensweise von inmemexe)
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 20.10.03 14:51
Nope, ist schon richtig aus dem Speicher: www.luckie-online.de/files/exports/ -> immemexe.zip Ist von Nico.
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mo 20.10.03 18:27
Nope... erstens ist es nicht wirklich von Nico sondern von Gary Nebbett, Nico hat es nur auf Delphi übersetzt, und zweitens startet sich das Prog einfach nur selbst wieder:
Delphi-Quelltext 1:
| if CreateProcess(nil, PChar(ParamStr(0)), nil, nil, False, CREATE_SUSPENDED, nil, nil, StartupInfo, ProcessInfo) then |
Holt sich den Thread-Context und anhand des Thread-Context die Adresse an der die MMF der Exe erstellt wurde und gibt dieses frei (per native API):
Delphi-Quelltext 1: 2: 3: 4: 5:
| Context.ContextFlags := CONTEXT_INTEGER; if GetThreadContext(ProcessInfo.hThread, Context) and ReadProcessMemory(ProcessInfo.hProcess, Pointer(Context.Ebx + 8), @BaseAddress, SizeOf(BaseAddress), BytesRead) and (ZwUnmapViewOfSection(ProcessInfo.hProcess, BaseAddress) >= 0) then |
Reserviert dann per VirtualAllocEx Speicher an der ImageBase-Adresse der Exe die in den Speicher geladen werden soll (diese Adresse muss der ImageBase entsprechen, da man ja die Exe sonst verschieben und etliche Adressen neu berechnen müsste (-> Realloc-Table)), dann wird die neue Exe direkt in den Adressraum geschrieben (WriteProcessMemory), der Thread-Context entsprechend geändert und wieder gesetzt und der Thread gestartet (resumed).
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
scrooge 
      
Beiträge: 200
|
Verfasst: Mo 20.10.03 19:35
Schon mal danke für die reichlcieh Posts. Hab mir mal die Methode mit dem als binär-Ressource in die Exe... ausgesucht. Fragt sich jetzt nur, wie ich erstens (wollte da ganze ja selbst machen) die zweite Exe in die erste reinkriege (Kenn mich zum Them Ressourcen nämlcih nur sehr schwach aus) und die zur Laufzeit auslese, speichere etc. Außerdem könnte ich mir denken, dass das sehr viel Aufwand darstellt. Wäre da die Methode (weiß jemand wie ??) die Einsprungsadresse zu ändern usw. nicht vielleicht schneller und sogar weniger Arbeit ??
|
|