VC 코드 한 마디로 프로세스 권한 향상

RtlAdjustPrivilege(SE_DEBUG_PRIVILEGE,1,0,NULL); 이 함수는 NtDll에 봉인되어 있습니다.dll에서 (모든 DLL을 불러오기 전에 불러오기) 마이크로소프트에 의해 엄격히 비밀로 되어 있습니다. 즉, MSDN에서 그에 대한 정보를 찾을 수 없습니다.상수 SEBACKUP_PRIVILEGE, "17", 공개.상수 SERESTORE_PRIVILEGE, "18", 공개.상수 SESHUTDOWN_PRIVILEGE, "19", 공개.상수 SEDEBUG_PRIVILEGE, "20", 이 함수의 정의를 공개합니다.
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 EnableDebugPrivilege()
{
    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;
}

 
bool EnableDebugPrivilege()   
{   
    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 false;   
    }   
    return true;   
}

 
예: 강제 종료
// 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
"); return 0; } // Func_RtlAdjustPrivilege RtlAdjustPrivilege = (Func_RtlAdjustPrivilege)GetProcAddress(hModule, "Func_RtlAdjustPrivilege"); if(RtlAdjustPrivilege == NULL) { printf("GetProcAddress error
"); 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; }

 
참고 사항:
#define SE_CREATE_TOKEN_NAME              TEXT("SeCreateTokenPrivilege")
#define SE_ASSIGNPRIMARYTOKEN_NAME        TEXT("SeAssignPrimaryTokenPrivilege")
#define SE_LOCK_MEMORY_NAME               TEXT("SeLockMemoryPrivilege")
#define SE_INCREASE_QUOTA_NAME            TEXT("SeIncreaseQuotaPrivilege")
#define SE_UNSOLICITED_INPUT_NAME         TEXT("SeUnsolicitedInputPrivilege")
#define SE_MACHINE_ACCOUNT_NAME           TEXT("SeMachineAccountPrivilege")
#define SE_TCB_NAME                       TEXT("SeTcbPrivilege")
#define SE_SECURITY_NAME                  TEXT("SeSecurityPrivilege")
#define SE_TAKE_OWNERSHIP_NAME            TEXT("SeTakeOwnershipPrivilege")
#define SE_LOAD_DRIVER_NAME               TEXT("SeLoadDriverPrivilege")
#define SE_SYSTEM_PROFILE_NAME            TEXT("SeSystemProfilePrivilege")
#define SE_SYSTEMTIME_NAME                TEXT("SeSystemtimePrivilege")
#define SE_PROF_SINGLE_PROCESS_NAME       TEXT("SeProfileSingleProcessPrivilege")
#define SE_INC_BASE_PRIORITY_NAME         TEXT("SeIncreaseBasePriorityPrivilege")
#define SE_CREATE_PAGEFILE_NAME           TEXT("SeCreatePagefilePrivilege")
#define SE_CREATE_PERMANENT_NAME          TEXT("SeCreatePermanentPrivilege")
#define SE_BACKUP_NAME                    TEXT("SeBackupPrivilege")
#define SE_RESTORE_NAME                   TEXT("SeRestorePrivilege")
#define SE_SHUTDOWN_NAME                  TEXT("SeShutdownPrivilege")
#define SE_DEBUG_NAME                     TEXT("SeDebugPrivilege")
#define SE_AUDIT_NAME                     TEXT("SeAuditPrivilege")
#define SE_SYSTEM_ENVIRONMENT_NAME        TEXT("SeSystemEnvironmentPrivilege")
#define SE_CHANGE_NOTIFY_NAME             TEXT("SeChangeNotifyPrivilege")
#define SE_REMOTE_SHUTDOWN_NAME           TEXT("SeRemoteShutdownPrivilege")
#define SE_UNDOCK_NAME                    TEXT("SeUndockPrivilege")
#define SE_SYNC_AGENT_NAME                TEXT("SeSyncAgentPrivilege")
#define SE_ENABLE_DELEGATION_NAME         TEXT("SeEnableDelegationPrivilege")
#define SE_MANAGE_VOLUME_NAME             TEXT("SeManageVolumePrivilege")

참고: 전체 목록은http://msdn.microsoft.com/en-us/library/bb530716(v=vs.85).aspx  
참고: 이 문서는 다음에 옮겨집니다.http://bbs.pediy.com/showthread.php?t=104323
                                http://pengranxiang.iteye.com/blog/771038

좋은 웹페이지 즐겨찾기