美文网首页
无限阳光修改及驱动中的权限提升

无限阳光修改及驱动中的权限提升

作者: 温柔倾怀 | 来源:发表于2019-11-22 21:56 被阅读0次
    我们要修改一个进程的访问令牌,首先要获得进程访问令牌的句柄,这可以通过OpenProcessToken得到,函数的原型如下:
    OpenProcessToken 得到进程的令牌句柄
    BOOL OpenProcessToken(
            HANDLE ProcessHandle,   //要修改访问权限的进程句柄
        DWORD DesiredAccess,    //指定你要进行的操作类型,TOKEN_ADJUST_PRIVILEGES表示你下面将要进行“修改令牌的访问权限”的操作。
        PHANDLE TokenHandle     //返回的访问令牌指针
    );
    
    AdjustTokenPrivileges的原型如下:
    BOOL AdjustTokenPrivileges(
        HANDLE TokenHandle, // 访问令牌的句柄
        BOOL DisableAllPrivileges, // 是进行权限修改还是除能(Disable)所有权限
        PTOKEN_PRIVILEGES NewState, // 指明要修改的权限,是一个指向TOKEN_PRIVILEGES结构的指针,该结构包含一个数组,数据组的每个项指明了权限的类型和要进行的操作
        DWORD BufferLength, // 结构PreviousState的长度,如果PreviousState为空,该参数应为NULL
        PTOKEN_PRIVILEGES PreviousState, // 也是一个指向TOKEN_PRIVILEGES结构的指针,存放修改前的访问权限的信息,可空
        PDWORD ReturnLength // 实际PreviousState结构返回的大小
    );
    
    TOKEN_PRIVILEGES 这个结构,其声明如下:
    typedef struct _TOKEN_PRIVILEGES {
        DWORD PrivilegeCount;   //数组原素的个数
        LUID_AND_ATTRIBUTES Privileges[];   //一个LUID_AND_ATTRIBUTES类型的数组
    } TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;
    
    再来看一下LUID_AND_ATTRIBUTES这个结构的内容,声明如下:
    typedef struct _LUID_AND_ATTRIBUTES {
        LUID Luid;  //指权限的类型
        DWORD Attributes;   //指明了我们要进行的操作类型
    } LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <Windows.h>
    #include <Tlhelp32.h>
    
    
    // 提升权限
    BOOL EnableDebugPrivilege() { 
        HANDLE hToken; 
        BOOL fOK = FALSE;
        
        //1. 获取进程访问令牌的句柄
        if (OpenProcessToken(::GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)){
            TOKEN_PRIVILEGES tp;
            tp.PrivilegeCount = 1;
        //2. 查询进程的权限 LookupPrivilegeValue
            LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
            tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
        //3. 对这个访问令牌进行修改 AdjustTokenPrivileges
            AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);
            fOK = (GetLastError() == ERROR_SUCCESS);
            CloseHandle(hToken);
        }
        return fOK;
    }
    
    //获取进程ID
    int GetProcessID(WCHAR * szProcessName){
        HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        if (INVALID_HANDLE_VALUE == hSnapshot){
            return 0;
        }
        PROCESSENTRY32 pi;
        pi.dwSize = sizeof(PROCESSENTRY32); //第一次使用必须初始化成员
        BOOL bRet = Process32First(hSnapshot, &pi);
        while (bRet){
            /*
            循环遍历添加自己的额外代码
            */
            //判断进程名是否一致,返回0代表一致
            int flag = wcscmp(pi.szExeFile, szProcessName);
            if (flag==0)
            {
                printf("EQUAL");
                return pi.th32ProcessID;//进程一致,返回进程ID
            }
            bRet = Process32Next(hSnapshot, &pi);
        }
        return 0;
    }
    
    //修改内存中的静态地址
    int main() {
    
        //目标是锁定阳光的数量
        //WriteProcessMemory Windows系统API 1.进程句柄  2.地址(基址,静态地址) 3.值(值得地址) 4.写入的数据宽度 5.写入的宽度(传出的,SIZE_T地址)
        //OpenProcess 权限,是否继承句柄,进程ID(PID),
        //手动输入进程ID,下一节我们自动获取ID了  26452
        //判断ID是否合法
        //循环修改目标值
    
        int procId = GetProcessID(L"PlantsVsZombies.exe");
        if (procId){
            HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procId);
            if (hProcess == NULL){
                printf("open process fail;\n");
                system("pause");
            }else{
                int nValue = 5000;
                SIZE_T dwByte = 0;
                LPVOID lpAddr = (LPVOID)0x0FE56CD0;
                while (true){
                    bool flag = WriteProcessMemory(hProcess, lpAddr, &nValue, 4, &dwByte);
                    if (flag != true){
                        printf("write process memory fail;\n");
                        system("pause");
                    }
                }
            }       
        }
        return 0;
    }
    

    提升权限

    如果上述代码提升权限还不够用,进行如下设置


    相关文章

      网友评论

          本文标题:无限阳光修改及驱动中的权限提升

          本文链接:https://www.haomeiwen.com/subject/jzfcwctx.html