Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198357
  • 博文数量: 264
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 2740
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-03 13:25
文章分类

全部博文(264)

文章存档

2011年(1)

2009年(263)

我的朋友

分类: C/C++

2009-06-09 14:33:50

通过OpenProcess(PROCESS_ALL_ACCESS,FALSE,dId)获取ID较低进程的句柄时可能会得到错误代码,这些进程 都是保持系统活动的系统服务。一个普通用户进程不允许执行针对系统服务的所有操作。如果一个程序意外终止了一个系统服务,那么整个系统都将崩溃。因此,一 个进程只有拥有确切的访问权限才会有适当的特权。

  由于多种原因,调试器必须拥有大量的权限来完成他的工作。改变进程的特权可以通过以下三个简单的基本步骤:

  1.   首先,必须打开进程的访问令牌(access token),使用advapi32.dll中的函数OpenProcessToken()。

  2.   如果上一步正确完成,接下来就是准备TOKEN_PRIVILEGES结构,该结构包含有关要请求的特权的信息。这个工作需要advapi32.dll中 的另一个函数LookupPrivilegeValue()的帮助。特权通过名称来指定。SDK文档winnt.h定义了27中特权名称和其对应的符号名 称。例如,调试权限的符号名称为:SE_DEBUG_NAME,该名称和字符串“SeDebugPrivilege”等效。

  3.   如果上一步正确完成,就可以使用进程的令牌句柄(Token Handle)来调用AdjustTokenPrivileges()函数以初始化TOKEN_PRIVILEGES结构。该函数也是advapi32.dll导出的。

  4.   如果OpenProcessToken()调用成功,要记得关闭其返回的令牌句柄(Token Handle)。w2k_dbg.dll包含一个dbgPrivilegeSet()函数,该函数合并了这几个步骤,还有w2k_dbg.dll中的另一 个函数:dbgPrivilegeDebug()。此函数是dbgPrivilegeSet()的一个外包函数,为了便于设定调试特权。

阅读(347) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~