Zitat von
peanut:
CreateProcess
CreateProcessA
CreateProcessW
CreateProcessAsUser
CreateProcessAsUserA
CreateProcessAsUserW
CreateProcessWithLogonW
LoadLibrary
LoadLibraryA
LoadLibraryW
LoadLibraryEx
LoadLibraryExA
LoadLibraryExW
GetProcAddress
CreateRemoteThread
Soso ... soll ich mal aufzählen, welche bösen Dinge man mit genau dieser Geschichte machen kann?
... dann wird hier gleich wegen Malware-Gefahr zugemacht.
Zitat von
peanut:
Ich habe das mittels einer
DLL gelöst, die an jeden gestarteten Prozess gehängt wird. Hierfür habe ich einen Dienst installiert, der diese beim Hochfahren an jeden Prozess "klebt". Die
DLL sorgt dann entsprechend dafür, dass sie auch in alle weiteren Prozesse geladen wird, die mit diesen ersten Prozessen erzeugt werden. Das funktioniert auch ganz gut - leider nur, wenn genau ein Benutzer aktiv ist! Sobald man unter Windows XP auf "Benutzer wechseln" geht, wird die
DLL nicht an die Prozesse gehängt, die im Zugang des zweiten Benutzers ausgeführt werden, obwohl in winlogon.exe etc. auch meine
DLL steckt, die eigentlich dafür sorgen soll, dass sie in jeden neuen Prozess geladen wird.
Also du solltest definitiv deine Methoden überdenken. Sich in
jeden Prozess einzuklinken ist hirnrissig. Sich in Winlogon einzuklinken würde ich noch schlimmer bewerten, aber mir fällt kein halbwegs diplomatisches Wort ein, also laß ich es.
Eine
DLL führt Code immer im Kontext des Prozesses aus - eine
DLL selbst besteht nur aus Daten und totem Code. Erst in einem Prozeß (noch exakter: in einem Thread!) wird diesem Code Leben eingehaucht. Wenn nun aber dein Code verursacht, daß Winlogon abschmiert, regt sich der Session-Manager (SMSS.EXE) darüber so auf, daß er nen Herzkasper kriegt und dem System sagt: mach blau, mir hat jemand meinen Freund abgemurkst. Und das System macht dann auch blau - mit nem Bluescreen.
Zitat von
peanut:
Meldet man sich dagegen ab, ohne "Benutzer wechseln" und meldet sich dann mit einem anderen Benutzer wieder an, wird die
DLL wie gewünscht angehängt. Gleiches gilt für "Ausführen als", auch das funktioniert anstandslos.
Was geht hier schief? Verwendet Windows versteckte Funktionen, so dass mein hooking hier nicht greift?
Windows verwendet nur mehrere
WindowStations - mehr nicht. Wenn du rauskriegst, wie MS exakt die TS implementiert, kannst du vielleicht ein Vermögen machen ...
Such mal nach
AppInitDlls (siehe auch
AutoRuns Sysinternals).