RegistryOverwriteCentralProcessor

NTSTATUS __stdcall RegistryOverwriteCentralProcessor(){
  INT64 v0; 
  int v1; 
  unsigned int v2; 
  UINT64 i; 
  INT64 v4; 
  wchar_t *Buffer; 
  int v6; 
  INT64 v8; 
  INT64 v9; 
  INT64 v10; 
  INT64 v11; 
  INT64 v12; 
  INT64 v13; 
  INT64 v14; 
  INT64 v15; 
  VOID *Handle; 
  VOID *KeyHandle; 
  _UNICODE_STRING ValueName; 
  _OBJECT_ATTRIBUTES ObjectAttributes; 
  _UNICODE_STRING v20; 
  _UNICODE_STRING DestinationString; 
  _UNICODE_STRING v22; 
  __int128 KeyInformation; 
  WCHAR SourceString[8]; 
  __int64 v25; 

  *(_QWORD *)&ObjectAttributes.Length = 48i64;
  *(_QWORD *)&ObjectAttributes.Attributes = 576i64;
  KeyHandle = 0i64;
  LODWORD(v15) = 0;
  v25 = 0i64;
  DestinationString = 0i64;
  v22 = 0i64;
  ValueName = 0i64;
  KeyInformation = 0i64;
  *(_OWORD *)SourceString = 0i64;
  v20 = 0i64;
  RtlInitUnicodeString(&DestinationString, L"\\Registry\\Machine\\Hardware\\Description\\System\\CentralProcessor");
  ObjectAttributes.RootDirectory = 0i64;
  ObjectAttributes.ObjectName = &DestinationString;
  *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
  v1 = ZwOpenKey(&KeyHandle, 8ui64, &ObjectAttributes, v0, v8, v10, v15, 0i64);
  if( v1 >= 0 )
  {
    v2 = 0;
    for( i = 0i64; ; i = v2 )
    {
      LODWORD(v9) = 38;
      v1 = ZwEnumerateKey(KeyHandle, i, KeyBasicInformation, &KeyInformation, v9, (UINT64 *)&v15);
      if( v1 == -2147483622 )
        break;
      ++v2;
      if( v1 >= 0 )
      {
        SourceString[(unsigned __int64)HIDWORD(KeyInformation) >> 1] = 0;
        RtlInitUnicodeString(&v22, SourceString);
        ObjectAttributes.RootDirectory = KeyHandle;
        ObjectAttributes.Length = 48;
        ObjectAttributes.ObjectName = &v22;
        ObjectAttributes.Attributes = 576;
        *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
        if( ZwOpenKey(&Handle, 0xF003Fui64, &ObjectAttributes, v4, v9, v14, v15, (INT64)Handle) >= 0 )
        {
          RtlInitUnicodeString(&v20, L"Not Available");
          RtlInitUnicodeString(&ValueName, L"VendorIdentifier");
          Buffer = v20.Buffer;
          v6 = v20.Length + 2;
          LODWORD(v11) = v6;
          ZwSetValueKey(Handle, &ValueName, 0i64, 1ui64, v20.Buffer, v11);
          RtlInitUnicodeString(&ValueName, L"ProcessorNameString");
          LODWORD(v12) = v6;
          ZwSetValueKey(Handle, &ValueName, 0i64, 1ui64, Buffer, v12);
          RtlInitUnicodeString(&ValueName, L"Identifier");
          LODWORD(v13) = v6;
          ZwSetValueKey(Handle, &ValueName, 0i64, 1ui64, Buffer, v13);
          ZwClose((_HANDLE)Handle);
        }
      }
    }
  }
  if( KeyHandle )
    ZwClose((_HANDLE)KeyHandle);
  return v1;
}

Referenced by:

StartFirstUserProcess