zoukankan      html  css  js  c++  java
  • 【动态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

  • 相关阅读:
    git 的分支体系命令汇总
    git命令行学习思路总结
    angular1.5版本的自我认识
    我最想去的公司啊 -- 幸福面试两小时
    【转】【Asp.Net MVC】asp.net mvc Model验证总结及常用正则表达式
    时间被序列化后的页面显示的问题
    JS组件Bootstrap实现弹出框和提示框效果代码
    Bootstrap组件之导航条
    Bootstrap学习笔记(四)-----Bootstrap每天必学之表单
    Bootstrap学习笔记(三)-----Bootstrap每天必学之表格
  • 原文地址:https://www.cnblogs.com/pta00/p/13602349.html
Copyright © 2011-2022 走看看