优秀的编程知识分享平台

网站首页 > 技术文章 正文

c++如何写出人见人“唉”车见车爆胎

nanyue 2024-10-18 07:34:53 技术文章 23 ℃

C++如何写出人见人"唉"的代码(三)蓝屏?

请注意看这个Java程序员,趁领导不在又悄悄玩起了秋秋飞车,这已经是他第365次尝试。因为每到决胜时刻他的电脑就蓝屏了,不出意外意外就出现了。你看他的电脑又蓝屏了,这次他忍无可忍,一把砸碎了电脑。为了搞清楚背后的原因,我找哆啦a梦借了时光机,终于看到了导致蓝屏的源代码。

下面我们一起来看看这些代码。这两行定义了两个函数指针,这个函数定义了触发蓝屏的条件。从代码中可以看出,在工作时间玩游戏超过10分钟就会触发蓝屏。代码中大量的使用了位移操作,使得代码更难读懂。这家公司也真够狠的,上班时间从早上7点到晚上11点,难怪别人会悄悄摸鱼。

而这个函数返回了一个状态码,作者为了使代码变得更难阅读,用到了异或操作。异或操作的重要特性就是两次异或,结果将变成原来的值。因此这里一顿操作,实际上还是返回n status本身。

这个函数从ntdll中动态加载RTladjustprivilege和NtRaiseHardError两个函数。

·RtlAdjustPrivilege是微软未公开的内核函数,用于打开本进程的token,然后提升自己的权限。

·NtRaiseHardError也是微软未公开的内核函数,它允许用户模式代码向内核报告一个严重的错误,并触发错误对话框,也就是蓝屏死机。

我们继续看代码。

·这里首先取函数地址,而这里调用RtlAdjustPrivilege,让自己的进程拥有19权限,也就是shut down privilege。为了使代码更难阅读,使用了更复杂的条件结构。

·这一行代码判断触发条件,如果在上班时间玩游戏超过10分钟就触发。而这一行取状态码STATUS_FLOAT_MULTIPLE_FAULTS,表示产生多个浮点运算错误。

·最后调用NtRaiseHardError触发蓝屏。

最后我们运行这段代码。这些公司为了防止程序员玩游戏,真是费尽了心思,写的代码也是人见人哎呀。而视频中的Java程序员知道真相后,恐怕这辈子都不会再碰C++了。

关注我,解锁更多编程技巧。

Tags:

最近发表
标签列表