用.NET设计一个假装黑客的屏幕保护程序

本文主要介绍屏幕保护程序的一些相关知识,以及其在安全方面的用途,同时介绍了如何使用 .NET 开发一款屏幕保护程序,并对核心功能做了介绍,案例代码开源:https://github.com/sangyuxiaowu/HackerScreenSaver

背景

前几天在论坛看到想保护公司的服务器共享文件的安全,但是员工自己的电脑总是忘记关闭关机,想再设置一个密码。可是这样不应该先解决一下员工电脑总是忘记关的问题么?

如果你要离开设备几分钟,最好将其锁定,以免他人看到屏幕上的内容,或访问设备上的任何内容。按 Windows 徽标键 + L 立即将其锁定。

动态锁

当然,也可以通过动态锁的方式实现,Windows 可以使用与你的电脑配对的设备检测你何时离开,并在你的已配对设备超出蓝牙范围后立即锁定你的电脑。这使得当你离开电脑并且忘记将其锁定时,其他人更难于访问你的设备。配对完成后,只需在离开时随身带上手机,你的电脑便可在你超出蓝牙覆盖范围之后大约一分钟自动锁定。

4d42b74ddfc4eeac3acdf6b8d1009c88.png
动态锁

但是主动锁定和动态锁,一个要主动一个要配置和蓝牙配合都有一些不足,如何更方便的实现?

屏幕保护程序

屏幕保护程序在我印象里好像是 Windows XP 的时代,现在好像没见过几个 Win10 和 Win11 用户去专门的设置这个,倒是看过 Win7 的用户在用。

针对上门提出的超时锁定,这个屏幕保护程序可以大有作为,我们可以勾选“在恢复时显示登录屏幕”,这样我们在不使用电脑第一段时间后就需要输入密码了。

转到"设置>个性化>锁屏界面,然后选择"屏幕保护程序设置"。

8622138100ff3b5081744fe716b9ab0f.png
屏幕保护程序

屏幕保护程序有用吗

电脑里的屏幕保护程序对保护屏幕有用吗?作为一个古老的功能,实际上屏幕保护程序仅对使用图形界面操作系统的 CRT 显示器有保护作用。对于CRT来说,屏幕保护是为了不让屏幕一直保持静态的画面太长时间。

因为不同显示器的工作原理不同,比如笔记本常用的 LCD, 一直开着屏幕保护反而是帮了倒忙,所以无论什么显示器如果是长时间不用电脑而又需要主机处于运行状态的话,把显示器关掉才是明智的做法。

这里我们可以同时配合“屏幕超时设置”,在一定时间下关闭电脑屏幕。比如1分钟进屏幕保护,3分钟直接关闭屏幕。

c3875be3310c9c1b736bc389b4e1742c.png
屏幕超时设置

设计一个屏幕保护程序

在设计之前我们需要了解一些基本的常识。

屏幕保护程序命令行参数

屏幕保护程序的开发需要提供一些启动参数供设置和预览。Windows 通过命令行参数与屏幕保存程序通信。具体可查阅文档:屏幕保护程序命令行参数[1]

参数说明
显示设置对话框
/c显示设置对话框,使用模态对话框显示到前台
/p <HWND>在<HWND>窗体下预览效果
/s启动屏幕保护程序
/S右键scr的Test启动

