吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 231|回复: 1
收起左侧

[求助] 关于使用IDT基址检测虚拟机失败

[复制链接]
zdabajfk 发表于 2024-10-30 23:31
本帖最后由 zdabajfk 于 2024-10-30 23:47 编辑

尝试使用IDT基址检测虚拟机

请问各位大佬,红丸作者说虚拟机中的IDT地址通常位于0xFFXXXXXX,而在真实主机上位于0x80xxxxxx,为什么我获取到的虚拟机的IDT基址不符合

虚拟机版本为vmware16.2.4.28481,系统为Windows xp

真机为Windows11

一、检测代码

#include <stdio.h>
#include <windows.h>

int main()
{
    HANDLE hThread = GetCurrentThread();
    DWORD_PTR affinityMask = 1;
    SetThreadAffinityMask(hThread, affinityMask);

    unsigned char m[2 + 4], rpill[] = "\x0f\x01\x0d\x00\x00\x00\x00\xc3";//相当于SIDT[adrr],其中addr用于保存IDT地址
    *((unsigned*)&rpill[3]) = (unsigned)m;                               //将sidt[addr]中的addr设为m的地址
    ((void(*)()) & rpill)();                                             //执行SIDT指令,并将读取后IDT地址保存在数组m中

    printf("idt base: %#x\n", *((unsigned*)&m[2]));                      //由于前2字节为IDT大小,因此从m[2]开始即为IDT地址
    if (m[5] > 0xd0)                                                  //当IDT基址大于0xd0xxxxxx时则说明程序处于VMware中
    {
        printf("Inside Matrix!\n");
    }
    else
    {
        printf("Not in Matrix.\n");
    }

    return 0;
}

二、编译器配置

IDT基址检测虚拟机_编译器配置1.png
IDT基址检测虚拟机_编译器配置2.png

三、测试结果

在虚拟机上运行如下代码,其执行结果为0x8003f400
IDT基址检测虚拟机_Windows xp运行结果.png

通过Windbg获取的虚拟机IDTR,其IDT基址为0x8003f400
IDT基址检测虚拟机_Windbg调试结果.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| zdabajfk 发表于 2024-10-30 23:35
请问各位大佬,红丸作者说虚拟机中的IDT地址通常位于0xFFXXXXXX,而在真实主机上位于0x80xxxxxx,为什么我获取到的虚拟机的IDT基址不符合
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 11:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表