首页
社区
课程
招聘
[求助]最近下了两个VT框架玩儿,加载之后启动SE壳的程序就报错
发表于: 2016-8-28 15:04 8865

[求助]最近下了两个VT框架玩儿,加载之后启动SE壳的程序就报错

2016-8-28 15:04
8865
两个框架分别是HyperPlatformHyperBone,在win10 x64 1511上加载起来之后,运行SE壳的程序就会提示Safengine 发生内部错误。监控cpuid指令发现壳总是在固定的几个位置上调用cpuid,而且会调用几百万次,像死循环一样跳不出去。经检查EXCEPTION_BITMAP已设为0,vmm按理应该不会捕获异常。不知道是什么原因?

我看v大说se壳会调用vmcall等vm系列指令来制造异常,然而vmm启动之后vmcall在ring3也被捕获了,导致不产生异常了,这种情况应该怎么应对?

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 799
活跃值: (1236)
能力值: ( LV5,RANK:78 )
在线值:
发帖
回帖
粉丝
2
你是给驱动加的 还是程序..程序的话 我这边跟你一框架.并没有问题.
2016-8-28 17:53
0
雪    币: 12876
活跃值: (9357)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
3
应用层程序加SE壳,实测SE好像是会调用vmcall这种指令的,然后也确实被vmm捕获导致不产生异常了
2016-8-28 18:20
0
雪    币: 799
活跃值: (1236)
能力值: ( LV5,RANK:78 )
在线值:
发帖
回帖
粉丝
4
我这边是没有问题的.....我这里一切正常....你检查下代码吧..
2016-8-28 18:23
0
雪    币: 12876
活跃值: (9357)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
5
你运行的是safengine加壳的程序吗?你用的是哪个框架?我这边vmware测试的结果就是会报错
这是我的驱动,下下来直接编译的
2016-8-28 19:33
0
雪    币: 799
活跃值: (1236)
能力值: ( LV5,RANK:78 )
在线值:
发帖
回帖
粉丝
6
你原机试试...我没在虚拟机运行过HyperPlatform  咱俩 一个框架.   我现开始一直蓝.不开安装VS的系统是不会蓝的..反正 奇葩问题比较多...
2016-8-30 03:18
0
雪    币: 140
活跃值: (125)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
我最近也比较关心类似问题

先给你提一个地方

比如VMP
win10 有时候就开不起来
经过研究Win10 本身有个虚拟机的东西
你需要关闭那个。

SE壳我没测试 求测试结果看看
2016-8-30 09:31
0
雪    币: 12876
活跃值: (9357)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
8
你们可以试一下这个,我在vmware中不开启VT框架是两个in real,开启VT之后两个test都是in vmm

#include "stdafx.h"
#include <windows.h>
#include <intrin.h>

int filter(EXCEPTION_POINTERS * pException, BOOL *pFound)
{
    auto code = *(BYTE*)pException->ContextRecord->Eip;

    printf("cpuid exception eip = %p code = %02x\n", pException->ContextRecord->Eip, code);

    //code != nop, in vmm
    if (code != 0x90)
        *pFound = TRUE;

    return EXCEPTION_EXECUTE_HANDLER;
}

int filter2(EXCEPTION_POINTERS * pException, BOOL *pFound)
{
    printf("vmcall exception eip = %p, exception = %X\n", pException->ContextRecord->Eip, pException->ExceptionRecord->ExceptionCode);

    //ExceptionCode == #GP, in real OS
    if (pException->ExceptionRecord->ExceptionCode == 0xC000001D)
        *pFound = FALSE;

    return EXCEPTION_EXECUTE_HANDLER;
}

BOOL vmcall_test()
{
    BOOL bFound = TRUE;
    __try
    {
        //vmcall
        __asm {
            _emit 0x0f;
            _emit 0x01;
            _emit 0xc1;
        }
    }
    __except (filter2(GetExceptionInformation(), &bFound))
    {
        ;
    }
    return bFound;  
}

BOOL cpuid_test()
{
    BOOL bFound = FALSE;
    __try
    {
        __asm
        {
            mov eax, 0
            pushfd;
            or DWORD ptr[esp], 0x100;
            popfd;//set TF=1
            cpuid;[LEFT][LEFT][/LEFT][/LEFT]
            nop;//normal TF
            int 3//in vmm...
        }
    }
    __except (filter(GetExceptionInformation(), &bFound))
    {
        ;
    }
    return bFound;
}

int main()
{
    auto b = cpuid_test();
    if (b)
        printf("cpuid run in vmm\r\n");
    else
        printf("cpuid run in real\r\n");

    auto c = vmcall_test();
    if (c)
        printf("vmcall run in vmm\r\n");
    else
        printf("vmcall run in real\r\n");

    system("pause");
    return 0;
}
2016-8-30 10:35
0
雪    币: 140
活跃值: (125)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
9
不错 回头我用自己框架试试看
2016-8-30 11:05
0
雪    币: 12876
活跃值: (9357)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
10
怎么样了大哥,是不是SE壳跑不起来?
2016-9-13 23:46
0
雪    币: 140
活跃值: (125)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
11
你不是已经解决了 我已经在世界最大搞基网站上 看到那个作者给你的回复了。
2016-9-18 17:16
0
雪    币: 12876
活跃值: (9357)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
12
cpuid vmx指令解决是解决了,但是还是跑不起来啊,我都不好意思再发issue了
2016-9-18 19:02
0
雪    币: 140
活跃值: (125)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
13
10.1有时间我整理下我自己的东西 然后可以帮你发issue
2016-9-19 14:45
0
雪    币: 12876
活跃值: (9357)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
14
好,我这边也在联系se壳的作者nooby,看看他有没有什么思路可以提供
2016-9-19 14:49
0
雪    币: 6129
活跃值: (4971)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
15
这个问题好像已经解决了。可以在git上看到讨论
2016-9-20 14:25
0
雪    币: 12876
活跃值: (9357)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
16
然而又搞出新的问题了
2016-9-20 14:31
0
游客
登录 | 注册 方可回帖
返回