【Python、C/C++实现关闭UAC(用户帐户控制)实现获取管理员权限不再弹出询问】

15 篇文章 0 订阅
8 篇文章 0 订阅

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 :设置为 0REG_DWORD 类型)。
  • EnableLUA :设置为 0REG_DWORD 类型)。
  • PromptOnSecureDesktop :设置为 0REG_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 的键,并将其值设置为 0SW_HIDE 表示隐藏命令执行的窗口。

    • 接下来的两个 WinExec 调用执行类似的操作,分别针对 EnableLUAPromptOnSecureDesktop 键,将它们的值也设置为 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 时,则不会切换到安全桌面。切换到安全桌面可以增加操作的安全性,减少潜在的欺诈或恶意软件模拟权限提升提示的风险。例如,如果有恶意软件试图模拟权限提升提示,但无法在安全桌面上显示,用户就能够更容易地识别出这可能是一个欺诈行为,从而保护系统的安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值