吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1527|回复: 6
收起左侧

[求助] LookupPrivilegeValue函数 找不到权限

[复制链接]
Flyour 发表于 2020-7-14 15:29
想要debug 调试api 附加一个受保护进程,所以要给当前进程提权限,开启它的SeDebugPrivilege 权限。
代码如下:
[C] 纯文本查看 复制代码
#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[0].Luid = luid;
    if (bEnablePrivilege)
        tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    else
        tp.Privileges[0].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 调用更省力

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Flyour + 1 + 1 谢谢@Thanks!

查看全部评分

无闻无问 发表于 2020-7-14 15:54
为什么有的加L有的不加?为噻不统一来个_T()
JuncoJet 发表于 2020-7-14 16:21
 楼主| 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 成功提权,虽然还是不知道之前问题在哪里...
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 07:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表