关闭

Windows提高进程权限至Debug

标签: windowstokennullaccessquery编程
3800人阅读 评论(0) 收藏 举报
分类:

关于提权,需要了解知道下面三个函数吧,

OpenProcessToken 得到进程的令牌句柄

LookupPrivilegeValue 查询进程的权限

AdjustTokenPrivileges 判断令牌权限

在Windows下,每个进程不是说有管理员权限就可以为所欲为。因为每个进程还有个令牌,访问令牌吧。而令牌代表了一些权限使用,如果需要某些特殊权限,需要自己去使能或除能。

Windows核心编程里有提权代码如下:

BOOL EnableDebugPrivilege(BOOL bEnable) 
{ 

BOOL fOK = FALSE;
HANDLE hToken;
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) //打开进程访问令牌
{ 
   //试图修改“调试”特权
   TOKEN_PRIVILEGES tp;
   tp.PrivilegeCount = 1;
   LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
   tp.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0;
   AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);
   fOK = (GetLastError() == ERROR_SUCCESS);
   CloseHandle(hToken); 
} 
return fOK; 
}


类似提高权限函数如下:

void RaiseToDebug()
{
    HANDLE hToken;
    HANDLE hProcess = GetCurrentProcess();  // 获取当前进程句柄
 
    // 打开当前进程的Token,就是一个权限令牌,第二个参数可以用TOKEN_ALL_ACCESS
    if (OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
    {
        TOKEN_PRIVILEGES tkp;
        if (LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid))
        {
            tkp.PrivilegeCount = 1;
            tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
   
            //通知系统修改进程权限
            BOOL bREt = AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, 0);
        }
        CloseHandle(hToken);
    }   
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:517789次
    • 积分:5696
    • 等级:
    • 排名:第4572名
    • 原创:125篇
    • 转载:29篇
    • 译文:0篇
    • 评论:26条
    文章分类
    最新评论