一段像屎一样的在pyside2下的windows提权代码

该代码创建了一个使用PySide2和Qt库的GUI窗口,允许用户输入命令并以管理员权限执行。如果无管理员权限,程序会提示用户提升权限。执行的命令结果将显示在文本框中。同时,程序监控子进程,确保所有子进程关闭后主进程才结束。
摘要由CSDN通过智能技术生成
import sys
import subprocess
import ctypes
import psutil
import time
from win32com.shell.shell import ShellExecuteEx
from PySide2.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton, QTextEdit, QMessageBox

class Window(QWidget):

    def __init__(self):
        super().__init__()

        #获取当前屏幕的尺寸
        screen = QApplication.primaryScreen()
        size = screen.size()
        self.width = size.width()
        self.height = size.height()

        #初始化一个文本框,用于显示数据
        self.textbox = QTextEdit(self)
        self.textbox.setReadOnly(True)
        
        
        #初始化UI
        self.initUI()
    
    #定义UI
    def initUI(self):
        #定义文本框的样式
        self.textbox.move(0, self.height/8) 
        self.textbox.resize(self.width/2, self.height/2-self.height/8) 



        # 输入框
        self.le = QLineEdit(self)
        self.le.move(100, 40)
        self.le.resize(300,70)
        
        
        # 按钮
        self.btn = QPushButton("执行", self)
        self.btn.move(self.width/2-240, 40)
        self.btn.resize(100,70)
        self.btn.clicked.connect(self.run_cmd)

        
        self.setGeometry(300, 300, self.width/2, self.height/2)
        self.setWindowTitle("提权dome")
        self.show()
        
    #定义事件
    def run_cmd(self):
        command = self.le.text()
        if command:
            process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE) 
            process.wait()
            if process.returncode== 0:
                self.textbox.append("命令已经执行,执行成了啥样我不知道,下面可能有输出")
                output = process.communicate()[0].decode('gb2312')
                self.textbox.append(output)
            else:
                self.textbox.append("命令错误")
        else:
            self.textbox.append("输入为空")

        
    def resizeEvent(self, event):
        width = self.width()
        height = self.height()
        self.textbox.resize(width, height/2)

  

#判断管理员权限
def is_admin():
    try: 
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False


if __name__ == "__main__": 
    app = QApplication(sys.argv) 

    if not is_admin():
        button = QMessageBox.question(None, "提权提醒", "此程序需要管理员权限运行,是否提升?",  
                                               QMessageBox.Yes | QMessageBox.No)
        if button == QMessageBox.Yes:
                
            ShellExecuteEx(lpVerb='runas', lpFile=sys.executable, lpParameters=' '.join(sys.argv))
            
            process = psutil.Process()  # 获取当前进程对象
            children = process.children()  # 获取子进程列表
            
            while len(children) > 0:
                process = psutil.Process()  # 获取当前进程对象
                children = process.children()  # 获取子进程列表
                print("1")
                time.sleep(1)
            sys.exit()
            
        else:
           pass

    else:    
        w = Window()
            
        sys.exit(app.exec_())

#其实开了两个进行(不直接管理员运行的话)
#普通进程为父进程没有窗口,创建一个有管理员权限的子进程,然后等着子进程结束,自己也结束
#子进程有窗口,提供给用户使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值