首页
社区
课程
招聘
[求助]win7下怎么提权到debug权限
发表于: 2015-3-26 20:46 3503

[求助]win7下怎么提权到debug权限

2015-3-26 20:46
3503
bool raiseToDebug() {
        HANDLE hToken;
        LUID debugValue;

        if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
        return false;

        if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &debugValue))
        return false;

        TOKEN_PRIVILEGES tkp;
        tkp.PrivilegeCount = 1;
        tkp.Privileges[0].Luid = debugValue;
        tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

        if(!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(tkp), NULL, NULL))
        return false;
    return true;
}
这段代码在winxp下和win7管理员身份上都没问题,但在win7普通用户身份下,这个提权函数将调用失败,那在win7普通用户下以上代码要怎么提权,之后可以以管理员身份运行程序。

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 49
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
管理原权限和调试权限是两回事,有调试权限也只是普通进程而非管理员进程,想要调试管理员进程就要有管理员权限,常规的提权就是ShellExecute runas, 或者直接编译成管理员权限启动的进程,非常规的看雪里里搜绕过uac
2015-3-26 22:22
0
雪    币: 10
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我想对当前正在运行的程序,提权到管理员权限,应该怎么做了?
2015-3-27 20:01
0
雪    币: 49
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
正在运行的程序它的权限已经确定了,不能修改了,如果想要起管理员权限的,那么就用ShellExecute runas 启动自身,然后低权限的退出
2015-3-28 15:22
0
雪    币: 10
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
bool GetPrivilege(void)
{
    if (ERROR_SUCCESS != GetLastError())
    {
        return false;
    }
    else
    {
        TCHAR strPath[MAX_PATH] = { 0 };
        HMODULE hModule = NULL;
        GetModuleFileName(hModule, strPath, MAX_PATH);

        SHELLEXECUTEINFO sei = { sizeof(SHELLEXECUTEINFO) };
        sei.lpVerb = TEXT("runas");
        sei.lpFile = strPath;
        sei.nShow = SW_SHOWNORMAL;
        if (!ShellExecuteEx(&sei))
        {
            DWORD dwStatus = GetLastError();
            if (dwStatus == ERROR_CANCELLED)
            {
                return false;
            }
            else if (dwStatus == ERROR_FILE_NOT_FOUND)
            {
                return false;
            }
        }
    }
    Sleep(100);        // 防止退出的太早
    return true;
}

用了这段代码后就能以管理员身份重新运行,请问要怎么退出之前的程序了?
2015-3-28 21:01
0
雪    币: 49
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
ExitProcess
2015-3-28 22:27
0
游客
登录 | 注册 方可回帖
返回