用.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.pswp.cn/news/281573.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281573.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281573.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【IntelliJ】IntelliJ IDEA常用設置及快捷鍵以及自定義Live templates

IntelliJ IDEA是一款非常優秀的JAVA編輯器&#xff0c;初學都可會對其中的一些做法感到很別扭&#xff0c;剛開始用的時候我也感到很不習慣&#xff0c;在參考了網上一些文章后在這里把我的一些經驗寫出來&#xff0c;希望初學者能快速適應它&#xff0c;不久你就會感覺到編程是…

復習Javascript專題(一):基本概念部分

一、數據類型 基本類型&#xff1a;Null Boolean String Undefined Number(NB SUN)引用類型&#xff1a;Array Function Object類型判斷&#xff1a;typeof 返回結果"undefined"&#xff08;未定義&#xff09; "boolean"(布爾值) "st…

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一…

用c語言遞歸函數做掃雷,【C語言基礎學習---掃雷游戲】(包含普通版+遞歸煉獄版)...

/*******************///以下是源文件game.c內容/*******************/#include"game.h"//初始化棋盤的實現void InitBoard(char board[ROWS][COLS], int rows, int cols, char set){int i 0;int j 0;for (i 0; i < rows; i){for (j 0; j < cols; j){board…

記一次 .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;請找出這個圖形的規律&…

c語言 三角形三邊abc,C語言代碼輸入abc三個數,求一這3個數為邊長的三角形面積...

2011-01-04 回答#include #include #include #include #include int main(){float a 0.0;float b 0.0;float c 0.0;float s 0.0;double area 0.0;while(true){printf("input your date(a,b,c):");scanf("%f%f%f",&a,&b,&c);if(!isdigit((…

shell腳本中向hive動態分區插入數據

在hive上建表與普通分區表創建方法一樣&#xff1b; 1 CREATE TABLE dwa_m_user_association_circle(2 device_number string, 3 oppo_number string, 4 prov_id_oppo string, 5 area_id_oppo string, 6 dealer_oppo string, 7 short_call_nums bigint, 8 long3…

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…

html標記語言 --框架

html標記語言 --框架六、框架1、什么是框架 框架將瀏覽器劃分成不同的部分&#xff0c;每一部分加載不同的網頁 實現同一瀏覽器窗口中加載多個頁面的效果。 語法格式<frameset>.......</frameset>2. 屬性2.1 cols使用“像素數”和%分割左右窗口&#xff0c;“*” 表…

c語言兔子洞,數據結構水題選講 - osc_y08db3kb的個人空間 - OSCHINA - 中文開源技術交流社區...

[Ynoi2011]ODT\(O(nlog^2n)\) 的做法非常顯然直接把樹重鏈剖分一下&#xff0c;每個點維護輕兒子的平衡樹就行但是這題 \(1e6\) 的數據范圍使得 \(O(nlog^2n)\) 沒那么容易卡過去(當然很多人卡過去了考慮給一個點很多重兒子那么若一個點有 \(k\) 個重兒子&#xff0c;修改復雜度…

centos 7.x systemd service 配置方法整理

一、存放路徑/etc/systemd/system二、service配置整理2.1 zookeeper.service[Unit]DescriptionZooKeeper ServiceAftersyslog.targetAfternetwork.target[Service]#使用shell腳本啟動的要用forking模式TypeforkingUserzookeeperGroupzookeeper#腳本啟動ExecStart/usr/local/zoo…