Autor Beitrag
scrooge
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 200



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: Sa 18.10.03 18:59 
Hi!


Das geht z.B mit EXE Bundle:

www.webtoolmaster.com/downloadd.htm
Ja-Pa
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 458

Win XP, Suse 9.3
D1, D3, D5 Std, D7 Pro, D2005 Pers, Kylix 3
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 200



BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 200



BeitragVerfasst: 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
if CreateProcess(nil, PChar(ParamStr(0)), nilnil, False, CREATE_SUSPENDED, nilnil, 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):
ausblenden 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) >= 0then

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 200



BeitragVerfasst: 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 ??