15,471
社区成员
发帖
与我相关
我的任务
分享
void Cqystudio::GetSeDebug(void)
{
PHANDLE pTokenHandle=new HANDLE; //令牌指针
TOKEN_PRIVILEGES tkp;
ZeroMemory(&tkp,sizeof(TOKEN_PRIVILEGES));
//获取访问令牌 进程句柄 修改令牌 令牌指针
if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,pTokenHandle))
{
qyMakeError(33);
return;
}
//查询权限标识 本机 seDebug TOKEN_PRIVILEGES
if(!LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid))
{
qyMakeError(34);
return;
}
tkp.PrivilegeCount=1;
tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
//修改权限 令牌 修改 权限 旧权限的长度及结构 实际返回大小
if(!AdjustTokenPrivileges(*pTokenHandle,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0))
{
qyMakeError(35);
return;
}
}
void Cqystudio::UnLoadNtdll(DWORD pid)
{
USES_CONVERSION;
GetSeDebug(); //提权 debug权限
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
if(hProcess==NULL)
{
return;
}
HMODULE hModule=GetModuleHandle(A2W("ntdll.dll"));
ULONG ret=NtUnmapViewOfSection(hProcess,hModule);
CloseHandle(hProcess);
}