Как получить права 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 не может быть включен.

Другие вопросы по тегам