LookupPrivilegeValue函数 找不到权限
想要debug 调试api 附加一个受保护进程,所以要给当前进程提权限,开启它的SeDebugPrivilege 权限。代码如下:
#include <Windows.h>
#include <stdio.h>
BOOL SetPrivilege(
HANDLE hToken,
LPCTSTR lpszPrivilege,
BOOL bEnablePrivilege
)
{
TOKEN_PRIVILEGES tp;
LUID luid;
if (!LookupPrivilegeValue(
NULL,
lpszPrivilege,
&luid))
{
printf("LookupPrivilegeValue error: %u", GetLastError());
return FALSE;
}
tp.PrivilegeCount = 1;
tp.Privileges.Luid = luid;
if (bEnablePrivilege)
tp.Privileges.Attributes = SE_PRIVILEGE_ENABLED;
else
tp.Privileges.Attributes = 0;
if (!AdjustTokenPrivileges(
hToken,
FALSE,
&tp,
sizeof(TOKEN_PRIVILEGES),
(PTOKEN_PRIVILEGES)NULL,
(PDWORD)NULL))
{
printf("AdjustTokenPrivileges error: %u\n", GetLastError());
return FALSE;
}
if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
{
printf("The token not have the specified privileges. \n");
return FALSE;
}
return TRUE;
}
int main()
{
//提升权限
HANDLE hLProcess = NULL;
HANDLE tokenHandle = NULL;
hLProcess = GetCurrentProcess();
if (!OpenProcessToken(hLProcess, TOKEN_ADJUST_PRIVILEGES, &tokenHandle))
{
printf("open process token error\n");
return FALSE;
}
SetPrivilege(tokenHandle, L"SeDebugPrivilege", TRUE);
}
实际上这就是msdn 给的例子。
问题是,同样的代码,不同的项目工程,同样在管理员cmd窗口执行,但是有的项目可以正常提权,比如我新建的test.exe,但是有的他就是不能正常提权,错误是找不到这个权限。可是都是管理员窗口,应该是有这个权限的。不知道问题出在那里,向各位大哥求助。目前怀疑是vs 项目配置的问题,但不确定,求助!!!!! 另外能不能提权涉及是否是管理员,有没有防护软件之类的
获取LUID直接用RtlAdjustPrivilege 调用更省力 为什么有的加L有的不加?为噻不统一来个_T() Luid 速查工具,只需3kb
https://www.52pojie.cn/thread-1178179-1-1.html
(出处: 吾爱破解论坛)
无闻无问 发表于 2020-7-14 15:54
为什么有的加L有的不加?为噻不统一来个_T()
害,那是msdn 的例子,他就这么写的。有个参数加L 是因为 LookupPrivilegeValue 参数要求宽字符,至于其他的为啥不加,ennnnn,谁知道呢 JuncoJet 发表于 2020-7-14 16:23
另外能不能提权涉及是否是管理员,有没有防护软件之类的
获取LUID直接用RtlAdjustPrivilege 调用更省力
可以可以,长见识了,这就试试 JuncoJet 发表于 2020-7-14 16:23
另外能不能提权涉及是否是管理员,有没有防护软件之类的
获取LUID直接用RtlAdjustPrivilege 调用更省力
可以了,用 RtlAdjustPrivilege 成功提权,虽然还是不知道之前问题在哪里...
页:
[1]