一句话提升进程权限

RtlAdjustPrivilege(SE_DEBUG_PRIVILEGE,1,0,NULL); 

这个函数封装在NtDll.dll中(在所有DLL加载之前加载),被微软严格保密,就是说你在MSDN上查不到关于他的任何信息。

.常量 SE_BACKUP_PRIVILEGE, "17", 公开
.常量 SE_RESTORE_PRIVILEGE, "18", 公开
.常量 SE_SHUTDOWN_PRIVILEGE, "19", 公开
.常量 SE_DEBUG_PRIVILEGE, "20", 公开

先来看看这个函数的定义(Winehq给出):

NTSTATUS RtlAdjustPrivilege
(
	ULONG    Privilege,
	BOOLEAN Enable,
	BOOLEAN CurrentThread,
	PBOOLEAN Enabled
)

 参数的含义:

Privilege [In] Privilege index to change.                         // 所需要的权限名称,可以到MSDN查找关于Process Token & Privilege内容可以查到
Enable [In] If TRUE, then enable the privilege otherwise disable. // 如果为True 就是打开相应权限,如果为False 则是关闭相应权限
CurrentThread [In] If TRUE, then enable in calling thread, otherwise process. // 如果为True 则仅提升当前线程权限,否则提升整个进程的权限
Enabled [Out] Whether privilege was previously enabled or disabled.// 输出原来相应权限的状态(打开 | 关闭)

 

很多人大概没有听说过他的大名,但是相信有很多人见过进程提权的过程
拷一段我写的提权上来吧

BOOL ImproveProcPriv()
{
    HANDLE token;
    //提升权限
    if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&token))
    {
        MessageBox(NULL,"打开进程令牌失败...","错误",MB_ICONSTOP);
        return FALSE;
    }
    TOKEN_PRIVILEGES tkp;
    tkp.PrivilegeCount = 1;
    ::LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid);
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    if(!AdjustTokenPrivileges(token,FALSE,&tkp,sizeof(tkp),NULL,NULL))
    {
        MessageBox(NULL,"调整令牌权限失败...","错误",MB_ICONSTOP);
        return FALSE;
    }
    CloseHandle(token);
    return TRUE;
}


看看吧,这个提权快要累死了...
但是 如果有这个函数就不一样了,你可以只用一个函数就实现这个功能,甚至功能远多于上面的代码...
通过恰当的IDE设置和必要的Defination,上面这个函数的功能你完全可以通过一行代码来实现。
RtlAdjustPrivilege(SE_DEBUG_NAME,1,0,NULL);

 

例子:强制关机

// ExitWindow.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>

//定义函数原型
typedef int (__stdcall *Func_RtlAdjustPrivilege)(ULONG, BOOLEAN, BOOLEAN, PBOOLEAN);

int main(int argc, char* argv[])
{
	//装载DLL
	HMODULE hModule = ::LoadLibrary("NTDLL.DLL");
	if(hModule == NULL) {
		printf("LoadLibrary error\n");
		return 0;
	}

	//得到导出函数的地址
	Func_RtlAdjustPrivilege RtlAdjustPrivilege = (Func_RtlAdjustPrivilege)GetProcAddress(hModule, "Func_RtlAdjustPrivilege");
	if(RtlAdjustPrivilege == NULL) {
		printf("GetProcAddress error \n");
		return 0;
	}
	

	//HANDLE hToken;
	//TOKEN_PRIVILEGES tkp;
	
	//取得系统版本
	OSVERSIONINFO osvi;
	osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
	if(GetVersionEx(&osvi) == 0) {
		return false;
	}

	if(osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) {
		/*
		.常量 SE_BACKUP_PRIVILEGE, "17", 公开
		.常量 SE_RESTORE_PRIVILEGE, "18", 公开
		.常量 SE_SHUTDOWN_PRIVILEGE, "19", 公开
		.常量 SE_DEBUG_PRIVILEGE, "20", 公开
		*/
		RtlAdjustPrivilege(19, 1, 0, NULL);
	}

	//强制关机, 不向进程发送WM_QUERYENDSESSION消息
	ExitWindowsEx(EWX_FORCE, 0);

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值