• 【动态UAC权限】无盾程序(win32&cmd)



    可以看到两种不同的提权方式,注意是动态,用代码提权,而不是用清单文件提前处理。

    函数都写好了,这里不多做解释。


    win32程序:

    首先需要这俩头文件,第二个我忘了啥函数要用了,总之出问题加上就对了:(补:获取程序路径的函数)

    #include <windows.h>
    #include <Shlobj.h>

    检测是否以UAC启动:

    //返回1为管理员权限,0位普通 
    BOOL IsUserAdmin(void){
        BOOL b;
        SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
        PSID AdministratorsGroup; 
        AllocateAndInitializeSid(
            &NtAuthority,
            2,
            SECURITY_BUILTIN_DOMAIN_RID,
            DOMAIN_ALIAS_RID_ADMINS,
            0, 0, 0, 0, 0, 0,
            &AdministratorsGroup); 
        CheckTokenMembership(NULL,AdministratorsGroup,&b);
        FreeSid(AdministratorsGroup); 
        return(b);
    }

    主要部分,此处应注意返回值,程序中应在开头这样编写:

      if(IsUserAdmin()){
            //is UAC
            //什么都不做 
        }
        else{
            //not UAC
            char path[100];
            GetModuleFileName(NULL,path,100);
        
            SHELLEXECUTEINFO execinfo;  
            memset(&execinfo,0,sizeof(execinfo));  
            execinfo.lpFile         =path;  
            execinfo.cbSize         =sizeof(execinfo);  
            execinfo.lpVerb         ="runas";  
            execinfo.fMask          =SEE_MASK_NO_CONSOLE;  
            execinfo.nShow          =SW_SHOWDEFAULT;  
            //execinfo.lpParameters   =NULL;  
      
            ShellExecuteEx(&execinfo);
            CloseHandle(execinfo.hProcess);
            
            exit(0);
        }

    此处的else内就是UAC提权的过程,通过 ShellExecuteEx 函数以UAC权限启动,启动完成后当前程序退出。

    我懒得讲解,不明白的可以查微软文档。


    控制台程序:

    看到没我这么贴心,快来感谢我。

    头文件不用多说:

    #include <stdio.h>
    #include <windows.h>

    还是让我多说了,唉,我真是太好了

    控制台的参数可以直接获得程序路径,就不用其它函数了,通常不这么做:

    int main(int argc,char const *argv[])

    好,下一步直接把这一坨往开头一方,完事:

    if(IsUserAdmin()){
            //is UAC
            //什么都不做 
        }
        else{
            //not UAC
            char path[100];
            GetModuleFileName(NULL,path,100);
        
            SHELLEXECUTEINFO execinfo;  
            memset(&execinfo,0,sizeof(execinfo));  
            execinfo.lpFile         =path;  
            execinfo.cbSize         =sizeof(execinfo);  
            execinfo.lpVerb         ="runas";  
            execinfo.fMask          =SEE_MASK_NO_CONSOLE;  
            execinfo.nShow          =SW_SHOWDEFAULT;  
            //execinfo.lpParameters   =NULL;  
      
            ShellExecuteEx(&execinfo);
            CloseHandle(execinfo.hProcess);
            
            exit(0);
        }

    事了拂衣去,深藏功与名~

    【欢迎加入我的qq群:789209269

  • 相关阅读:
    实验二 Java语言基础
    实验一 熟悉Java程序开发环境
    进程间通信
    2020系统综合实践大作业
    树莓派picamera模块的基本使用
    树莓派(Raspberry Pi)基本配置
    软工实践个人总结
    Beta版本演示
    Functional mechanism: regression analysis under differential privacy_阅读报告
    《ENSEMBLE ADVERSARIAL TRAINING: ATTACKS AND DEFENSES》 _论文学习报告
  • 原文地址:https://www.cnblogs.com/pta00/p/13602349.html
Copyright © 2020-2023  润新知