C++windows 进程提权
windows进程提权使用到的系统函数代码使用到的系统函数OpenProcessToken, LookupPrivilegeValueW,AdjustTokenPrivilegesBOOLWINAPIOpenProcessToken(//打开与进程相关联的访问令牌_In_ HANDLE ProcessHandle,//所要提升进程的句柄_In_ DWORD DesiredAccess,//选择所要
·
使用到的系统函数
OpenProcessToken, LookupPrivilegeValueW,AdjustTokenPrivileges
BOOL
WINAPI
OpenProcessToken( //打开与进程相关联的访问令牌
_In_ HANDLE ProcessHandle, //所要提升进程的句柄
_In_ DWORD DesiredAccess, //选择所要操作的类型,指定请求的访问令牌访问类型
_Outptr_ PHANDLE TokenHandle//返回的访问令牌句柄的指针
);
BOOL
WINAPI
LookupPrivilegeValueW( //查看系统权限的特权值
_In_opt_ LPCWSTR lpSystemName, //所要被检索特权值的系统的名称,
//如果指定了空字符串,则该函数尝试在本地系统上查找特权名称。
_In_ LPCWSTR lpName, //索要检索的特权名称
_Out_ PLUID lpLuid //指向接收LUID的变量的指针,
//通过该LUID可以在lpSystemName参数指定的系统上得到特权。
);
BOOL
WINAPI
AdjustTokenPrivileges( //在指定的访问令牌上启用或禁用特权
_In_ HANDLE TokenHandle, //访问令牌句柄
_In_ BOOL DisableAllPrivileges, //是否禁用令牌的所有特权
_In_opt_ PTOKEN_PRIVILEGES NewState,//指向TOKEN_PRIVILEGES结构的指针,
//该结构指定特权及其属性的数组。
//如果DisableAllPrivileges参数为FALSE,则
//AdjustTokenPrivileges 函数启用,
//禁用或删除令牌的这些特权。
_In_ DWORD BufferLength, //PreviousState的缓冲区大小
_Out_writes_bytes_to_opt_(BufferLength,*ReturnLength) PTOKEN_PRIVILEGES PreviousState,
_Out_opt_ PDWORD ReturnLength
);
代码
bool UpPrivilegeValue()
{
//OpenProcessToken()函数用来打开与进程相关联的访问令牌
HANDLE hToken = nullptr;
if (FALSE == OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken))
{
return false;
}
//LookupPrivilegeValue()函数查看系统权限的特权值
LUID luid;
if (FALSE == LookupPrivilegeValue(nullptr, SE_DEBUG_NAME, &luid))
{
CloseHandle(hToken);
return false;
}
//调整权限设置
TOKEN_PRIVILEGES Tok;
Tok.PrivilegeCount = 1;
Tok.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
Tok.Privileges[0].Luid = luid;
if (FALSE == AdjustTokenPrivileges(hToken, FALSE, &Tok, sizeof(Tok), nullptr, nullptr))
{
CloseHandle(hToken);
return false;
}
if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
{
CloseHandle(hToken);
return false;
}
CloseHandle(hToken);
return true;
}
更多推荐
已为社区贡献1条内容
所有评论(0)