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

  • 相关阅读:
    就打排序算法总结
    php 垃圾回收机制写时复制和引用计数
    zend studio 使用断点调试
    SiteServer 迁移至 Windows 2008 R2 问题汇总
    [项目改造中的点滴]C#中IDataReader和DataSet的区别与使用场景
    顺序分支知识总结
    我的第一篇博客
    [原创]删除GRUB引导恢复Windows引导,不用下载任何工具
    在C++builder中使用正则表达式,非boost库,简单!~
    SQL 存储过程优化经验
  • 原文地址:https://www.cnblogs.com/pta00/p/13602349.html
Copyright © 2011-2022 走看看