AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Beenden eines Prozesses mittels ACL verhindern
Thema durchsuchen
Ansicht
Themen-Optionen

Beenden eines Prozesses mittels ACL verhindern

Ein Thema von Zacherl · begonnen am 18. Sep 2005 · letzter Beitrag vom 10. Mai 2007
Antwort Antwort
Seite 2 von 3     12 3      
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Beenden eines Prozesses mittels ACL verhindern

  Alt 29. Jul 2006, 15:52
Moin Alexander,

die Funktionen haben in der Regel einen Rückgabewert.
Den solltest Du mal auswerten.
Was der jeweilige bedeutet kannst Du ja im MSDN bzw. PSDK nachschlagen.

Ausserdem solltest Du auch mal Resourcenschutzblöcke einbauen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Beenden eines Prozesses mittels ACL verhindern

  Alt 29. Jul 2006, 15:52
@Alexander Roth:
läßt du es auch unter einen anderem Account laufen?

für den aktuellen Benutzer soll es ja dennoch möglich sein das zu beenden

Zitat von Olli:
Verbieten kannst du den Zugriff im ACL aber schonmal für alle außer dem Benutzer in dessen Kontext du läufst. Absolutismen gibt es eben nicht
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Alexander Roth
Alexander Roth

Registriert seit: 17. Mai 2004
Ort: Kenn
574 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Beenden eines Prozesses mittels ACL verhindern

  Alt 29. Jul 2006, 16:08
Upss...
probiere es sofort aus.
Alexander Roth
Ich bin umgestiegen auf: Lazarus und Ubuntu! Alles OpenSource!

Besuch doch mal: www.roth.us.ms
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

Re: Beenden eines Prozesses mittels ACL verhindern

  Alt 8. Sep 2006, 20:37
Zitat:
@Florian Bernd: Es gibt ein edit Feld rechts oben bei jedem Beitrag. Da muss man nicht immer einen neuen schreiben.
Ist mir bekannt Ein bisschen pushen muss sein

Die Frage ist übrigens immer noch offen ...

Florian
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Timi-loader

Registriert seit: 10. Okt 2005
Ort: Berlin
97 Beiträge
 
Delphi 7 Personal
 
#15

Re: Beenden eines Prozesses mittels ACL verhindern

  Alt 16. Nov 2006, 19:06
immernoch offen.. njo... und ich würs auch gernmal wissen. habe nämöich vor sone art lehrer-schüler-anwensung zu schreiben.
mfg
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

Re: Beenden eines Prozesses mittels ACL verhindern

  Alt 20. Nov 2006, 22:25
Ja, wollte ich auch mal machen so in der Art, bzw will ich noch machen, leider wurde ich immer auf Services verwiesen.
Die ACL Frage interessiert mich aber weiterhin brennend.

Florian
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

Re: Beenden eines Prozesses mittels ACL verhindern

  Alt 11. Dez 2006, 00:42
Und nochmal ein *push* nach längerer Zeit ... irgendwar wirds doch wohl wissen ...
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

Re: Beenden eines Prozesses mittels ACL verhindern

  Alt 30. Dez 2006, 22:34
Nochmal ein Versuch Irgendwann kommt schon eine Antwort

Kann es sein, dass man zu dem Code, den ich gefunden habe:
Delphi-Quellcode:
var
      lpSecDesc: pointer;
      lpACL: PACL;
      dwSecurityInfo: DWORD;
begin
      GetMem(lpSecDesc, SECURITY_DESCRIPTOR_MIN_LENGTH);
      InitializeSecurityDescriptor(lpSecDesc, 1);
      GetMem(lpACL, SizeOf(TACL));
      InitializeACL(lpACL^, SizeOf(TACL), 2);
      SetSecurityDescriptorDACL(lpSecDesc, True, lpACL, False);
      dwSecurityInfo:= DACL_SECURITY_INFORMATION;
      SetKernelObjectSecurity(GetCurrentProcess, dwSecurityInfo, lpSecDesc);
      FreeMem(lpACL);
      FreeMem(lpSecDesc);
end;
irgendwas mitt AddACL oder AddDeniedACL machen muss?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#19

Re: Beenden eines Prozesses mittels ACL verhindern

  Alt 31. Dez 2006, 03:36
So, der Florian hat mich breitgeschlagen nochmal zu gucken. Und obwohl wir erstmal den Admin nicht davon abhalten können unseren Prozeß zu killen (resistance is futile? ), hier mal die aktuelle Lösung.

