AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi JWSCL: Prozess von Dienst starten im Benutzerkontext

JWSCL: Prozess von Dienst starten im Benutzerkontext

Ein Thema von Zacherl · begonnen am 9. Mai 2011 · letzter Beitrag vom 10. Mai 2011
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

JWSCL: Prozess von Dienst starten im Benutzerkontext

  Alt 9. Mai 2011, 13:40
Hallo,

ich habe folgenden Code gefunden, welcher einen Prozess mit erhöhten Rechten aus einem Dienst heraus startet:
http://www.delphipraxis.net/793777-post29.html

Dies funktioniert soweit wunderbar, bis auf eine kleine Sache. Der Neue Prozess läuft im SYSTEM Kontext. Problemstellung ist ein unsigniertes Autostart Programm, welches zwingend Adminstratorrechte benötigt ohne UAC Fenster zu starten. Auf eingeschränkten Konten muss dies nicht funktionieren.

Kenne mich auf dem Gebiet nicht besonders aus, aber ist es irgendwie möglich das Token so zu modifizieren / zu erstellen, dass der vom Service gestartete Child Prozess im Kontext des angemeldeten Benutzers ausgeführt wird?

Bisher entdeckte Probleme beim SYSTEM Kontext waren, z.b. falsche Rückgabe von GetUserName(). Gut, das ist bisher nichts Großartiges, aber ich vermute es könnten da durchaus noch weitere Probleme anfallen.

Viele Grüße
Zacherl
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#2

AW: JWSCL: Prozess von Dienst starten im Benutzerkontext

  Alt 9. Mai 2011, 13:50
Das geht ja auch schon fast in diese Richtung
http://www.delphipraxis.net/160220-%...st-heraus.html
und von da kommt man dann hierhin
http://www.delphipraxis.net/109191-p...ich-mal-3.html
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: JWSCL: Prozess von Dienst starten im Benutzerkontext

  Alt 9. Mai 2011, 13:55
Das ist ja der Code, den ich gefunden habe und verwende

Hier wird zwar der Environment Block mit allen Benutzerpfaden wie %userprofile% und so weiter schön übernommen, bloß läuft der Child Prozess im SYSTEM Kontext und nicht in dem des Benutzers.

Sagen wir mal so: Wenn mir jemand, der sich auskennt, mit hoher Wahrscheinlichkeit vorraussagen kann, dass ich außer mit GetUserName() keine weiteren großartigen Probleme haben werde, dann bin ich auch zufrieden mit der jetzigen Lösung
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: JWSCL: Prozess von Dienst starten im Benutzerkontext

  Alt 9. Mai 2011, 14:08
Falsche Beutzerordner, falscher Registry Hive, falsche Benutzerrechte, ... Eben alles was dir mit einem falschen Benutzer passiert.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: JWSCL: Prozess von Dienst starten im Benutzerkontext

  Alt 9. Mai 2011, 14:23
Falsche Beutzerordner, falscher Registry Hive, falsche Benutzerrechte, ... Eben alles was dir mit einem falschen Benutzer passiert.
Okay dann muss ich auf jeden Fall eine andere Lösung finden. Irgendwie muss es ja schließlich möglich sein den Prozess zwar UAC elevated aber im richtigen Benutzerkontext zu starten.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#6

AW: JWSCL: Prozess von Dienst starten im Benutzerkontext

  Alt 9. Mai 2011, 16:33
Also die angegebenen Funktionen bringen bei mir eine Anwendung zu Tage, die (WinXP) als Administrator (bin ich) läuft aus einem Dienst, der eindeutig unter System läuft. Außerdem stimmt bei mir auch der Environment-Block (Dienst schreibt den nämlich richtig in eine Log-Datei). Den Reg-Hive hab ich noch nicht getestet, aber da das auch unter Win7 läuft, denke ich mal, dass mein Code funktioniert hat.

Irgendwie muss es ja schließlich möglich sein den Prozess zwar UAC elevated aber im richtigen Benutzerkontext zu starten.
Das sollte das schwerere sein. Hat die Anwendung das richtige Manifest?


Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

AW: JWSCL: Prozess von Dienst starten im Benutzerkontext

  Alt 9. Mai 2011, 16:45
Bei mir unter Win 7 64 Bit ist sowohl der Service als auch der neue Prozess unter SYSTEM im Taskmanager angezeigt. Der Child Prozess gibt SYSTEM auch bei GetUserName() zurück. Das Benutzerverzeichnis wird korrekt verwendet, der Registry Hive ist allerdings komplett falsch gesetzt, also unbrauchbar für mich.

Das ganze soll ohne Manifest und ohne Dialog ablaufen.

Ich habe gelesen, dass ein normales Token ab Vista immer ein LinkedToken besitzt. Wenn man dieses an CreateProcessAsUser() übergibt, SOLLTE der Prozess elevated gestartet werden. Das Problem ist nur, dass folgender Code:
Delphi-Quellcode:
Result := WTSQueryUserToken(WTSGetActiveConsoleSessionId, hUserToken);
  if (not Result) then Exit;
  Result := GetTokenInformation(hUserToken, TokenLinkedToken, @hLinkedToken,
    SizeOf(hLinkedToken), ReturnLength);
jedes Mal mit FehlerCode 1312 "A specified logon session does not exist. It may already have been terminated." abbricht. Eventuell liegt es daran, dass ich die UAC deaktiviert habe? Ich teste das gleich mal auf ner VM. Bin für weitere Vorschläge dankbar!
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#8

AW: JWSCL: Prozess von Dienst starten im Benutzerkontext

  Alt 9. Mai 2011, 16:47
Leider kann ich das Problem nicht nachvollziehen. Alle Programme, die MEIN Dienst startet, sagen mir auch, dass sie unter dem aktuellen Benutzernamen laufen (höhere Rechte hab ich jetzt nicht geprüft).
Hast du vielleicht einen Fehler in deinem Code? - Hat CreateProcessAsUser das UNICODE-Flag? - Dump mal den Environment-Block. Steht da wenigstens alles richtig drin?

Bernhard

PS: Mit aktueller Benutzername ist auch gemeint, dass sowohl ProcessExplorer, TaskManager als auch GetUserName() das gleiche Ergebnis liefern.
Bernhard
Iliacos intra muros peccatur et extra!

Geändert von rollstuhlfahrer ( 9. Mai 2011 um 17:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

AW: JWSCL: Prozess von Dienst starten im Benutzerkontext

  Alt 9. Mai 2011, 17:13
Fuuuuu Ich hätts wissen müssen. Das Ermitteln des LinkedTokens schlägt nur deshalb fehl, weil ich die UAC aus habe. Trotzdem vielen Dank an den aussagekräftigen Fehlercode Windows

Ich poste gleich mal einen funktionierenden Code mit ordentlicher Überprüfung:
http://www.delphipraxis.net/160355-s...xt-starten.htm
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl ( 9. Mai 2011 um 18:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#10

AW: JWSCL: Prozess von Dienst starten im Benutzerkontext

  Alt 9. Mai 2011, 21:05
... weil ich die UAC aus habe.
Schäme dich dafür. ^^

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:37 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