Restaurando 'TrustedInstaller' como proprietário do executável na pasta Windows

Restaurando 'TrustedInstaller' como proprietário do executável na pasta Windows

Depois de alterar a propriedade dos executáveis ​​no diretório do Windows ( explorer.exe, regedit.exe, etc.), não consigo voltar a TrustedInstallerusar icacls.exe. Usando o método GUI (Propriedades → Segurança → Avançado → Proprietário) funciona bem.

Fazendo a mesma coisa com qualquer outro arquivo no Windows, ou sejanãoum executável, funciona bem. Tentei o mesmo no modo de segurança, sem sorte.

Estes são os 2 comandos básicos que estou usando:

takeown /F C:\Windows\explorer.exe /A
icacls C:\Windows\explorer.exe /setowner "NT SERVICE\TrustedInstaller"

Editar: Esqueci de mencionar que estou recebendo o erro 'Acesso negado'.

C:\Windows\System32>takeown /F c:\Windows\explorer.exe /A  
SUCCESS: The file (or folder): "c:\Windows\explorer.exe" now owned by the administrators group.

C:\Windows\System32>icacls c:\Windows\explorer.exe /setowner "NT SERVICE\TrustedInstaller"  
c:\Windows\explorer.exe: Access is denied.  
Successfully processed 0 files; Failed processing 1 files

Responder1

Portanto, o título diz restaurando o TrustedInstaller.

Parece que falta uma parte; removendo as permissões adicionadas do grupo Administradores.

takeown /F "C:\Windows\regedit.exe" /A
/F - file to become owner of
/A - means it will set the users group (ie. Administrators, not userxyz)

icacls "C:\Windows\regedit.exe" /grant Administrators:F
/grant - will add permissions
:F - Full Control

icacls "C:\Windows\regedit.exe" /setowner "NT SERVICE\TrustedInstaller"
/setowner - new owner

icacls "C:\Windows\regedit.exe" /grant:r Administrators:RX
/grant:r - will set permissions (removing higher ones)
:RX - Read and Execute

Referência: https://ss64.com/nt/icacls.html

Responder2

O comando funciona somente após conceder permissões completas ao grupo Administradores, ou seja:

icacls c:\Windows\explorer.exe /grant Administrators:f  

Mesmo conceder 'Modificar' não parece ser suficiente por algum motivo.

Responder3

O problema, como você descobriu na sua resposta, é que definir o proprietário de um arquivo requer uma permissão especial, especificamente "assumir propriedade". A razão pela qual a GUI do editor ACL é capaz de definir o proprietário de qualquer maneira é que ela permite oSeTakeOwnershipPrivilege privilégio, o que permite substituir essa verificação de acesso. Os programas executados como administrador têm esse privilégio, mas precisam ativá-lo explicitamente antes de usá-lo, o que aparentemente icaclsnão o faz.

Convenientemente, os processos herdam os privilégios de seus pais por padrão, portanto, se você puder habilitar esse privilégio para o prompt de comando a partir do qual você invoca icacls, o utilitário também terá o privilégio habilitado e poderá definir o proprietário. Você pode usar meu utilitário de código abertoSprintDLLpara chamar as funções Win32 apropriadas para habilitar o privilégio no processo pai do SprintDLL (o prompt de comando):

SprintDLL call kernel32.dll!OpenProcess /return native /into prochandle (int 0x400, int 0, slotdata parentpid); newslot native token; call advapi32.dll!OpenProcessToken /return int (slotdata prochandle, int 0x20, slotptr token); newslot block luid = int 0, int 0; call advapi32.dll!LookupPrivilegeValueW /return int (nullptr, lpwstr "SeTakeOwnershipPrivilege", slotptr luid); newslot block privs = int 1, slotdata luid, int 2; call advapi32.dll!AdjustTokenPrivileges /return int (slotdata token, int 0, slotptr privs, slotsize privs as int, nullptr, nullptr)

Se funcionar, a saída dirá que todas as três funções chamadas retornaram 1. Você poderá então usar icaclscomo tentou originalmente.

Responder4

Isso funcionou para mim no sistema de 64 bits (e no meu problema) ...

icacls c:\Windows\SysWOW64\usercpl.dll /grant Administrators:f  
icacls "C:\Windows\SysWOW64\usercpl.dll" /setowner "NT SERVICE\TrustedInstaller"

/setowner – novo proprietário

informação relacionada