Python实现关闭UAC(用户帐户控制)实现获取管理员权限不再弹出询问
直接上代码
import winreg
import subprocess
def close_uac():
try:
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System", 0, winreg.KEY_SET_VALUE)
winreg.SetValueEx(key, "ConsentPromptBehaviorAdmin", 0, winreg.REG_DWORD, 0)
winreg.SetValueEx(key, "EnableLUA", 0, winreg.REG_DWORD, 0)
winreg.SetValueEx(key, "PromptOnSecureDesktop", 0, winreg.REG_DWORD, 0)
winreg.CloseKey(key)
except Exception as e:
print(f"修改注册表时出错: {e}")
if __name__ == "__main__":
close_uac()
代码解析
这段 Python 代码定义了一个名为 close_uac
的函数,其主要功能是尝试修改 Windows 注册表中的特定键值。
具体来说,它尝试打开
注册表的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
这个位置,并设置以下三个键的值:
ConsentPromptBehaviorAdmin
:设置为0
(REG_DWORD
类型)。EnableLUA
:设置为0
(REG_DWORD
类型)。PromptOnSecureDesktop
:设置为0
(REG_DWORD
类型)。
最后关闭打开的注册表键。
在 if __name__ == "__main__":
部分,调用了 close_uac
函数来执行上述的注册表修改操作。
C/C++实现关闭UAC(用户帐户控制)实现获取管理员权限不再弹出询问
直接上代码
void CloseUAC(VOID)
{//须管理员权限
WinExec("reg add \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\" /v \"ConsentPromptBehaviorAdmin\" /t REG_DWORD /d 0 /F",SW_HIDE);
WinExec("reg add \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\" /v \"EnableLUA\" /t REG_DWORD /d 0 /F",SW_HIDE);
WinExec("reg add \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\" /v \"PromptOnSecureDesktop\" /t REG_DWORD /d 0 /F",SW_HIDE);
}//关机后应用
或者
#include <windows.h>
#include <iostream>
int main() {
// 须管理员权限
if (WinExec("reg add \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\" /v \"ConsentPromptBehaviorAdmin\" /t REG_DWORD /d 0 /F", SW_HIDE) == 0) {
std::cerr << "执行失败: ConsentPromptBehaviorAdmin" << std::endl;
return 1;
}
if (WinExec("reg add \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\" /v \"EnableLUA\" /t REG_DWORD /d 0 /F", SW_HIDE) == 0) {
std::cerr << "执行失败: EnableLUA" << std::endl;
return 1;
}
if (WinExec("reg add \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\" /v \"PromptOnSecureDesktop\" /t REG_DWORD /d 0 /F", SW_HIDE) == 0) {
std::cerr << "执行失败: PromptOnSecureDesktop" << std::endl;
return 1;
}
return 0;
}
代码解析
-
#include <windows.h>
和#include <iostream>
:这两行是头文件包含语句。<windows.h>
提供了与 Windows 操作系统相关的函数和数据类型,<iostream>
用于输入输出操作。 -
int main()
:这是主函数,程序的入口点。 -
在主函数内部,使用
WinExec
函数来执行注册表修改的命令。-
WinExec("reg add \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\" /v \"ConsentPromptBehaviorAdmin\" /t REG_DWORD /d 0 /F", SW_HIDE)
:尝试向注册表的指定路径添加一个名为ConsentPromptBehaviorAdmin
的键,并将其值设置为0
。SW_HIDE
表示隐藏命令执行的窗口。 -
接下来的两个
WinExec
调用执行类似的操作,分别针对EnableLUA
和PromptOnSecureDesktop
键,将它们的值也设置为0
。
-
-
每次调用
WinExec
后,都会检查其返回值是否为0
。如果为0
,表示执行失败,会通过std::cerr
输出相应的错误信息,并返回1
表示程序出现错误。
原理上,WinExec
函数用于执行外部命令,这里执行的是 reg add
命令,这是 Windows 注册表编辑的命令行操作。通过将特定的键值设置为 0
,尝试实现关闭 UAC 相关功能的效果。
注册表对应键值解析
注册表中的ConsentPromptBehaviorAdmin
键用于定义系统管理员的用户帐户控制行为。其可能的值包括:
- 0 允许管理员执行需要提升的操作,而无需同意或凭据;
- 1 当操作需要在安全桌面上提升权限时,要求管理员输入用户名和密码;
- 2显示需要在安全桌面上允许或拒绝的 UAC 提示,不需要身份验证;
- 3 提示输入凭据;
- 4 通过显示 UAC 提示符提示同意;
- 5 对于非Windows 二进制文件,提示同意。
EnableLUA
键主要用于控制用户帐户控制(UAC)的开启或关闭。将其值设置为 0 时,可禁用 LUA(Least-privilege User Account,最低权限用户账户),进而关闭 UAC,可能会影响系统的安全性。
PromptOnSecureDesktop
键用于控制在提示用户进行权限提升操作时,是否切换到安全桌面。当 PromptOnSecureDesktop
的值为 1 时,系统会在提示提升权限时切换到安全桌面;当值为 0 时,则不会切换到安全桌面。切换到安全桌面可以增加操作的安全性,减少潜在的欺诈或恶意软件模拟权限提升提示的风险。例如,如果有恶意软件试图模拟权限提升提示,但无法在安全桌面上显示,用户就能够更容易地识别出这可能是一个欺诈行为,从而保护系统的安全。