Flyour 发表于 2020-7-14 15:29

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 项目配置的问题,但不确定,求助!!!!!

JuncoJet 发表于 2020-7-14 16:23

另外能不能提权涉及是否是管理员,有没有防护软件之类的
获取LUID直接用RtlAdjustPrivilege 调用更省力

无闻无问 发表于 2020-7-14 15:54

为什么有的加L有的不加?为噻不统一来个_T()

JuncoJet 发表于 2020-7-14 16:21

Luid 速查工具,只需3kb
https://www.52pojie.cn/thread-1178179-1-1.html
(出处: 吾爱破解论坛)

Flyour 发表于 2020-7-14 18:29

无闻无问 发表于 2020-7-14 15:54
为什么有的加L有的不加?为噻不统一来个_T()

害,那是msdn 的例子,他就这么写的。有个参数加L 是因为 LookupPrivilegeValue 参数要求宽字符,至于其他的为啥不加,ennnnn,谁知道呢

Flyour 发表于 2020-7-14 18:34

JuncoJet 发表于 2020-7-14 16:23
另外能不能提权涉及是否是管理员,有没有防护软件之类的
获取LUID直接用RtlAdjustPrivilege 调用更省力

可以可以,长见识了,这就试试

Flyour 发表于 2020-7-14 18:49

JuncoJet 发表于 2020-7-14 16:23
另外能不能提权涉及是否是管理员,有没有防护软件之类的
获取LUID直接用RtlAdjustPrivilege 调用更省力

可以了,用 RtlAdjustPrivilege 成功提权,虽然还是不知道之前问题在哪里...
页: [1]
查看完整版本: LookupPrivilegeValue函数 找不到权限