首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >反作弊如何检测系统仿真(4)

反作弊如何检测系统仿真(4)

原创
作者头像
franket
发布于 2021-01-05 02:33:43
发布于 2021-01-05 02:33:43
1.7K00
代码可运行
举报
文章被收录于专栏:技术杂记技术杂记
运行总次数:0
代码可运行

RDTSC / CPUID / RDTSC

EasyAntiCheat还使用标准定时攻击,使它们可以通过适当的TSC仿真(在前面的小节中进行了描述)被规避。

总体而言,缺少这些虚拟化检查并且相对容易规避。ESEA,FACEIT,B5和eSportal等其他反作弊技术采用了更具攻击性的检查,通过捕获基于虚拟机管理程序的作弊手段,使其更具效力。我们预计随着虚拟机管理程序的普及,支持大多数游戏的反作弊将开始考虑到这一点。

IA32_EFER

引起我们注意的是,在玩了约30分钟之后,EAC进行了查询IA32_EFER。我们等待了更长的时间,以查看是否再进行了对MSR的读取/写入,但是经过40分钟的静坐并等待之后,显然没有其他事情发生了。以下是iPower跟踪器中收到的通知。

显然,执行此读取的代码在代码的某些虚拟化部分中。经分析证实。

我们还确认了它正在检查的位是中的系统调用启用位(SCE)IA32_EFER。由于使用Daaxajkhoury的博客上发布的EFER的syscall挂钩方法的发布,它会检查此位。在不混淆更多代码的情况下,我们认为可以肯定地说这是它所检查的唯一位置,因为它具有相关性。缓解措施涉及设置IA32_EFERMSR位图中对应的位,IA32_EFER并在VMCS中利用加载/保存空间。

IofCallDriver / NtDeviceIoControlFile

出于好奇,我们决定看一下BE和EAC对NtDeviceIoControlFileIofCallDriver调用。我们注意到EAC中有一个IofCallDriverWrapper,并且两个反作弊者都在不同的地方使用IofCallDriver

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NTSTATUS __fastcall IofCallDriverWrapper(__int64 IoctlCode, _DEVICE_OBJECT *DeviceObject, void *InputBuffer, ULONG InputBufferLength, void *OutputBuffer, ULONG OutputBufferLength);

EAC用于IofCallDriver查询磁盘的存储属性。这可能会收集序列号,名称等信息,以用于硬件指纹识别。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if ( IofCallDriverWrapper(0x2D1400i64, DeviceObject, &InputBuffer, 0xCu, &StorageDescriptorHeader, 8u) < 0 )
  return v3;
  
if ( StorageDescriptorHeader.Size <= 0x28 )
  return v3;
  
pbuf = (PSTORAGE_DEVICE_DESCRIPTOR)alloc_memory(StorageDescriptorHeader.Size);
pbuf_1 = pbuf;

if ( !pbuf )
  return v3;
  
memset(pbuf, 0, StorageDescriptorHeader.Size);

*(_DWORD *)InputBuffer.AdditionalParameters = 0;

