前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >监视的最低点(3)

监视的最低点(3)

原创
作者头像
franket
发布2021-12-24 12:38:41
4.2K0
发布2021-12-24 12:38:41
举报
文章被收录于专栏:技术杂记技术杂记

网络接口

与公开宣布的不同,数字考试监视器将有关所有网络适配器/接口的信息发送到其服务器。在撰写本文时,这尚未公开,并且很可能会让人认为负责任的开发人员正在监视的比他们所说的要多。这并不是您真正需要担心的关键数据,但动机未知。我们怀疑这被用来记录在考试期间使用虚拟专用网络的人。丹麦的考试情况是在学校 wifi 上进行的,这通常由负责的 IT 部门监控,因此使用虚拟专用网络会使这种监控无法工作。奇怪的是,在参加考试时使用虚拟专用网络是不被禁止的,这使得这个检查有点奇怪。

网络配置例程实现如下:

代码语言:txt
复制
internal string GetNetworkConfigurationData()
{
	this._builder.Clear();

	NetworkInterface[] allNetworkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
	this._numberOfInterfacesAtLastCount = allNetworkInterfaces.Count<NetworkInterface>();

	(from nwi in allNetworkInterfaces.ToList<NetworkInterface>()
		orderby nwi.OperationalStatus
			select nwi).ToList<NetworkInterface>().
				ForEach(delegate(NetworkInterface nwi)
	{
		this._builder.Append(nwi.GetStateAsString());
	});

	return this._builder.ToString();
}

运行进程

正如网站上提到的,数字考试监视器还将记录正在运行的进程,包括可执行文件的文件描述。数据非常简单,但在抓捕作弊者时并不是真正的兴趣点,因为任何人都可以重命名可执行文件或修改可执行文件的清单信息。撇开怀疑不谈,这可以说是标记过程检查不知道的作弊者,但您仍然无法仅从文件名和一些清单信息中得出结论。

代码语言:txt
复制
Process[] processes = Process.GetProcesses();
this._lastNumberOfRunningProcesses = processes.Count<Process>();
this._builder.Clear();
foreach (Process process in processes)
{
	string text = "";
	try
	{
		text = process.MainModule.FileVersionInfo.FileDescription;
	}
	catch
	{
	}
	this._builder.Append(string.Concat(new object[]
	{
		process.Id,
		",",
		process.ProcessName,
		",",
		text,
		";"
	}));
}

非活动功能

有趣的是,The Digital Exam Monitor 包含了一些未从生产版本中截断的功能。这些函数从来没有在二进制文件中调用过,应该被优化掉,这意味着生产二进制文件是在没有优化的情况下编译的。这种不活跃的功能在过去几周引发了各种报纸的争议,因为键盘记录一直是批评和阴谋论的热门话题和唾手可得的果实。

虚拟机检查

这种虚拟机检查旨在检测任何参加考试的人,同时在单独的虚拟机上运行监控程序本身。这里最终发生的事情是,他们现在再次通过比较进程名称来检测您是否正在托管一个常见的商业虚拟机。公平地说,他们还专门检查Hyper-V虚拟机管理程序的存在,使用非常模糊的 WMI 检查,任何拥有虚拟机管理程序的人,更不用说内核,访问都能够绕过。

代码语言:txt
复制
private bool AmIRunningInVirtualMachineOrHaveAVirtualMachineProcessRunning()
{
	return this.AmIRunningInsideAVirtualMachine() || this.IsVirtualMachineProcessRunning();
}
代码语言:txt
复制
public bool AmIRunningInsideAVirtualMachine()
{
	try
	{
		foreach (ManagementBaseObject managementBaseObject in 
			new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_BaseBoard").Get())
		{
			ManagementObject baseObject = managementBaseObject["Manufacturer"];
			
			return (baseObject.ToString().ToLower() == "microsoft corporation".ToLower());
		}

	}
	catch
	{

	}

	return false;
}
代码语言:txt
复制
private bool IsVirtualMachineProcessRunning()
{
	return Process.GetProcesses().Any((Process p) => p.ProcessName.ContainsOneOrMoreInList({
			"vmware",
			"virtualpc",
			"virtualbox"
		}));
}

键盘记录器

如前所述,监控键输入的功能存在但未激活。他们的数字考试监视器在WH_KEYBOARD_LL事件上使用了一个非常标准的窗口钩子,这可能会在考试的学生机器上触发基于启发式的防病毒,在已经紧张的情况下导致更多的并发症。

代码语言:txt
复制
private void KeyloggerHelper_KeyPressed(object sender, KeyEventArgs e)
{
	if (!char.IsLetterOrDigit((char)e.KeyCode))
	{
		this._builder.Append("[" + e.KeyCode + "]");
		return;
	}
	this._builder.Append(e.KeyCode);
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 网络接口
  • 运行进程
    • 非活动功能
    • 虚拟机检查
    • 键盘记录器
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档