C++ 提权
C++ 提权
2023-09-11 14:13:59 时间
BOOL EnableDebugPrivilege() {
HANDLE hToken;
BOOL fOk = FALSE;
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 = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);
fOk = (GetLastError() == ERROR_SUCCESS);
CloseHandle(hToken);
}
return fOk;
}
调用:
if (EnableDebugPrivilege()) {
MessageBox(NULL,L"EnableDebugPrivilege success.",L"",NULL);
}
else {
MessageBox(NULL, L"EnableDebugPrivilege failed.", L"", NULL);
}
class CEnablePriv
{
public: //公有(对外开放的接口)
//
//设置当前进程优先级为最高(实时)
//
BOOL SetRealTimePriority();
//
//提升当前进程权限函数("SeShutdownPrivilege"关机权限)
//
BOOL EnableShutdownPriv();
//
//提升当前进程权限函数("SeDebugPrivilege"读、写控制权限)
//
BOOL EnableDebugPriv();
//
//提升当前进程权限函数("SeBackupPrivilege"注册表备份权限)
//
BOOL EnableBackupPriv();
//
//提升当前进程权限函数("SeRestorePrivilege"恢复数据权限)
//
BOOL EnableRestorePriv();
private: //私有(内部使用的接口)
};
//
//设置当前进程优先级为最高(实时)
//
//返回值:“false”是失败,“true”是成功。
BOOL CEnablePriv::SetRealTimePriority()
{
if (!SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS))
{
return false;
}
return true;
}
//
//提升当前进程权限函数("SeShutdownPrivilege"关机权限)
//
//返回值:“false”是失败,“true”是成功。
BOOL CEnablePriv::EnableShutdownPriv()
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return false;
if (!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &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 true;
}
//
//提升当前进程权限函数("SeDebugPrivilege"读、写控制权限)
//
//返回值:“false”是失败,“true”是成功。
BOOL CEnablePriv::EnableDebugPriv()
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return false;
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &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 true;
}
//
//提升当前进程权限函数("SeBackupPrivilege"备份数据权限)
//
//返回值:“false”是失败,“true”是成功。
BOOL CEnablePriv::EnableBackupPriv()
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return false;
if (!LookupPrivilegeValue(NULL, SE_BACKUP_NAME, &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 true;
}
//
//提升当前进程权限函数("SeRestorePrivilege"恢复数据权限)
//
//返回值:“false”是失败,“true”是成功。
BOOL CEnablePriv::EnableRestorePriv()
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return false;
if (!LookupPrivilegeValue(NULL, SE_RESTORE_NAME, &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 true;
}
调用:
CEnablePriv a;
if (a.EnableBackupPriv())
{
MessageBox(NULL, L"EnableBackupPriv success", L"", NULL);
}
if (a.EnableDebugPriv())
{
MessageBox(NULL, L"EnableDebugPriv success.", L"", NULL);
}
if (a.EnableRestorePriv())
{
MessageBox(NULL, L"EnableRestorePriv success .", L"", NULL);
}
if (a.EnableShutdownPriv())
{
MessageBox(NULL, L"EnableShutdownPriv success.", L"", NULL);
}
if (a.SetRealTimePriority())
{
MessageBox(NULL, L"SetRealTimePriority success.", L"", NULL);
}
相关文章
- C++四种cast强制类型转换
- C++设计模式10--命令模式(二)(Command)--降低请求发送者与接收者耦合
- C C++ 去除 unused的提示
- C/C++基础讲解(四十六)之图形篇(图形文本的输出/金刚石图案/飘带图案)
- paip.提升用户体验---c++ qt 悬浮窗实现
- 【C++竞赛 C】yyy的数学公式
- iOS .mm(c++和oc混合) .cpp(c++) .m(oc)
- VS中c++文件调用c 函数 ,fatal error C1853 预编译头文件来自编译器的早期版本号,或者预编译头为 C++ 而在 C 中使用它(或相反)
- 【面试攻略】C++面试基础篇2
- 【华为OD机试 2023最新 】 预订酒店(C++ 100%)
- 解答私信@被c++折磨头秃的花季美少女 //C++ 编写一个进阶版的进制转换程序,运行功能如下:请选择要输入的数字的进制(2、8、10、16):请输入该数字:请选择要转换成的进制(2、8。。。
- C++每日扎心结构体之初始化导致的一次异常崩溃。
- C++每日面试之decltype(转)
- AI模型C++部署:ubuntu安装Cython并使用C/C++调用python动态库【附加c++与python互相调用算法demo程序接口的源码】
- C++ CLI简介(什么是C++ CLI)
- 第十三届蓝桥杯国赛 C++ C组 F 题、Python B组 E 题——近似GCD(AC)
- C++ explicit关键字详解
- 机器人C++库(12) Robotics Library 之路径规划算法:PRM、RRT、EET算法
- C++下实现目录的遍历、创建及删除
- 【C++】算法集锦(9):背包问题