Windows提高进程权限至Debug

原创 2012年03月26日 06:36:34

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

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);
    }   
}


提示进程SeDebugPriviLege权限

[code=c/c++] BOOL SetPrivilege() { HANDLE hToken;  TOKEN_PRIVILEGES NewState;  LUID luidPrivile...

EnableDebugPrivilge(CString lpName, BOOL fEnable) 函数源码,提升进程操作权限。

EnableDebugPrivilge(CString lpName, BOOL fEnable) 函数源码,提升进程操作权限。 转注:用于解决比如UAC开启后用户权限受限的问题 分类: ...
  • worldy
  • worldy
  • 2013年11月15日 17:01
  • 800

【总结】用户权限设置和进程权限提升

使用某些Windows API的时候需要提升进程的默认权限,例如RegRestoreKey需要SE_RESTORE_NAME 和SE_BACKUP_NAME 权限。在这种情况下,我们需要使用到一组Wi...
  • yockie
  • yockie
  • 2013年11月29日 20:23
  • 15268

基于visual c++之windows核心编程代码分析(66)实现Windows服务的远程控制

Windows服务之前已经进行了讲解,如何在安装Windows服务呢,作为远程控制的服务端。 安装Windows服务代码如下 [cpp] view plaincopyprint? ...

基于visual c++之windows核心编程代码分析 远程代码注入执行

我们进行系统级别的安全监控的时候,防范木马的时候,经常需要进行远程代码注入执行。 执行步骤如下 1. 提升进程权限,如果权限不够的话,很容易造成 OpenProcess 失败; 2. 确...

Windows提升进程权限

Windows提升进程权限 文章一: 在枚举/结束系统进程或操作系统服务时,会出现权限不足而失败的情况,这时就需要提升自己进程到系统权限,其实提升权限的代码很简单的,看过的最经典的应该是《WIND...

c# 操作Access 存取图片(转)

//存图片 MemoryStream stream = new MemoryStream(); byte[] photo = null; Image img = this.pictureBox1...

WinForm SetForegroundWindow失败的问题

C#中使用: [DllImport(“user32.dll”, EntryPoint = “SetForegroundWindow”)] public static...
  • no99es
  • no99es
  • 2016年06月12日 14:56
  • 2219

读取其他进程的内存-让程序提升Debug权限

最近一直忙着写毕业论文,但对于我这种没语言天赋的人,写写实际做的工作还可以,但要写课题背景、意义什么的,头都要大了,憋了两天才憋出两页的绪论,我容易吗我。。。 所以这半个月也没时间更新博客,现在论文...

Windows 系统debug级 进程调试工具 ntsd 详解

ntsd从Windows 2000开始就是系统自带的进程调试工具,在system32目录下。NTSD的功能非常的强大,用法也比较复杂,但如果只用来结束一些进程,那就比较简单了。在Windows中只有S...
  • rznice
  • rznice
  • 2012年09月09日 13:30
  • 2401
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows提高进程权限至Debug
举报原因:
原因补充:

(最多只允许输入30个字)