SepInitializationPhase1
UINT8 __fastcall SepInitializationPhase1(){
bool IsCurrentThreadInServerSilo;
INT8 v1;
struct _ACL *PoolWithTag;
ACL *v3;
INT8 v4;
UINT8 v5;
INT64 v6;
INT64 v7;
void *DirectoryHandle;
struct _UNICODE_STRING UnicodeString;
void *EventHandle;
struct _OBJECT_ATTRIBUTES ObjectAttributes;
struct _STRING DestinationString;
char SecurityDescriptor[40];
*(&ObjectAttributes.Length + 1) = 0;
*(&ObjectAttributes.Attributes + 1) = 0;
DirectoryHandle = 0i64;
EventHandle = 0i64;
DestinationString = 0i64;
UnicodeString = 0i64;
IsCurrentThreadInServerSilo = PsIsCurrentThreadInServerSilo();
if( !IsCurrentThreadInServerSilo )
{
ObInsertObject(
(PVOID)(*(_QWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 1208i64) & 0xFFFFFFFFFFFFFFF0ui64),
0i64,
0i64,
0i64,
0i64,
0i64);
SeAnonymousLogonToken = (_TOKEN *)SeMakeAnonymousLogonToken();
SeAnonymousLogonTokenNoEveryone = (PVOID)SeMakeAnonymousLogonTokenNoEveryone();
}
RtlInitAnsiString(&DestinationString, "\\Security", v1);
RtlAnsiStringToUnicodeString(&UnicodeString, &DestinationString, 1u);
RtlCreateSecurityDescriptor(SecurityDescriptor, 1ui64);
PoolWithTag = (struct _ACL *)ExAllocatePoolWithTag(NonPagedPoolNx, 0x100ui64, 0x20206553ui64);
v3 = PoolWithTag;
if( !PoolWithTag )
return 0;
RtlCreateAcl(PoolWithTag, 0x100u, 2u);
RtlAddAccessAllowedAce(v3, 2u, 0xF000Fu, SeLocalSystemSid);
RtlAddAccessAllowedAce(v3, 2u, 0x20003u, SeAliasAdminsSid);
RtlAddAccessAllowedAce(v3, 2u, 2u, SeWorldSid);
RtlSetDaclSecurityDescriptor(SecurityDescriptor, 1u, v3, 0);
ObjectAttributes.RootDirectory = 0i64;
ObjectAttributes.SecurityQualityOfService = 0i64;
ObjectAttributes.ObjectName = &UnicodeString;
ObjectAttributes.Attributes = 80;
ObjectAttributes.SecurityDescriptor = SecurityDescriptor;
ObjectAttributes.Length = 48;
ZwCreateDirectoryObject(&DirectoryHandle, 0xF000Fui64, &ObjectAttributes);
RtlFreeAnsiString(&UnicodeString);
ExFreePoolWithTag(v3, 0);
RtlInitAnsiString(&DestinationString, "LSA_AUTHENTICATION_INITIALIZED", v4);
RtlAnsiStringToUnicodeString(&UnicodeString, &DestinationString, 1u);
ObjectAttributes.SecurityQualityOfService = 0i64;
ObjectAttributes.RootDirectory = DirectoryHandle;
ObjectAttributes.Length = 48;
ObjectAttributes.ObjectName = &UnicodeString;
ObjectAttributes.SecurityDescriptor = (void *)SePublicDefaultSd;
ObjectAttributes.Attributes = 80;
ZwCreateEvent(&EventHandle, 0x40000000ui64, &ObjectAttributes, NotificationEvent, 0);
RtlFreeAnsiString(&UnicodeString);
ZwClose(DirectoryHandle);
ZwClose(EventHandle);
if( !IsCurrentThreadInServerSilo )
{
SepInitProcessAuditSd();
SepInitializeCodeIntegrity();
SepInitializeAuthorizationCallbacks(v7, v6);
if( (int)SepInitializeSingletonAttributesStructures() < 0 )
return 0;
}
SddlBaseInitialize(v5);
return 1;
}Referenced by:
SeInitServerSilo
SeInitSystem