InputBuffer.QueryType = 0;
InputBuffer.PropertyId = 0;
if (IofCallDriverWrapper(0x2D1400i64, Device_Disk_Sys, &InputBuffer, 0xCu, pbuf_1, StorageDescriptorHeader.Size) >= 0)
{
    // ...
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
memset(&InputBuffer, 0, 0x21ui64);
v20 = -20;
if (IofCallDriver_ioctl(0x7C088i64, v5, &InputBuffer, 0x21u, OutputBuffer, 0x211u) >= 0)
{
    // ...
} 

EAC和BE也使用NtDeviceIoControlFile查询IDIS为IOCTL_NDIS_QUERY_GLOBAL_STATS和OID的NDIS驱动程序OID_802_3_PERMANENT_ADDRESS。这用于获取系统的MAC地址,也用于硬件指纹识别。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if ( ZwCreateFile(&FileHandle, 0x120089u, &ObjectAttributes, &IoStatusBlock, 0i64, 0x80u, 7u, 1u, 0x20u, 0i64, 0) >= 0 )
   {
        current_thread = __readgsqword(0x188u);
        FileHandle_1 = FileHandle;
        old_previous_mode = GetPreviousMode(current_thread);
        SetPreviousMode(current_thread, 0);
        if ( NtDeviceIoControlFile )
        {
          OutputBufferLength = 6;
          InputBufferLength = 4;
          IoctlCode = 0x170002;
          status = NtDeviceIoControlFile(
                     FileHandle_1,
                     0i64,
                     0i64,
                     0i64,
                     &IoStatusBlock,
                     IoctlCode,
                     &InputBuffer,
                     InputBufferLength,
                     &OutputBuffer,
                     OutputBufferLength);
        }
  // ...
  }

这可能是也可能不是为进行硬件指纹识别而进行的查询的完整列表,因为我们没有做更多的研究。它们可以直接从SSDT获取并直接调用,也可以使用其他方式间接调用这些函数。我们打算做自己的硬件指纹图谱的更深入的分析,在以后的文章-这只是挂钩时,迅速倾倒出于好奇NtDeviceIoControlFileIofCallDriver

结论

在本文中,我们介绍了可用于管理程序的许多不同检测方法。一些有效,其他却不太有效。我们还详细介绍了一些规避记录在案的检测向量的方法,但是实际的实现方式将取决于读者。这并不是要为每种检测方法提供完整的解决方案(即使对于本文来说,也太多了)。但是,无论稳定性如何,我们都希望记录最常用的方法。

我们还简要介绍了EAC和BE的虚拟化检查,鉴于使用开源虚拟机管理程序平台作弊的情况越来越普遍,这些检查有些令人失望。我们为他们的检查提供了规避方法,并计划将来发布用于TSC仿真的完整,完善的解决方案。但是,如果读者不热衷于等待,我们提供了如何实现的逻辑演练。在以后的文章中,我们将讨论这两种特殊的防欺诈功能,我们计划更深入地研究它们的硬件指纹识别,报告和检测程序。

我们希望您喜欢阅读有关如何利用虚拟化平台中的各种错误来检测自省引擎的信息,以及通过这些检查的方法。

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

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

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

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

评论
作者已关闭评论
1 条评论
热度
最新
真的能实现吗,我花1个小时配置好,然后最后一步结束点开浏览器终端又再下数据
真的能实现吗,我花1个小时配置好,然后最后一步结束点开浏览器终端又再下数据
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
反作弊如何检测系统仿真(3)
作为对标准定时攻击的反对,我们提供了一种更新颖的方法,该方法不依赖时间戳计数器,并且需要进行更多的欺骗工作。在这里的帖子中已经简要提到了这一点,我们决定进一步详细介绍。
franket
2021/01/05
8K0
反作弊如何检测系统仿真(2)
跟踪中断,消息,分支等是通过IA32_DEBUGCTLMSR在Intel硬件上实现的非常有用的功能。特别是,一些管理程序利用最后分支记录(LBR)和分支跟踪来跟踪混淆产品(例如反欺诈)中的分支。由于某些反作弊产品的欺骗返回地址可以利用LBR / BTS来跟踪发生分支的确切位置。
franket
2020/12/03
18.9K0
反作弊如何检测系统仿真(1)
作为我们的第一篇文章介绍了检测VMM是否存在的各种方法,无论是商业的还是定制的,我们都希望做到透彻并将其与我们对流行的反作弊厂商的研究联系起来。首先,对于游戏黑客领域以外的人员来说,了解管理程序在作弊中的用途以及在使用作弊程序的作弊提供商中保持反欺诈的重要性非常重要。这篇文章将涵盖可用于Intel / AMD的几种标准检测方法;提供说明,缓解措施和一般效果评估。然后,我们将探讨一种高效的旁通道攻击-平台无关的。然后,我们将研究一些特定于OS的方法,这些方法会滥用WoW64中描述符表信息的某些误处理以及阻止自定义的syscall挂钩方法的方法,如Reverse Engineering博客上记录的。
franket
2020/12/03
4.1K0
红队免杀培训第二章-使用系统调用http 协议下载恶意载荷
从杀软的行为分析来看,就拿cs的通信协议来讲,stage 的载荷在行为上是明显比stageless载荷多很多的,其中不免一些通信协议的特征,分析过的都知道,stage只是个前置载荷,后续会下更大的功能更全的载荷,因为之前做免杀卡巴的时候就注意到了,静态全免,但是在下回来更大的载荷的时候爆毒了,后面分析,卡巴对cs的通信协议进行拦截,从云沙箱的检测来看,stage 爆毒数明显是比stageless多的。
Gamma实验室
2022/03/29
1.1K0
CVE-2023-21768 内核提权漏洞分析
前置了解: what AFD is and what is does? AFD (Ancillary Function Driver)是Windows操作系统中的一个内核模式驱动程序,它也是套接字(
纯情
2023/05/16
1.3K0
CVE-2023-21768 内核提权漏洞分析
自己动手制作一个恶意流量检测系统(附源码)
0x0 成果展示 没有做日志记录因为时间关系。 我们假设恶意C2C服务器IP是220.181.38.148(百度的某个节点),某个木马的恶意流量特征是?? ?? ?? ??(? 匹配所有) 当我们要屏
FB客服
2019/12/05
2K0
64位内核开发第一讲,驱动框架.
API -> 封装数据跟命令 ->调用kerner32或者ntdll的函数 ->进行封装,传送给IRP结构体 ->调用驱动
IBinary
2022/05/10
7820
64位内核开发第一讲,驱动框架.
规避检测(共五章):第五章
沙盒模拟通常持续很短的时间,因为沙盒加载了数千个样本。仿真 时间很少超过3-5分钟。因此,恶意软件可以利用这一事实来避免检测:它可能会执行 在开始任何恶意活动之前长时间延迟。
Creaper
2023/11/20
4840
规避检测(共五章):第五章
Bochspwn漏洞挖掘技术深究(1):Double Fetches 检测
虽然现在技术文章很少人看,大家都喜欢聊安全八卦,但技术文章输出是一种很好的学习方式。更重要的是,专业的文章是给专业的人看的,并非为了取悦所有人。
泉哥
2019/07/18
1.2K0
基于设备指纹零感验证系统
作者: 我是小三 博客: http://www.cnblogs.com/2014asm/ 由于时间和水平有限,本文会存在诸多不足,希望得到您的及时反馈与指正,多谢!
我是小三
2019/09/29
2.3K0
基于设备指纹零感验证系统
某移动端防作弊产品技术原理浅析与个人方案构想
工具环境: android4.4.4、IDA Pro 7.0、jeb3、sklearn机器学习库
我是小三
2019/05/19
4.2K2
【重识云原生】计算第2.4节——主流虚拟化技术之KVM
KVM:Kernel-based Virtual Machine,是基于Linux内核的开源虚拟化解决方案,从2.6.20版本开始被合入kernel主分支维护。最初只支持X86平台的上支持VMX或者SVM的CPU,不久后被确认为标准Linux内核的虚拟化方案并逐步支持S390、IA64和PowerPC等体系架构;KVM本身只提供部分的虚拟化功能(虚拟CPU和内存),而由经过特殊改造后的Qemu(Qemu-kvm)来帮助下提供完整的平台虚拟化功能。
江中散人_Jun
2022/04/08
3.3K0
【重识云原生】计算第2.4节——主流虚拟化技术之KVM
内核攻防-(2)致盲EDR
https://github.com/k3lpi3b4nsh33/BlindEdr
Al1ex
2025/02/19
5320
内核攻防-(2)致盲EDR
KVM详解,学习kvm系列文章
其中,KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),它是一个 Linux 的一个内核模块,该内核模块使得 Linux 变成了一个 Hypervisor:
菲宇
2019/06/12
10K1
KVM详解,学习kvm系列文章
某老牌反作弊产品分析-(存在加密漏洞可被中间人攻击)
本文仅限学习交流,请勿用于非法以及商业用途,由于时间和水平有限,文中错漏之处在所难免,请多多批评指正。
我是小三
2022/06/19
2.2K0
某老牌反作弊产品分析-(存在加密漏洞可被中间人攻击)
揪出那些在Windows操作系统中注册的WFP函数
首先,minifilter有!fltkd.的命令,ndis有!ndiskd.的命令,但是WFP却没有类似的命令。
franket
2022/03/25
1.2K0
基于 RK3588 的 ARM 架构 ITX 主机搭建指南:系统选型和配置优化
这篇文档,应该是目前你能够找到的 RK3588 相关,最全面的设备系统选型和配置优化的内容了,希望能够帮到有类似需求的你。
soulteary
2025/04/07
5550
基于 RK3588 的 ARM 架构 ITX 主机搭建指南:系统选型和配置优化
渗透测试工具——Metasploit[通俗易懂]
操作机:Kali Linux 2021.1, Metasploit Frameworks 6.0.30 目标机:Windows Server 2003 sp2中文版(含ms08-067漏洞)Windows xp 英文版
全栈程序员站长
2022/09/21
6.8K0
渗透测试工具——Metasploit[通俗易懂]
DeviceIOControl实战「建议收藏」
大家好,又见面了,我是你们的朋友全栈君。 实战DeviceIoControl 之一:通过API访问设备驱动程序
全栈程序员站长
2022/10/04
2.3K0
系统管理查看一览
Linux操作系统的核心kernel具有模块化的特性,应此在编译核心时,务须把全部的功能都放入核心。 加载内核驱动的通常流程:
全栈工程师修炼指南
2022/09/28
1.2K0
系统管理查看一览
推荐阅读
相关推荐
反作弊如何检测系统仿真(3)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档