游戏安全C/C++汇编 [2021]瓦罗兰Hypervisor检测 rdtsc检测,出现问题立刻调用KeAccumulateTicks蓝屏: ```cpp push rbx sub rsp, 20h rdtsc shl rdx, 20h or rax, rdx mov [rsp], rax xor eax, eax xor ecx, ecx cpuid lea r8, [rsp+10h] mov [r8], eax mov [r8+4], ebx mov [r8+8], ecx mov [r8+0Ch], edx rdtsc shl rdx, 20h or rax, rdx mov [rsp+8], rax mov rax, [rsp] mov rcx, [rsp+8] sub rcx, rax mov rax, rcx add rsp, 20h pop rbx ``` wrmsr检测: ```cpp push rbp push rcx push r9 movzx r9, bp push r13 movsxd r9, r11d movsx r9w, bl xchg r9b, r9b push r14 movzx r9w, spl cmovno r9d, r9d movsx r9d, dx push rdi setz r9b movsx edi, di push r8 movsx r9, r10w movzx r9, di mov ax, ss pushfq or dword ptr [rsp], 100h popfq and eax, 0FFFFFEFFh wrmsr pushfq mov ss, ax icebp rdmsr pushfq push r10 and dword ptr [rsp], 0FFFFFEFFh popfq push rdx push rax push r15 push rsi mov ecx, 0C0000084h or dword ptr [rsp], 100h popfq syscall mov r10, rcx mov ecx, 0C0000084h pop rax pop rdx push r12 push rbx wrmsr与syscall mov rax, r10 xor eax, eax inc eax ror r9d, 1 not r9d rol r9d, 1 xor r9d, 529C0010h push r10 add r10, rbx bswap r10w xor [rsp+210h+var_210], r9d shld r10, r9, 0B4h rcl r10, cl bsf r10, rbp pop r10 jmp loc_14033A00E ``` 阅读全文 2021-02-25 huoji 0 条评论
二进制安全游戏安全C/C++汇编 [2021]解决掉一些常见的hypervisor检测向量 目标:让游戏能在vmware中顺利运行 CPUID部分: 安排掉CPUID_HYPERVISOR_VENDOR: 阅读全文 2021-02-24 huoji 0 条评论
C/C++一线开发汇编 [2021]基于hypervisor的HIPS架构 从0到1(VT部分) Hypervisor简单不准确概念就是,启用HV后,会有客户机(guest)和主机(host),客户机的CPU的一些操作会经过一个叫做VMCS的结构(占用一个page大小)交给主机处理再交给客户机.如果你用过vmware 那么主机就是你现在的电脑,客户端就是你开的虚拟机里面的东西.介于国内这方面资料很少,所以在这边做个记录. 阅读全文 2021-02-24 huoji 0 条评论
二进制安全游戏安全C/C++汇编 [2021]会引起VMExit的指令 这些指令都有可能会被用到检测hypervisor.目前已经有几个指令被用去了,但是,好在这些指令数量不是特别多 这边给做个整理. 会引起无条件退出的指令: CPUID <-BE/EAC用了 GETSEC INVD XSETBV <-BE用了 INVEPT INVVPI 有条件退出指令 CLT ENCLS ENCLV HLT INVLPG INVPCID LGDT LIDT LLDT LTR SGDT SIDT SLDT LMSW MONITOR MOV FROM(CR3/CR0) MOV TO(CR0/CR3/CR4/CR8/DR) mwait pause rdmsr rdpmc rdseed RDST(c,p) <-BE EAC用了 rsm vmread vmwrite wbinbd wrmsr xrstors xrsaves 阅读全文 2021-01-31 huoji 0 条评论
游戏安全汇编Shellcode [2021]EAC 虚拟机检测大全 目前EAC有这几个已知的方法:  请注意,还有一个方法是被虚拟化的 https://key08.com/index.php/2021/01/22/887.html anti_hv_rdtsc_time_attack是经典的RDTSC时间攻击,最早最早是国人2006年在看雪论坛上发现的方法,利用RDTSC时间差判断是否在虚拟机里面  阅读全文 2021-01-24 huoji 0 条评论
二进制安全游戏安全汇编Shellcode [2021]EAC极其冷门的检测hypervisor的方法 EAC极其冷门的检测hypervisor的方法 ### 微软官方介绍 阅读全文 2021-01-22 huoji 0 条评论
无线安全游戏安全C/C++汇编 [2021]EAC开始使用MSR_IA32_TSX_CTRL崩溃虚拟机 EAC在rust上加了这一段: ```cpp bool EnableTsx() { unsigned __int64 tdx; // r9 unsigned __int64 newtsx; // rax tdx = __readmsr(0x122u); _disable(); __writemsr(0x122u, tdx & 0xFFFFFFFFFFFFFFFEui64); newtsx = __readmsr(0x122u); __writemsr(0x122u, tdx); _enable(); return (newtsx & 1) == 0; } _BOOL8 IsTsxEnabled() { unsigned __int64 tsx_bit; // rax tsx_bit = __readmsr(0x122u); return (tsx_bit & 1) == 0; } void SetupTSXAbort() { __asm { xbegin locret_4B759 xend } } ``` 0x122 = MSR_IA32_TSX_CTRL 来源于ESL反作弊 实际上使用的是CVE-2019-19338的方法 https://www.openwall.com/lists/oss-security/2019/12/10/3 如你所见 解决方法也很简单 handle msr RW 阅读全文 2021-01-12 huoji 0 条评论