了解了启动参数,我们需要对软件的参数启动进行处理。

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);if (args.Length > 0){switch (args[0].ToLower().Trim().Substring(0, 2)){case "/p":Main pri = new Main(new IntPtr(long.Parse(args[1])));pri.ShowDialog();break;case "/s"://Test 或 执行屏保,大写为测试,小写为被启动,这里不做区分Application.Run(new Main());break;default:ShowSetting();break;}}else{ShowSetting();}
}static void ShowSetting()
{MessageBox.Show("这个屏幕保护程序没有可以设置的选项。","黑客模拟器",MessageBoxButtons.OK,MessageBoxIcon.Information);Application.Exit();
}

效果实现思路

我们常常会在一些影视作品中里看到一些黑客高手,在电脑前一阵噼里啪啦“黑”进别人的安全系统的场景。

GeekTyper[2] 就是国外网友制作的几个用来装 X 的娱乐网页。

2a1a0f8e200fe7d6389f2804949a0409.png
GeekTyper

所以软件的主要实现是放置一个无框的窗体,通过 WebBrowser 来显示黑客效果的网页。我们只需要在软件启动时用 WebBrowser 加载喜欢的效果的网页就可以了。

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.TopMost = true;
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;

这里我们可以自行指定一个 URI ,但是为了离线使用,可以将其放到本地,这里我打包了一个分享在仓库的 releases

//webB.Url = new Uri("https://geektyper.com/SCP");
webB.Navigate(Application.StartupPath + "\\html\\hacker.html");

注意退出

编码测试时还有一个特别需要注意的事情,一定要写好退出功能。如果没写好就安装屏保测试的话,就不好退出了呀, Ctrl+Alt+Del 试试吧。

这里说的退出是指屏保运行后,用户操作了鼠标或者是键盘就需要退出屏保程序。因为这里用了 WebBrowser ,同时我们需要考虑多显示器的情况,所以鼠标键盘的事件需要监听全局,这里使用的是 MouseKeyHook[3] 库。

public Main()
{InitializeComponent();// 鼠标键盘事件用于结束屏保m_GlobalHook = Hook.GlobalEvents();m_GlobalHook.MouseClick += M_GlobalHook_MouseClick;m_GlobalHook.KeyPress += M_GlobalHook_KeyPress;m_GlobalHook.MouseMove += M_GlobalHook_MouseMove;
}
private void M_GlobalHook_KeyPress(object sender, KeyPressEventArgs e)
{Application.Exit();
}private void M_GlobalHook_MouseClick(object sender, MouseEventArgs e)
{Application.Exit();
}private bool isActive = false;
private Point mouseLocation;
/// <summary>
/// 鼠标动了一定程度,就结束屏保
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void M_GlobalHook_MouseMove(object sender, MouseEventArgs e)
{if (isPreviewMode) return;if (!isActive){isActive = true;mouseLocation = new Point(e.X, e.Y);return;}if ((Math.Abs(e.X - mouseLocation.X) > 10) ||(Math.Abs(e.Y - mouseLocation.Y) > 10)){Application.Exit();}
}

窗体预览的处理

前面的窗体预览我们处理好了启动参数,只需要通过 WinAPI 更改父窗体就行,但是因为只是简单的处理,没有做缩放,所以我就简单的放了个图片替代了。

[DllImport("user32.dll")]
private static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
public Main(IntPtr intPtr)
{InitializeComponent();//预览SetParent(this.Handle, intPtr);isPreviewMode = true;picLogo.Visible = true;
}

安装测试

编辑好代码,我们生成 exe 程序后,只需要将其后缀名改为 scr 即可作为屏幕保护程序使用,这时右键菜单就可以看到测试,配置和安装。

a82bef78dfc569a4024a18e0763ffc3f.png
右键菜单

最后

至此,我们已经完成了一个屏幕保护程序的开发,快去秀给自己的女朋友吧!当然除了秀技术,你的网页可以换成类似下面的这种。

b7342b74a055ccb9e97689c5f9232b0f.png
saylove

以上代码分享在 https://github.com/sangyuxiaowu/HackerScreenSaver 感兴趣的同学看一眼,顺便求个 Star,感谢。

References

[1] 屏幕保护程序命令行参数: https://learn.microsoft.com/zh-cn/troubleshoot/windows/win32/screen-saver-command-line
[2] GeekTyper: https://geektyper.com/
[3] MouseKeyHook: https://www.nuget.org/packages/MouseKeyHook/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281573.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【IntelliJ】IntelliJ IDEA常用设置及快捷键以及自定义Live templates

IntelliJ IDEA是一款非常优秀的JAVA编辑器&#xff0c;初学都可会对其中的一些做法感到很别扭&#xff0c;刚开始用的时候我也感到很不习惯&#xff0c;在参考了网上一些文章后在这里把我的一些经验写出来&#xff0c;希望初学者能快速适应它&#xff0c;不久你就会感觉到编程是…

c语言时钟报告,C语言图形时钟课程设计实验报告

C语言图形时钟课程设计实验报告 目录1.系统功能要求。2. 数据结构设计及说明。3.程序结构(画流程图) 。4.各模块的功能。5.试验结果(包括输入数据和输出结果) 。6.体会。7.参考文献。8.附录&#xff1a;程序清单及源程序。 系统功能要求&#xff1a;在屏幕上显示一个图形时钟…

微软发布 2023 财年第一季度财报:营收达 501 亿美元,同比增长 11%

北京时间 2022 年 10 月 26 日——微软发布 2023 财年第一季度财报。财报显示&#xff0c;截止到 2022 年 9 月 30 日&#xff1a;营收达到 501 亿美元&#xff0c;增长 11%&#xff08;按固定汇率计算增长 16%&#xff09;运营收入为 215 亿美元&#xff0c;增长 6%&#xff0…

《图解CSS3:核心技术与案例实战》——1.3节渐进增强

本节书摘来自华章社区《图解CSS3&#xff1a;核心技术与案例实战》一书中的第1章&#xff0c;第1.3节渐进增强&#xff0c;作者 大漠&#xff0c;更多章节内容可以访问云栖社区“华章社区”公众号查看 1.3 渐进增强第一次听到“渐进增强”&#xff08;Progressive Enhancement…

阿里云云主机搭建网站攻略 - 云翼计划

阿里云服务器&#xff08;云主机&#xff09;搭建网站攻略 - 云翼计划 提示&#xff1a;此搭建攻略为2017版本&#xff0c;阿里云未跟新前。 最新搭建攻略请前往 Amaya丶夜雨博客 / 最新个人博客 https://www.amayaliu.cn 支持一下哦&#xff0c;谢谢。&#xff08;9.5一…

记一次 .NET 某医疗器械 程序崩溃分析

一&#xff1a;背景 1.讲故事前段时间有位朋友在微信上找到我&#xff0c;说他的程序偶发性崩溃&#xff0c;让我帮忙看下怎么回事&#xff0c;上面给的压力比较大&#xff0c;对于这种偶发性崩溃&#xff0c;比较好的办法就是利用 AEDebug 在程序崩溃的时候自动抽一管血出来&a…

1251: 字母图形 [水题]

1251: 字母图形 [水题] 时间限制: 1 Sec 内存限制: 128 MB提交: 140 解决: 61 统计题目描述 利用字母可以组成一些美丽的图形&#xff0c;下面给出了一个例子&#xff1a; ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 这是一个5行7列的图形&#xff0c;请找出这个图形的规律&…

WPF效果第二百零二篇之TreeView带连接线

前面文章中分享了TreeView支持多选;然而在项目上使用时,领导觉得不满意:体现不了真正的从属关系;既然领导都发话了;那就开整就行了;今天就再来个带有连接线的TreeView效果:1、来看看TreeViewItem的Template:2、展开和收缩动画:3、参考资料https://www.codeproject.com/tips/673…

ObjectTive C语言语法,[译]理解 Objective-C 运行时(下篇)

本文来自网易云社区作者&#xff1a;宋申易所以到底 objc_msgSend 发生了什么&#xff1f;很多事情。看一下这段代码&#xff1a;[self printMessageWithString:"Hello World!"];这实际上被编译器翻译成&#xff1a;objc_msgSend(self, selector(printMessageWithStr…

菜鸟学习MVC实录:弄清项目各类库的作用和用法

MVC模式即&#xff1a;模型&#xff08;Model&#xff09;-视图&#xff08;View&#xff09;-控制器&#xff08;Controller&#xff09; Model &#xff08;模型&#xff09;&#xff1a;是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责数据库中存取数据View…

SSL服务器

2019独角兽企业重金招聘Python工程师标准>>> SSL 是一个安全协议&#xff0c;它提供使用 TCP/IP 的通信应用程序间的隐私与完整性。因特网的 超文本传输协议&#xff08;HTTP&#xff09;使用 SSL 来实现安全的通信。 在客户端与服务器间传输的数据是通过使用对称算…

微软Skype Translator将支持阿拉伯语即时语音翻译

据美国科技时代网(Tech Times)3月9日报道&#xff0c;日前&#xff0c;微软旗下即时翻译软件Skype Translator再添新语种&#xff0c;微软宣布Skype Translator已经支持阿拉伯语。Skype用户可通过使用阿拉伯语即时翻译与朋友、家人以及海外商业伙伴进行交流。 据报道&#xff0…

是什么让.NET7的Min和Max方法性能暴增了45倍?

简介在之前的一篇文章.NET性能系列文章一&#xff1a;.NET7的性能改进中我们聊到Linq中的Min()和Max()方法.NET7比.NET6有高达45倍的性能提升&#xff0c;当时Benchmark代码和结果如下所示&#xff1a;[Params(1000)] public int Length { get; set; }private int[] arr;[Globa…

在Identity框架中使用RoleBasedAuthorization

本文将介绍在 Identity 框架中如何使用 Sang.AspNetCore.RoleBasedAuthorization[1] 库。核心介绍Identity 和 jwt 的基本配置我们在这里不再赘述&#xff0c;可以参考最后的项目样例。核心的代码主要为 IRolePermission 的实现。internal class MyRolePermission : IRolePermi…

Magicodes.IE 2.7.0-beta发布

2.7.0-beta2022.10.27使用SixLabors.ImageSharp替代System.Drawing&#xff0c;感谢linch90 &#xff08;见pr#454&#xff09;2.6.92022.10.26fix: 动态数据源导出到多个sheet的问题 &#xff08;见#449&#xff09;2.6.82022.10.18Excel模板导出添加API&#xff0c;以支持通过…

Ubuntu 18.04上Qmmp安装教程

Qmmp&#xff0c;一个开源的基于Qt的多媒体播放器。它具有多种音频文件格式支持&#xff0c;DSP效果&#xff0c;视觉效果;输出系统支持&#xff08;OSS4&#xff08;FreeBSD&#xff09;&#xff0c;ALSA&#xff08;Linux&#xff09;&#xff0c;Pulse Audio&#xff0c;JAC…

C# WPF 表格控件的前后台数据交互?

概述GridControl控件使用我们已经进行了实例讲解&#xff0c;这节内容我们列举一个特殊的应用场景&#xff1a;表格中有一列CheckBox&#xff0c;默认都处于勾选状态&#xff0c;当用户通过界面操作后&#xff0c;我们要确保用户至少选择了一项&#xff0c;相当于一次数据验证&…

Java(C#)基础差异-语法

1、long类型 Java long类型&#xff0c;若赋值大于int型的最大值&#xff0c;或小于int型的最小值&#xff0c;则需要在数字后加L或者l&#xff0c;表示该数值为长整数&#xff0c;如long num2147483650L。 举例如下&#xff1a; public static void main(String[] args) {/** …

android防止左向右滑出程序,Android——ViewPager禁止左右滑动的实现

目录1 背景用ViewPagerBottomNavigationView多个Fragment快速搭建的页面切换架构&#xff0c;一个有四个页面&#xff0c;因为测试需要&#xff0c;需要屏蔽掉中间的两个&#xff0c;做法是&#xff1a;设置不可点击选择&#xff1a;xml布局文件中&#xff0c;BottomNavigation…

Yii2 的快速配置 api 服务 yii2-fast-api

yii2-fast-api yii2-fast-api是一个Yii2框架的扩展&#xff0c;用于配置完善Yii2&#xff0c;以实现api的快速开发。 此扩展默认的场景是APP的后端接口开发&#xff0c;因此偏向于实用主义&#xff0c;并未完全采用restfull的标准&#xff0c;方便前端开发处理接口数据以及各种…