Как получить права PROCESS_ALL_ACCESS на запущенный процесс?
Я сделал (ОК, скопировал/вставил) хак игры AssualtCube. Часть взлома включает использование OpenProcess() для получения дескриптора с правами PROCESS_ALL_ACCESS для ac_client.exe. Это отлично работает во встроенном отладчике Visual Studio, но дает сбой, создавая ERROR_ACCESS_DENIED при запуске в качестве внешней сборки. Если у меня есть права PROCEESS_ALL_ACCESS в Visual Studio, должен быть способ получить эти права за пределами Visual Studio. Я уже работаю от имени администратора.
1 ответ
Из справки. Чтобы открыть дескриптор другого процесса и получить полные права доступа, необходимо включить привилегию SeDebugPrivilege. Дополнительные сведения см. в разделе Изменение привилегий в токене.
Для включения этой привилегии используется WMI. Большинство привилегий пользователя отключены, и их необходимо включить в коде, чтобы программа могла их использовать.
В примере используетсяlocalhost
.ComputerName = "."
означает текущий компьютер.
'CreateRemoteProcess.vbs
'Starts a program on a remote computer using WMI.
'Programs started on remote computers are invisible on that computer unlike programs started locally
ComputerName = "127.0.0.1"
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate,(Debug,Shutdown)}\\" & ComputerName & "\root\cimv2")
Set objProcess = objWMIService.Get("Win32_Process")
intReturn = objProcess.Create("c:\windows\notepad", Null, objConfig, intProcessID)
If intReturn = 0 then
wscript.echo "PID is " & intProcessID
Else
Msg = "Error code " & intReturn & vbcrlf & vbcrlf
Msg = Msg & "2 Access denied" & vbcrlf
Msg = Msg & "3 Insufficient privilege" & vbcrlf
Msg = Msg & "8 Unknown failure" & vbcrlf
Msg = Msg & "9 Path not found" & vbcrlf
Msg = Msg & "21 Invalid parameter"
wscript.echo Msg
End If
PS: Это необходимо запускать от имени администратора, а у пользователей, не являющихся администраторами, SeDebug не может быть включен.