Die Kernfunktion ist folgende:
Delphi-Quellcode:
function ForbidProcessAccess(hProcess: THandle): Boolean;
var
  lpSecDesc: PSECURITY_DESCRIPTOR;
  lpACL: PACL;
  dwAclLength: DWORD;
  lpWorldSid: Pointer;
begin
  // Default result is FALSE
  Result := False;
  // Allocate memory for the security descriptor
  lpSecDesc := PSECURITY_DESCRIPTOR(GlobalAlloc(GPTR, SECURITY_DESCRIPTOR_MIN_LENGTH));
  // Sanity check
  if (Assigned(lpSecDesc)) then
  try
    // Init the structure
    InitializeSecurityDescriptor(lpSecDesc, SECURITY_DESCRIPTOR_REVISION);
    // Sanity check the creation of the World/Everyone SID
    if (AllocateAndInitializeSid(SECURITY_WORLD_SID_AUTHORITY, 1, SECURITY_WORLD_RID, 0, 0, 0, 0, 0, 0, 0, lpWorldSid)) then
    try
      // Calculate the ACL size required
      dwAclLength := sizeof(ACL) + sizeof(ACCESS_DENIED_ACE) * 1 + {number of ACEs} GetLengthSid(lpWorldSid);
      // Allocate a buffer for the ACL
      lpACL := PACL(GlobalAlloc(GPTR, dwAclLength));
      // Sanity check
      if (Assigned(lpACL)) then
      try
        // Initialize it, telling the size available
        InitializeACL(lpAcl^, dwAclLength, ACL_REVISION);
        // Add a "Deny ACE" to it
        if (AddAccessDeniedAce(lpAcl^, ACL_REVISION, PROCESS_ALL_ACCESS, lpWorldSid)) then
          // Set the ACL as part of the SD
          if (SetSecurityDescriptorDacl(lpSecDesc, True, lpACL, False)) then
          begin
            // Set the new SD
            // OWNER_SECURITY_INFORMATION should be given in the flags if the owner was set
            // using SetSecurityDescriptorOwner()
            Result := SetKernelObjectSecurity(hProcess, DACL_SECURITY_INFORMATION, lpSecDesc);
          end;
      finally
        // Clean up after us
        GlobalFree(HGLOBAL(lpACL));
      end;
    finally
      // Clean up after us
      FreeSid(lpWorldSid);
    end;
  finally
    // Clean up after us
    GlobalFree(HGLOBAL(lpSecDesc));
  end;
end;
Man sieht wiedermal meine Vorliebe für GlobalAlloc (das nullt mir nämlich den Puffer auch gleich aus ... und ich mag es richtig schön ausgenullt). Aus Globalisierungsgründen wie immer auf Englisch dokumentiert

So, diese Funktion ruft man nun auf und schon kann der unprivilegierte Benutzer den Prozess nicht mehr killen. Allerdings sollte vermutlich am Owner noch gefeilt werden?!

Im Anhang das komplette Projekt (getestet auf BDS2K6) als DPR. Es enthält auch die benötigten und nicht von Delphi bereitgestellten Typendeklarationen usw.!

Daß es funzt kann man hier nachvollziehen: http://assarbad.net/de/stuff/temp/KillMeSoftly/

Es existiert auch noch eine weitere Funktion, die ursprünglich dazu gedacht war das Problem zu lösen, aber das Weglassen von "Allow ACEs" hat es eben nicht gebracht, so daß wir auf "Deny ACEs" ausweichen mußten.

Lizenz: keine! (PUBLIC DOMAIN, keine Garantien oder Haftung meinerseits) - Namensnennung erwünscht.
License: none! (PUBLIC DOMAIN, no guarantees or liability from my side) - Attribution appreciated.

Guten Rutsch (nur nicht auf der Straße, so wie ich vor zwei Wochen -> Gehirnerschütterung),
Angehängte Dateien
Dateityp: dpr killmesoftly_651.dpr (5,1 KB, 72x aufgerufen)
  Mit Zitat antworten Zitat
nitschchedu

Registriert seit: 24. Mär 2006
300 Beiträge
 
Delphi 7 Professional
 
#20

Re: Beenden eines Prozesses mittels ACL verhindern

  Alt 15. Mär 2007, 11:57
Wie sieht es eigentlich aus? Habt ihr es geschaft den Bösen Admin davon abzuhalten den Process zu Beenden ?

Könnte man auch einen Bestimmten Benutzer nur noch die rechte zum Beenden geben ?
Programmieren ..... .
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 19:06 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