首页
社区
课程
招聘
[原创][翻译]规避技术: CPU
发表于: 2021-5-28 11:48 8325

[原创][翻译]规避技术: CPU

2021-5-28 11:48
8325

备注
原文地址:https://evasions.checkpoint.com/techniques/cpu.html
原文标题:Evasions: CPU
更新日期:2021年5月28日
此文后期:根据自身所学进行内容扩充
因自身技术有限,只能尽自身所能翻译国外技术文章,供大家学习,若有不当或可完善的地方,希望可以指出,用于共同完善这篇文章。




目录

使用的CPU检测方法

1.通过CPUID指令检查供应商ID字符串

2.通过CPUID指令检查是否在Hypervisor中运行

3.检查全局表位置:IDT/GDT/LDT

4.使用异域指令愚弄虚拟模拟器

5.通过执行非法指令检测环境(仅VirtualPC)

6.通过指令内-后门端口(仅适用于VMware)检测环境

识别标志

反制措施

归功于


使用的CPU检测方法
这组技术使用特定的处理器指令来获取CPU的特定信息,或者执行预定义的指令序列,这些指令在常规的主机操作系统和虚拟环境中表现不同。
1.通过CPUID指令检查供应商ID字符串
CPUID指令是一条向EBX、ECX、EDX返回处理器识别和特征信息的指令。接收到这些寄存器的信息可以用来识别一个供应商。
代码样本:


检测表:

通过CPUID指令检查供应商ID字符串-分别以EBX、ECX、EDX的形式返回信息:

检测

EAX作为CPUID的参数

字符串

FreeBSD HV

0x40000000

bhyve bhyve

Hyper-V

0x40000000

Microsoft Hv

KVM

0x40000000

KVMKVMKVM

Parallels

0x40000000

prl hyperv

VirtualBox

0x40000000

VBoxVBoxVBox

VirtualPC

0x40000000

Microsoft Hv

VMware

0x40000000

VMwareVMware

Xen

0x40000000

XenVMMXenVMM

2.通过CPUID指令检查是否在Hypervisor中运行
另一种检测程序是否在管理程序中运行的方法是以其他方式使用CPUID指
不把EAX(CPUID的参数)设置为0x40000000,而是将EAX设置为1。
当EAX被设置为1时,ECX(CPUID的返回值)中的第31位被设置,它表明程序正在Hypervisor中运行。
代码样本 (函数GetAdaptersAddresses):


检测表:

检查是否正在虚拟机管理程序中运行(通过CPUID)

检测

EAX作为CPUID的参数

检查返回值


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 3
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//