【动态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】
【动态UAC权限】无盾程序(win32&cmd)的更多相关文章
- 如何让Qt程序在运行时获取UAC权限
在pro文件中加入以下语句: QMAKE_LFLAGS += /MANIFESTUAC:\"level=\'requireAdministrator\' uiAccess=\'false\' ...
- C# 控制台使用 UAC 权限
原文:C# 控制台使用 UAC 权限 本文告诉大家如何在 C# 控制台项目使用 UAC 权限.这个方法在 WPF 和 控制台都是可以使用. 右击项目,点击添加文件,找到程序清单 在 WPF 使用 UA ...
- Android 动态申请权限问题【转】
Android 动态申请权限问题 感谢大佬:https://www.jianshu.com/p/2324a2bdb3d4 感谢大佬:https://blog.csdn.net/weixin_42910 ...
- .NET中提升UAC权限的方法总结
[题外话] 从Vista开始,由于增加了UAC(用户账户控制,User Account Control)功能,使得管理员用户平时不再拥有能控制所有功能的管理员权限了,所以在调用很多比较重要的功能时需要 ...
- UAC权限
.NET中提升UAC权限的方法总结 [题外话] 从Vista开始,由于增加了UAC(用户账户控制,User Account Control)功能,使得管理员用户平时不再拥有能控制所有功能的管理员权 ...
- 说说Android6.0动态申请权限的那些坑
白天在做SDK23版本的适配,遇到了不少坑,现在抽空记下来,以此为戒. 首先要知道哪些坑,就得先了解一些定义和基本使用方式. 那么先介绍一下动态申请的权限分组情况. 下面的权限组是由谷歌官方定义的,目 ...
- android 6.0之后动态获取权限
Android 6.0 动态权限申请 1. 概述 Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户.在 Android 6.0 或更高版本对权限 ...
- Spring Security 动态url权限控制(三)
一.前言 本篇文章将讲述Spring Security 动态分配url权限,未登录权限控制,登录过后根据登录用户角色授予访问url权限 基本环境 spring-boot 2.1.8 mybatis-p ...
- 管理员权限运行-C#程序
C#程序以管理员权限运行 在Vista 和 Windows 7 及更新版本的操作系统,增加了 UAC(用户账户控制) 的安全机制,如果 UAC 被打开,用户即使以管理员权限登录,其应用程序默认情况下也 ...
随机推荐
- 重定向(redirect)与转发(forward)的区别
重定向(redirect)与转发(forward)的区别 1.重定向时地址栏会发生改变,转发时地址栏不会发生改变 当浏览器请求资源时,服务器直接访问目标地址的URL,将URL的响应内容读取,之后再将读 ...
- 国际化相对时间格式化API:Intl.RelativeTimeFormat
原文:The Intl.RelativeTimeFormat API 作者:Mathias Bynens(@mathias) 现代 Web 应用程序通常使用"昨天","4 ...
- 前端网络安全——前端XSS
XSS攻击:Cross Site Scripting(跨站脚本攻击) XSS攻击原理:程序+数据=结果,如果数据中包含了一部分程序,那么结果就会执行不属于站点的程序. XSS攻击能干什么?能注入Scr ...
- leetcode 1962. 移除石子使总数最小
题目描述: 给你一个整数数组 piles ,数组 下标从 0 开始 ,其中 piles[i] 表示第 i 堆石子中的石子数量.另给你一个整数 k ,请你执行下述操作 恰好 k 次: 选出任一石子堆 p ...
- JavaScript 遍历对象、数组总结
在日常工作过程中,我们对于javaScript遍历对象.数组的操作是十分的频繁的,今天抽空把经常用到的方法小结一下,方便今后参考使用! javaScript遍历对象总结 1.使用Objec ...
- location中的各个属性
http://172.16.20.218:8080/m/MGU20201126001-001/index.html?username=admin&password=123#/write 浏 ...
- javascript,如何实现数据绑定
在三大框架 抢占前端开发技术领域的时代,基本每个框架都是实现了数据绑定, 今天我们来解密一下数据绑定的原理, 原理关乎一个很关键的东西,Object.prototype.__defineSetter和 ...
- Mybatis个人笔记
Mybatis 简介 官网地址:mybatis – MyBatis 3 | 简介 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射.MyBatis 免除了几乎所有的 ...
- Spring Boot-@Configuration注解
@Configuration:指明当前类是一个配置类,就是来替代spring的配置文件 @Configuration public class MyConfigFile { @Bean public ...
- Jenkins+gitlab手动部署
环境: Jenkins:172.16.88.221 (安装Jenkins和git命令) gitlab:172.16.88.221 (安装gitlab) 远程部署机器:172.16.88.220 (安装 ...