我已经对游戏 AssualtCube 进行了破解(好吧,复制/粘贴)。破解的一部分涉及使用 OpenProcess() 获取具有 PROCESS_ALL_ACCESS 权限的 ac_client.exe 句柄。这在 Visual Studio 的集成调试器中运行良好,但失败了,在作为外部版本运行时产生 ERROR_ACCESS_DENIED。如果我在 Visual Studio 中拥有 PROCEESS_ALL_ACCESS 权限,那么应该有一种方法可以在 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。