首页
社区
课程
招聘
[求助]debug api调试系统进程lsass.exe,知道的帮一把。
发表于: 2013-2-21 09:40 5491

[求助]debug api调试系统进程lsass.exe,知道的帮一把。

2013-2-21 09:40
5491
代码如下:

#include <windows.h>
#include <Tlhelp32.h>
#include <stdio.h>

//提权函数
BOOL EnableDebugPriv( LPCTSTR szPrivilege ) 

  HANDLE hToken; 
  LUID sedebugnameValue; 
  TOKEN_PRIVILEGES tkp; 
  
  if ( !OpenProcessToken( GetCurrentProcess(), 
    TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, 
    &hToken ) ) 
  { 
    return FALSE; 
  } 
  if ( !LookupPrivilegeValue( NULL, szPrivilege, &sedebugnameValue ) ) 
  { 
    CloseHandle( hToken ); 
    return FALSE; 
  } 
  
  tkp.PrivilegeCount = 1; 
  tkp.Privileges[0].Luid = sedebugnameValue; 
  tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
  
  if ( !AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) ) 
  { 
    CloseHandle( hToken ); 
    return FALSE; 
  } 
  
  return TRUE; 


void main()
{
  
  HANDLE hSnapshot = NULL;
  HANDLE hProcess = NULL;
        PROCESSENTRY32 pe;
  DWORD dwProcessId;
  BOOL rtn = FALSE;
        
        //先提升权限
  if(!EnableDebugPriv(SE_DEBUG_NAME))
    return;

        //获得lsass进程PID    
        hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);
  pe.dwSize = sizeof(PROCESSENTRY32);
  Process32First(hSnapshot,&pe);
  do
  {
    if(stricmp(pe.szExeFile,"lsass.exe")==0)
    {
      dwProcessId = pe.th32ProcessID;
      break;
    }
  }
  while(Process32Next(hSnapshot,&pe)==TRUE);
  
  hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessId);
        
        //DebugActiveProcess函数出错,错误代码5,无权访问。
  if(!DebugActiveProcess(dwProcessId))
            printf("\nERROR %d.",GetLastError());
  
  CloseHandle(hSnapshot);  
}

想请问,MSDN上关于DebugActiveProcess函数的说明中,写到:“If the debugging process has the SE_DEBUG_NAME privilege granted and enabled, it can debug any process.” 可见,该函数应该能调试任何进程,包括系统进程lsass。为什们上述情况不行呢?我的系统是xp sp3。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
也不是啊。。。。。如果可以调试任何进程的话,那么System不就可以被调试了,在ring3下是不可能的。。。还有某些系统进程其实是内核态的。。。。
2013-2-21 09:51
0
雪    币: 104
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
但至少lsass进程是可以被调试的。网上搜以前有人成功的。方法大致也是这样。
2013-2-21 10:07
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
4
进程木有内核态这一说,Windows的执行调度单位是线程,内核中进程的数据结构似乎也没有描述是内核态还是用户态的
2013-3-1 13:49
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
额。。。。貌似是这样。。
2013-3-1 19:43
0
游客
登录 | 注册 方可回帖
返回
//