| Hallo Profaner...
Ein Eigentümer einer File kann nur werden: - Der User, der durch den Token des aufrufenden Prozesses personifiziert wird. - Eine Gruppe, die im Token des aufrufenden Prozesses mit dem Flag SE_GROUP_OWNER gekennzeichnet ist (siehe API GetTokenInformation).
Um einem anderen User ein Eigentum zu klauen... - muß der Token des aufrufenden Prozesses das Privileg SeTakeOwnershipPrivilege enthalten. Nach dem Hinzufügen ist ein Reboot erforderlich! - muß im Token des aufrufenden Prozesses das Privileg SeTakeOwnershipPrivilege aktiviert werden! KompilierenMarkierenSeparierenDEF @OW_IsValidSecurityDescriptor(1) !ADVAPI32,IsValidSecurityDescriptor
DEF @OW_GetFileSecurity(5) !ADVAPI32,GetFileSecurityA
DEF @OW_GetLastError(0) !KERNEL32,GetLastError
DEF @OW_SetLastError(1) !KERNEL32,SetLastError
DEF @OW_GetSecurityDescriptorOwner(3) !ADVAPI32,GetSecurityDescriptorOwner
DEF @OW_IsValidSid(1) !ADVAPI32,IsValidSid
DEF @OW_LookupAccountSid(7) !ADVAPI32,LookupAccountSidA
DEF @OW_SetSecurityDescriptorOwner(3) !ADVAPI32,SetSecurityDescriptorOwner
Def @OW_GetVolumeInformation(8) !KERNEL32,GetVolumeInformationA
DEF @OW_LookupAccountName(7) !advapi32,LookupAccountNameA
DEF @OW_InitializeSecurityDescriptor(2) !ADVAPI32,InitializeSecurityDescriptor
DEF @OW_SetFileSecurity(3) !ADVAPI32,SetFileSecurityA
DEF @OW_LookupPrivilegeValue(3) !advapi32,LookupPrivilegeValueA Ermittelt aus dem Namen eines Privilegs dessen Luid.
DEF @OW_OpenProcessToken(3) !advapi32,OpenProcessToken Öffnet Einstellprozess.
DEF @OW_AdjustTokenPrivileges(6) !advapi32,AdjustTokenPrivileges Stellt Privilegien ein.
DEF @OW_GetCurrentProcess(0) !kernel32,GetCurrentProcess Ermittel das Handle des aktiven Prozesses.
DEF @OW_CopyMemory(3) !kernel32,RtlMoveMemory
DEF @OW_GetLastError(0) !KERNEL32,GetLastError
PROC SET_FILE_OWNER
Parameters Filename_OW_$,OWNER_OW_$
Declare NEEDED_ow_#,SIDa_ow_#,Fehler_ow_&,NEEDED_ow_&,PSECURITY_DESCRIPTOR_ow_#
Declare SID_ow_#,GFLAG_ow_#,System_ow_$
Declare SID_NAME_USE_ow_#,ACCOUNT_NAME_ow_#,Domain_ow_#
Declare SIZE_ACCOUNT_ow_#,SIZE_DOMAIN_ow_#
Declare LAUFWERK_OW_$,Label_OW_#,LFlags_OW_#,DAT_OW_#
Declare OldOwner_OW_$,TOKEN_OW_#
Declare NewState_OW_#,Privileg_OW_#,LUID_OW_#
DIM Label_OW_#,256
DIM LFlags_OW_#,4
DIM DAT_OW_#,256
ADDSTRING Zu bearbeitende Datei: +FILENAME_ow_$
LET LAUFWERK_OW_$=@LEFT$(FILENAME_ow_$,3)
LET Fehler_ow_&=@OW_GetVolumeInformation(@ADDR(LAUFWERK_OW_$),Label_OW_#,256,0,0,LFlags_OW_#,DAT_OW_#,256)
ADDSTRING Rückgabe von GetVolumeInformation=+@STR$(Fehler_OW_&)
ADDSTRING Letzter API-Fehler=+@STR$(@OW_GetLastError())
ADDSTRING Laufwerksflags=+@BIN$(@LONG(LFLAGS_OW_#,0))
IF @LONG(LFLAGS_OW_#,0) | $8 = @LONG(LFLAGS_OW_#,0)
ADDSTRING Zugriff ist einschränkbar
ADDSTRING Ausgelesene Partition=+@String$(Dat_OW_#,0)
Declare ADDR_NEWSTATE_OW_&
dim token_OW_#,4
DIM NewState_OW_#,16
DIM Luid_OW_#,8
DIM Privileg_OW_#,33
Clear NewState_OW_#
Long NewState_OW_#,0=1 Nur ein Privileg soll geändert werden
Long NewState_OW_#,12=$00000002 Das Privileg soll eingeschaltet werden
Clear Privileg_OW_#
Clear LUID_OW_#
LET FEHLER_OW_&=@OW_OpenProcessToken(@OW_GetCurrentProcess(),$0020 | $0008,Token_OW_#)
ADDSTRING Rückgabe von OpenProcessToken=+@STR$(Fehler_OW_&)
ADDSTRING Letzter API-Fehler=+@STR$(@OW_GetLastError())
STRING Privileg_OW_#,0=SeTakeOwnershipPrivilege
LET Fehler_OW_&=@OW_LookupPrivilegeValue(@addr(System_OW_$),Privileg_OW_#,LUID_OW_#)
ADDSTRING Rückgabe von LookupPrivilegeValue für SeTakeOwnershipPrivilege=+@STR$(Fehler_OW_&)
ADDSTRING Letzter API-Fehler=+@STR$(@OW_GetLastError())
LET ADDR_NEWSTATE_OW_&=NewState_OW_#
LET ADDR_NEWSTATE_OW_&=ADDR_NEWSTATE_OW_&+4
@OW_CopyMemory(ADDR_NEWSTATE_OW_&,Luid_OW_#,8)
ADDSTRING Letzter API-Fehler nach CopyMemory=+@STR$(@OW_GetLastError())
Let Fehler_OW_&=@OW_AdjustTokenPrivileges(@LONG(Token_OW_#,0),0,NewState_OW_#,0,0,0)
ADDSTRING Rückgabe von AdjustTokenPrivileges=+@STR$(Fehler_OW_&)
ADDSTRING Letzter API-Fehler=+@STR$(@OW_GetLastError())
DIM Needed_ow_#,4
Clear Needed_ow_#
LET Fehler_ow_&=@OW_GetFileSecurity(@ADDR(FILENAME_ow_$),$1 | $2 | $4,0,0,Needed_ow_#)
ADDSTRING Rückgabe von GetFileSecurity: +@STR$(Fehler_ow_&)
ADDSTRING Letzter API-Fehler: +@STR$(@OW_GetLastError())
LET NEEDED_ow_&=@LONG(Needed_ow_#,0)
ADDSTRING Erforderliche Länge des Security Descriptor: +@STR$(NEEDED_ow_&)
CASE NEEDED_ow_&=0 : LET NEEDED_ow_&=1024
DIM PSECURITY_DESCRIPTOR_ow_#,NEEDED_ow_&
Clear PSECURITY_DESCRIPTOR_ow_#
@OW_SetLastError(0)
LET Fehler_ow_&=@OW_GetFileSecurity(@ADDR(FILENAME_ow_$),$1 | $2 | $4,PSECURITY_DESCRIPTOR_ow_#,NEEDED_ow_&,Needed_ow_#)
ADDSTRING Rückgabe von GetFileSecurity: +@STR$(Fehler_ow_&)
ADDSTRING Letzter API-Fehler: +@STR$(@OW_GetLastError())
LET Fehler_ow_&=@OW_IsValidSecurityDescriptor(PSECURITY_DESCRIPTOR_ow_#)
ADDSTRING Rückgabe von IsValidSecurityDescriptor: +@STR$(Fehler_ow_&)
ADDSTRING Letzter API-Fehler: +@STR$(@OW_GetLastError())
DIM SID_ow_#,4
DIM GFlag_ow_#,2
Clear SID_ow_#
Clear GFLAG_ow_#
LET Fehler_ow_&=@OW_GetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR_ow_#,SID_ow_#,GFLAG_ow_#)
ADDSTRING Rückgabe von GetSecurityDescriptorOwner: +@STR$(Fehler_ow_&)
ADDSTRING Letzter API-Fehler: +@STR$(@OW_GetLastError())
LET Fehler_ow_&=@OW_IsValidSid(@long(SID_ow_#,0))
ADDSTRING Rückgabe von IsValidSid für den Besitzer: +@STR$(Fehler_ow_&)
ADDSTRING Letzter API-Fehler: +@STR$(@OW_GetLastError())
DIM ACCOUNT_NAME_ow_#,256
DIM SIZE_ACCOUNT_ow_#,4
DIM Domain_ow_#,256
DIM SIZE_DOMAIN_ow_#,4
DIM SID_NAME_USE_ow_#,4
Clear SID_NAME_USE_ow_#,System_ow_$
Clear ACCOUNT_NAME_ow_#,Domain_ow_#
LONG SIZE_ACCOUNT_ow_#,0=255
LONG SIZE_DOMAIN_ow_#,0=255
LET Fehler_ow_&=@OW_LookupAccountSid(@ADDR(System_ow_$),@Long(SID_ow_#,0),ACCOUNT_NAME_ow_#,SIZE_ACCOUNT_ow_#,Domain_ow_#,SIZE_DOMAIN_ow_#,SID_NAME_USE_ow_#)
ADDSTRING Rückgabe von LookupAccountSid: +@STR$(Fehler_ow_&)
ADDSTRING Letzter API-Fehler: +@STR$(@OW_GetLastError())
ADDSTRING Reset des API-Fehlers wird durchgeführt
@OW_SetLastError(0)
LET OldOwner_OW_$=@String$(ACCOUNT_NAME_ow_#,0)
ADDSTRING Besitzer der Datei: +@String$(ACCOUNT_NAME_ow_#,0)
ADDSTRING Control Flag: +@STR$(@Word(GFLAG_ow_#,0))
Dispose SID_ow_#
DIM SID_OW_#,1
Clear SID_OW_#,SIZE_ACCOUNT_OW_#,Domain_OW_#,SIZE_Domain_OW_#,SID_NAME_USE_OW_#
LONG SIZE_ACCOUNT_OW_#,0=1
LONG SIZE_Domain_OW_#,0=256
LET FEHLER_OW_&=@OW_LookupAccountName(@ADDR(System_OW_$),@addr(OWNER_OW_$),SID_OW_#,SIZE_ACCOUNT_OW_#,Domain_OW_#,SIZE_Domain_OW_#,SID_NAME_USE_OW_#)
ADDSTRING Rückgabe von LookupAccountName: +@STR$(Fehler_ow_&)
ADDSTRING Letzter API-Fehler: +@STR$(@OW_GetLastError())
Dispose SID_OW_#
DIM SID_ow_#,@LONG(SIZE_ACCOUNT_OW_#,0)
Clear SID_OW_#,Domain_OW_#,SIZE_Domain_OW_#,SID_NAME_USE_OW_#
LONG SIZE_Domain_OW_#,0=256
LET FEHLER_OW_&=@OW_LookupAccountName(@ADDR(System_OW_$),@addr(OWNER_OW_$),SID_OW_#,SIZE_ACCOUNT_OW_#,Domain_OW_#,SIZE_Domain_OW_#,SID_NAME_USE_OW_#)
ADDSTRING Rückgabe von LookupAccountName: +@STR$(Fehler_ow_&)
ADDSTRING Letzter API-Fehler: +@STR$(@OW_GetLastError())
LET FEHLER_OW_&=@OW_InitializeSecurityDescriptor(PSECURITY_DESCRIPTOR_ow_#,$1)
ADDSTRING Rückgabe von InitializeSecurityDescriptor: +@STR$(Fehler_ow_&)
ADDSTRING Letzter API-Fehler: +@STR$(@OW_GetLastError())
LET FEHLER_OW_&=@OW_SetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR_ow_#,SID_OW_#,0)
ADDSTRING Rückgabe von SetSecurityDescriptorOwner: +@STR$(Fehler_ow_&)
ADDSTRING Letzter API-Fehler: +@STR$(@OW_GetLastError())
LET FEHLER_OW_&=@OW_IsValidSecurityDescriptor(PSECURITY_DESCRIPTOR_ow_#)
ADDSTRING Rückgabe von IsValidSecurityDescriptor für den geänderten Security Descriptor: +@STR$(Fehler_ow_&)
ADDSTRING Letzter API-Fehler: +@STR$(@OW_GetLastError())
LET FEHLER_OW_&=@OW_SetFileSecurity(@ADDR(Filename_OW_$),$1,PSECURITY_DESCRIPTOR_ow_#)
ADDSTRING Rückgabe von SetFileSecurity: +@STR$(Fehler_ow_&)
ADDSTRING Letzter API-Fehler: +@STR$(@OW_GetLastError())
Dispose Luid_OW_#
Dispose Privileg_OW_#
Dispose NewState_OW_#
Dispose token_OW_#
Dispose SID_NAME_USE_ow_#
Dispose ACCOUNT_NAME_ow_#
Dispose Domain_ow_#
Dispose SIZE_ACCOUNT_ow_#
Dispose SIZE_DOMAIN_ow_#
Dispose NEEDED_ow_#
Dispose PSECURITY_DESCRIPTOR_ow_#
Dispose SID_ow_#
Dispose GFLAG_ow_#
else
ADDSTRING Zugriff ist nicht einschränkbar
endif
Dispose Label_OW_#
Dispose LFlags_OW_#
Dispose DAT_OW_#
Return OldOwner_OW_$
endproc
SET_FILE_OWNER @loadfile$(Datei auswählen,*.*),Administratoren
@Rückgaben,1)
|
|