![]() |
JEDI Windows Security Code Library
Hallo Delphianer,
dies ist die erste öffentliche Bekanntmachung für etwas das ich mittlerweile fast ein Jahr entwickle. Zuvor hatte ich bereits schoneinmal eine ![]() Was ist ![]() Die JWA ist eine Bibliothek, die versucht soviele original Windows Header Dateien (C-Header) wie möglich nach Delphi zu konvertieren. Was ist ![]() Die JWSCL ist eine reine Klassenbibliothek, die die Programmierung mit der Windows API (in C geschrieben) vereinfachen soll. Darunter fallen derzeit folgende Konstrukte: *Erkennung der Windows Version *Token **Impersonation (Personifizierung) **Benutzerlogin *SID *Access Control List *Security Descriptor (Sicherheitsdeskriptor) **Owner, Group, DACL, SACL *WindowStation *Desktop *LSA (Teile) *Rights mapping *Gesicherte Objekte z.B. Dateien, Registry (+Vererbung), aber auch alle anderen Handles *Credentials (Login Dialog) *Verschlüsselung (MS Crypt API) *Known SIDs *Privilegien *Security Dialogs (Sicherheitsdialog, wie man ihn bei der Dateisicherheit des Explorers sieht) *Terminal Sessions *Unicode + Ansicode *Vista Elevation *Vista Integrity Level In Entwicklung: *Terminal Server (u.a. Session shadowing) (40%) *Secure Private Objects (Sicherung von benutzerdefinierten Strukturen mit Sicherheitsdeskriptor + opt. Vererbung) (20%) *Group Policy (0%) *Active Directory (0%) *und weitere Die JWSCL gibt es derzeit im BETA Status über Subversion (Versionsverwaltung) von SourceForge. Sie ist unter der GPL (wenn auch noch nicht in der Dokumentation erwähnt) oder MPL als OpenSource freigegeben. Zusätzlich gibt es noch eine erweiterte Version der JEDI API Lib, die in demselben Subversion Repository liegt. Sie findet Verwendung in der JWSCL. (Anonymer Zugriff) Die URL ist über ein SVN Client, wie ![]() edit:Auf allgemeine Anfrage ist nun der Download des aktuellen ![]() Die JWSCL verwendet die neue JEDI API Lib (JWA). Dazu muss die JWA als Paket kompiliert werden. 1. Öffne die Projektgruppe im Ordner jwaapi\trunk\Packages, was zu deiner Delphiversion passt. Oder wenn nicht vorhanden, verwende eine ältere Version. 2. Kompiliere alle Pakete. Die DCU Dateien werden in einem Ordner "Bin" gespeichert. Dieser ist nochmals in vier weitere Unterordner aufgeteilt, die die verschiedenen Versionsarten (Debug/Release, Dynamic/Static) repräsentieren. Die Dateien "JwaWindows.dcu" und "JwaVista.dcu" sind dann die entscheidenden Teile. 3. Kopiere dir den Pfad-Text von einem dieser vier Ordner. Ich empfehle für die Entwicklung Dynamic\Debug. Dieser Pfad wird der Suchpfad für JediAPI DCU Dateien in deinen neuen Projekten. Diese Vorgehensweite ist empfehlenswert im Gegensatz zu der direkten Einbindung der Quelldateien. In diesem Fall müsste bei jeder Projekterzeugung alle Jedi API Lib Dateien erneut kompiliert werden - das dauert. Die Verwendung der JWSCL ist dann einfach. Man muss nur den Suchpfad des eigenen Projekts noch durch den Pfad zur Quelle "jwscl\trunk\source" erweitern. So, das wars für die Vorbereitung. Einige Beispiele sind bereits in den Ordnern. Der Rest ist durch Ausprobieren erfahrbar :D Zum BETA Status: BETA Status bedeutet für die JWSCL, dass es noch viele unentdeckte Fehler gibt. Daher ist es nicht ratsam blindlings die Bibliothek in wichtigen Projekten einzusetzen. Ich verbiete es jedoch nicht! Ich werde mich jedoch bemühen, Fehler so gut wie möglich zu korrigieren. Ich rufe aber inständig andere Entwickler auf mich bei der Arbeit zu unterstützen. Tester suche ich daher weniger als Helfer. Zur Kritik: Ich nehme nur konstruktive Kritik an. Zur Kommunikation: Eine neue JEDI API Webseite ist im Aufbau. Ein Blog wird auf Assarbads Server entstehen, der auch Benutzerkommentare zulässt. Wer Fragen hat, kann mich daher ersteinmal hier im Forum erreichen. Zur Hilfe: Wie schon geschrieben, suche ich eher Mitentwickler als reine Tester. Ich suche aber auch Leute, die Beispiele für die JWSCL schreiben. Zudem können Artikel/Beispiele im neuen Blog abgelegt werden. Zu meiner Hilfe: Ich kann leider nur in Sachen JWSCL oder JWA helfen. Direkte Hilfe zur Unterstützung in Programmierung für Windows Sicherheit kann ich nicht geben. Bitte dazu das Forum benutzen. So ich hoffe nun, dass Programmierung in Windows Sicherheit etwas einfacher wird.... |
Dateisicherheit lesen.
Dieser Code ermittelt, welche Rechte für eine Datei möglich sind.
Delphi-Quellcode:
program ReadFileSecurity;
{$APPTYPE CONSOLE} uses SysUtils, Dialogs, Controls, JwaWindows, JwsclTypes, JwsclExceptions, JwsclConstants, JwsclMapping, JwsclVersion, JwsclProcess, JwsclSid, JwsclAcl, JwsclCredentials, JwsclDescriptor, JwsclToken, JwsclKnownSid, JwsclAccounts, JwsclSecureObjects, JwsclStrings; function CheckAccessToFile( DesiredAccess: DWORD; const FileName: WideString): Boolean; var FileObject : TJwSecureFileObject; begin FileObject := TJwSecureFileObject.Create(FileName); try result := FileObject.AccessCheck(DesiredAccess); finally FileObject.Free; end; end; function CheckMaximumAccessToFile(const FileName: WideString): DWORD; var FileObject : TJwSecureFileObject; PrivilegeSet: TJwPrivilegeSet; AccessStatus: boolean; begin FileObject := TJwSecureFileObject.Create(FileName); try FileObject.AccessCheck( MAXIMUM_ALLOWED,//DesiredAccess: TJwAccessMask; PrivilegeSet,//out PrivilegeSet: TJwPrivilegeSet; result,//out GrantedAccess: TJwAccessMask; AccessStatus,//out AccessStatus: boolean; nil//const ClientToken: TJwSecurityToken = nil); ); finally PrivilegeSet.Free; FileObject.Free; end; end; var AccessMask : DWORD; FileName : String; begin FileName := ParamStr(1); if Length(FileName) = 0 then FileName := ParamStr(0); writeln('Check access for '+FileName); try if CheckAccessToFile(FILE_ALL_ACCESS,FileName) then writeln('Full control allowed') else writeln('Full control denied'); except On E : Exception do Writeln(E.Message); end; try AccessMask := CheckMaximumAccessToFile(FileName); writeln('Maximum access possible: ['+TJwSecurityFileMapping.MapAccessMaskToString(AccessMask)+']'); except On E : Exception do Writeln(E.Message); end; Writeln('[Hit return]'); readln; end. |
Re: JEDI Windows Security Code Library
Chris, congratulations on this first release! :hello: :hello:
To all DP members: take a look at the library, Chris has invested a lot of his time in this library and I can only say he did an excellent job. Never before was it soo easy to use Win32 API (security related) with Delphi. Come on, let's hear your reactions! |
Re: JEDI Windows Security Code Library
huhu!
hört sich ja schonmal super an. leider komme ich im moment nicht an die sourcen da ich hier hinter einer dicken firewall sitze.. schön wäre wenn du vielleicht mal nen stand anhängen könntest. gruß reli |
Re: JEDI Windows Security Code Library
Zum Laden der Sourcen wird HTTPS verwendet. Das sollte die Firewall eigentlich durchlassen, oder ist der Webseiten-Verkehr darüber verboten?
|
Re: JEDI Windows Security Code Library
@Dezipaitor
Respekt für die Arbeit die du machst, aber warum ist es so kompliziert die Sourcen zu laden? Mich persönlich interessiert das Project sehr, aber ich habe ehrlich gesagt keine Lust ein extra Programm dafür zu installieren. mfG Richard |
Re: JEDI Windows Security Code Library
Zitat:
![]() sehen. [Honig um's Maul schmieren] Du bist doch Admin [/Honig um's Maul schmieren] |
Re: JEDI Windows Security Code Library
Hallo,
das hört sich ja alles schonmal sehr gut an. Aber besser finden würde ich es, wenn Du auf SourceForge oder hier einen Download anhängen würdest, damit auch die Leutz Dir helfen können, die sich mit CSV nicht auskennen und das auch nicht haben. |
Re: JEDI Windows Security Code Library
Also ich hab mal ein Package bereitgestellt. Das Package ist wie ein Checkout mit SVN (Subversion). Siehe ersten Post.
Vorsicht: CVS ist nicht gleich CSV!! |
Re: JEDI Windows Security Code Library
Zitat:
|
Re: JEDI Windows Security Code Library
Wenn ihr wirklich Softwareentwickler sein wollt, dann solltet ihr eine Versionsverwaltung, wie SVN zu schätzen wissen :angel: Ich kann aus eigener Erfahrung nur sagen: ein Segen!! :angel:
|
Re: JEDI Windows Security Code Library
Zitat:
|
Re: JEDI Windows Security Code Library
Aber es verhindert nicht einen SVN-Clent zu installieren
![]() |
Re: JEDI Windows Security Code Library
Zitat:
|
Re: JEDI Windows Security Code Library
Man kann nur hoffen, daß die Delphi-Community das zu schätzen weiß oder zu schätzen lernt. Da steckt eine Menge Arbeit drin und ich würde es - weil dieses Schlagwort ja so gern benutzt wird - als Bibliothek mit einer Qualität vergleichbar zu kommerziellen Produkten bezeichnen. Mit dem kleinen Unterschied, daß es das in dieser Form für Delphi bisher auch von kommerziellen Anbietern nicht gab.
Gute Arbeit, Chris! :thumb: @SVN-Scheue: wie wäre es sich einfach mal mit SVN (welches übrigens seit einiger Zeit als offizieller Nachfolger von CVS gilt) auseinanderzusetzen und sich die Zeit zu nehmen es aus dem SVN-Repository auszuchecken? Oder laßt es mich anders formulieren: es sollte nur recht und billig sein, daß ihr auch was tut um an die Bibliothek zu gelangen, wenn ihr euren Aufwand mal mit dem vergleicht, den Chris hatte um die Bibliothek auf die Beine zu stellen. |
Re: JEDI Windows Security Code Library
Jetzt will ich aber keine Fragen mehr bzgl direkter Programmierung mit Security API sehen :zwinker:
|
Re: JEDI Windows Security Code Library
Wir haben ein Projekt auf Basis der JWSCL in Entwicklung, das es ermöglicht unter Windows XP den aktuellen Benutzer Administratorrechte für das Starten eines Programmes zu verleihen.
Es ist so ähnlich, wie unter Vista. Der Vorteil dabei ist, dass man nicht Administrator sein muss, d.h. ein Programm unter dessem Profil starten braucht. Profildaten und Pfade bleiben erhalten. Das Programm wird zwar mit Adminrechten gestartet, jedoch werden z.B. Installationsdaten ins Profil und Registry des Benutzers eingetragen. Manche Programme schaffen es ja immer noch nicht, z.B. Startmenüeinträge für alle User statt des aktuellen Benutzers zu erstellen. Man findet dann den Startmenüeintrag beim aktuellen Nutzer nicht, sondern muss sich erstmal als Administrator einloggen. Das ganze funktioniert auch mit Terminal Sessions - also mehreren gleichzeitig eingeloggten Benutzern. Wir testen derzeit noch mit Vista. So soll es möglich sein, auch ohne UAC, wie unter XP zu arbeiten. |
Re: JEDI Windows Security Code Library
Hi ... Ich habe ein ziemlich... Naja pikantes Problem :(
Ich will die JwaWindows.pas kompilieren, und TD-E sagt: [Pascal Fataler Fehler] jwaWindows.pas(259): F1026 Datei nicht gefunden: 'C:\[...]\jwapi\trunk\Win32API\JwaWinType.pas' Also Flucks Dateiname kopiert und mit TD-E laden wollen: Zitat:
Wenn ich TD-E neustarte kann ich die Datei wieder öffnen... Also wieder komplieren, aber denkste... Wäre ja mal was neues das etwas geht: Datei nicht gefunden ....... Was mache ich/macht TD-E falsch? MfG xZise |
Re: JEDI Windows Security Code Library
Das Problem habe ich auch. Es ist ein ganz merkwürdiger Fehler von TD - z.b. in D7 tritt er nicht auf.
Bis jetzt habe ich es lösen können, indem ich TD geschlossen habe und die Dateien woandershin kopiert habe (nicht verschieben) - am besten auf eine andere Partition. |
Re: JEDI Windows Security Code Library
I noticed this issue too on BDS2006. Closing and restarting often helps (you can also try to close the handle eg with Process Explorer). You should report this in Quality Central.
|
Re: JEDI Windows Security Code Library
Zitat:
And when I restart and want to compile it now, it's blocking again. But not until when I start the compile. Before the first compile I can open and save the file. MfG xZise Zitat:
Zitat:
|
Re: JEDI Windows Security Code Library
Du kannst auf deutsch schreiben. Remko versteht dich.
Das Handle kannst du mit ![]() Hast du im BDS die Datei geöffnet? Schließen, BDS schließen, so dass die Datei nie geöffnet wird. Lösche auch alle erstellten Binärdateien (dsk, dcu usw) auch im BDS Bin-Verzeichnis. |
Re: JEDI Windows Security Code Library
Zitat:
Zitat:
Ich habe es jetzt auf meinen Stick (= neue Partition) geschoben ==> Es funktioniert. Zwar ziemlich lahm ^^ aber es könnte gehen xD MfG xZise |
Re: JEDI Windows Security Code Library
Du kannst es auch in einem anderen Dir ausprobieren. Hauptsache ist, dass die Daten kopiert werden. Beim Verschieben wird nur die FAT geändert.
|
Re: JEDI Windows Security Code Library
Sorry, aber es ist zum Mäuse melken. Wenn überhaupt:
Alles brav kopiert, einmal kompliert => Syntaxfehler => korrigiert => FEHLER :( Also nochmal: Alles brav kopiert, Bibilothekpfad erneuert => kompliert => Syntaxfehler => korrigier => FEHLER Ich liebe es... MfG xZise |
Re: JEDI Windows Security Code Library
Hmm, okay wenn bei dir kopieren nicht hilft, dann eben auf eine andere Partition.
Es ist eben ein Bug in TD, der wirklich nervt. Ich kann nichts dafür. Der Fehler tritt bei mir auch dann auf, wenn diese eine Unit garnicht verwendet wird...dann eben für eine andere unit. Aber ich könnte für einige Versionen DCUs zum Download stellen. Ich selbst habe aber nur D7 und TD. |
Re: JEDI Windows Security Code Library
Ich habe nochmal mit dem Fehler, dass JwaWinType.pas nicht gefunden werden kann, herumprobiert. Dabei habe ich folgende weitere Lösung gefunden:
1. Delphi beenden 2. Ordner Win32API umbennenen (z.b. in Win32API_) 3. Delphi starten 3. umbenennen Ordner Win32API zurück umbennenen in Win32API Ich beziehe mich jedoch auf die Kompilation der Pakete in "\jedi-api-lib\jwapi\trunk\Packages". Dazu die Projektgruppendatei (z.b. *.bdsproj) öffnen, nachdem Delphi gestartet wurde. Es gibt dort 4 Pakete, welche nur dazu da sind DCU Dateien zu erstellen. Diese sind für DEBUG, RELEASE sowie STATIC und DYNAMIC binding. Jedes Paket schreibt die Ausgabe in ein Bin-Ordner. z.b. jedi-api-lib\jwapi\trunk\Packages\bds10\bin\debug\dynamic Jetzt muss man nur noch den Pfad zu den DCU-Dateien statt zu den PAS-Dateien Delphi mitteilen. Das macht man am besten in den globalen Pfad-Einstellungen von Delphi und nicht in den Projekteinstellungen des jeweiligen Projekts. Dies macht man im Menü: Tools-Optionen und dann im Baum: Umgebungsoptionen->DelphiOptionen->BibliothekWin32 In das Bibliothekspfad-Eingabefeld wird dann der absolute Pfad (z.b. C:\Projekte\Jedi-api-lib\jwapi\trunk\Packages\bds10\bin\debug\dynamic) eingegeben. Der Suchpfad selbst kann der absolute Pfad zu den JWSCL Pas-Dateien sein (z.b. C:\Projekte\jedi-api-lib\jwscl\trunk\source). Für die JWA ist hier kein Eintrag nötig. Ich empfehle nicht, für die JWSCL ein Paket zu erstellen, da sie sich oft ändern wird. Jede Änderung führt dazu, dass man das Paket neu kompilieren müsste. Ändert sich also in JWA eine Datei muss man den Kompilationsvorgang für JWA wiederholen, sonst lässt sich womöglich JWSCL nicht mehr kompilieren. Der Vorteil der ganzen Sache ist, dass man die JWA nicht jedesmal komplett neu kompilieren muss. |
Re: JEDI Windows Security Code Library
Kann ich mit der JWSCL herausfinden, ob der Benutzer Adminrechte hat?
|
Re: JEDI Windows Security Code Library
JwsclToken exportiert eine Reihe von Funktionen.
Delphi-Quellcode:
Wenn du weißt, welches Privileg du benötigst, kannst du das auch überprüfen:
{@Name checks if the user has administrative access to secured object.
This function checks if an access to a secured object, which only users of the administration group have access, succeeds or fails. The advantage of this function is that it also can be used with restricted tokens, which are quite common since Windows XP and especially Vista. @return Returns true if the user has administrative access; otherwise false. } function JwCheckAdministratorAccess : Boolean;
Delphi-Quellcode:
Eine Liste von verfügbaren Privilegien findest du damit
{@Name checks whether a given privilege is available or enabled in the actual process or thread.
@param Index gets the privilege name @param query defines whether the given privilege should be checked for availability or is enable @return Returns true if the privilege is available and enabled. If the privilege is not available or disabled the result is false. } function JwIsPrivilegeSet(const Index: string; const Query: TJwPrivilegeQueryType = pqt_Available): boolean;
Delphi-Quellcode:
{@Name returns a string filled with privilege names (of current token) and their states seperated by #13#10.
SE_XXXXX [enabled] SE_XXXXX [disabled] } function JwGetPrivilegesText: TJwString; |
Re: JEDI Windows Security Code Library
Würde das auch bei einem Installierten Dienst funktionieren?
Und wie kriege ich das unter Windows 2000 heraus? MfG xZise |
Re: JEDI Windows Security Code Library
Funktioniert ab Win2000. Jedoch alle Funktionen der JWSCL gehen natürlich nicht. Leider ist es sehr aufwendig herauszufinden was unter Win2000 nicht funktioniert.
Die Grundlegenden Funktionen gehen jedoch schon unter 2000. |
Re: JEDI Windows Security Code Library
Und wie kriege ich das von einen bestimmten Benutzer heraus?
MfG xZise |
Re: JEDI Windows Security Code Library
Ob ein bestimmter Benutzer Adminrechte hat?
Kannst du das in einem extra Post fragen? Weil dies in der JWSCL noch nicht implementiert ist. |
Re: JEDI Windows Security Code Library
Okay :)
Es funktioniert doch xD Erstens war es die Falsche JWSCl Version (wahrscheinlich) und zweitens hatte ich da auch einen Denkfehler eingebaut :) Jetzt funktioniert es so wie ich es benötige! Danke :D MfG xZise |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz