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_())
#其实开了两个进行(不直接管理员运行的话)
#普通进程为父进程没有窗口,创建一个有管理员权限的子进程,然后等着子进程结束,自己也结束
#子进程有窗口,提供给用户使用。
一段像屎一样的在pyside2下的windows提权代码
最新推荐文章于 2023-12-13 21:39:55 发布
该代码创建了一个使用PySide2和Qt库的GUI窗口,允许用户输入命令并以管理员权限执行。如果无管理员权限,程序会提示用户提升权限。执行的命令结果将显示在文本框中。同时,程序监控子进程,确保所有子进程关闭后主进程才结束。
摘要由CSDN通过智能技术生成