非管理员程序如何用窗口覆盖整个屏幕?

信息安全 视窗 苹果系统 软件 截屏
2021-09-01 06:17:46

今年,由于许多学生在线,College Board(与 SAT 一起在美国管理 AP 考试的公司)最近发布了其数字测试应用程序。安装并完成设置后,您可以通过测试演示来反映实际的测试条件。但是,一旦您这样做,它就会覆盖您的整个屏幕并阻止您从ALT+TAB到另一个窗口。“选择窗口” UI 仍然显示,但如果您真的尝试切换,测试应用程序窗口仍然存在。

如果程序在安装时被授予管理员权限(我相信像 Respondus Lockdown Browser),那么这种能力可能是有意义的,但测试应用程序没有,但仍然可以。这可能只是一个像一个非常大的窗口一样的技巧,但我不完全确定。任何人都可以对此有所了解,他们怎么能做到这一点?

4个回答

全屏很容易:例如,绝大多数视频游戏都可以做到。我不知道 Windows 是否为此提供了专用的 API 调用,但如果没有,则很容易伪造:只需制作一个屏幕大小的具有“始终位于顶部”属性且没有窗口装饰的窗口。

禁用ALT+TAB更难,但有许多选项:例如,可访问性工具包允许您拦截任意击键。没有应用程序可以禁用的唯一组合键CTRL++ ALTDELETE

C# 中的全屏应用程序:

using System;
using System.Windows.Forms;

namespace FullScreen
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            var fullscreen = new Form();
            fullscreen.TopMost = true;
            fullscreen.WindowState = FormWindowState.Maximized;
            fullscreen.MinimizeBox = false;  // remove minimize button
            fullscreen.MaximizeBox = false;  // remove maximize button
            fullscreen.ControlBox = false;   // remove X button
            fullscreen.FormBorderStyle = FormBorderStyle.None;
            Application.Run(fullscreen);
        }
    }
}

使用globalmousekeyhook禁用 Alt+Tab

using Gma.System.MouseKeyHook;
var hook = Hook.GlobalEvents();
hook.KeyDown += (o, e) =>
{
    if (e.Alt) e.Handled = true;
};

同样,您可以禁用Win大部分,除了Win+ L(锁定屏幕)。

hook.KeyDown += (o, e) =>
{
    if (e.KeyCode == Keys.LWin || e.KeyCode == Keys.RWin) e.Handled = true;
};

禁用Ctrl++可以通过使用 Registry Key 将至少一个键重新映射为Alt但是,写入该注册表项需要权限。您可以使用SharpKeys进行尝试,只是警告您可能会永久搞砸您的系统。DeleteSystem\CurrentControlSet\Control\Keyboard Layout

Windows API 对这样做有本机支持。

我使用过的脚本语言AutoHotKey可以使用一行代码轻松地使任何窗口可用全屏。这些功能不是对操作系统的一些复杂的“破解”,而是提供给外部软件的操作系统的内置功能。

您还可以发出命令来捕获击键并拦截键盘以防止 Alt-Tab 行为。

当然,根据程序的制作方式,我同样可以使用 AutoHotKey 来解锁屏幕并通过使用系统调用而不是击键来执行 Alt-Tabbing。

从安全 POV 来看,这在 Windows 中成为可能的原因是程序可能运行在 3 个(实际上不止这些)权限级别。

Windows 应用商店应用程序使用枚举的应用程序权限运行,这些权限限制了应用程序作为桌面用户运行的能力。

一个普通的“桌面”程序以桌面用户的全部权限运行,除了管理权限被剥夺。

提升的程序以桌面用户的完整权限运行,包括对盒子的管理权限。

“中间”级别仍然非常强大,使应用程序能够执行用户可以执行的任何操作,这就是为什么在安装桌面应用程序时应该非常小心的原因。这包括管理键盘和窗口、对鼠标/键盘事件做出反应、关闭其他桌面应用程序等。