这段代码会在真机上运行还是某种反倒车代码?

逆向工程 恶意软件 调试 x86
2021-06-15 11:16:41

我正在反转一个在 Vmware 中运行不正常的文件。来自 AEP 的代码如下所示:

POP EDI     ; value of edi is 0x7C816D4F kernel32.7C816D4F
PUSH EAX    ;value of eax is 0
INC EBP     ;value of ebp was 0x12FFF0
IN EAX,DX   ;value of DX is 0xEB94    
AAS
IN AL,0BF                      
DEC ESP

我认为从用户模式调用特权指令(IN)是不允许的,因此执行失败。IN 用于反 VM 代码,但它需要特定的值(EAX 等中的 VMXh 端口值),但在我的情况下它没有被使用。

我的问题是,它是某种反调试还是文件损坏了,它会在非 VM 机器上运行(在我的情况下是 XP)。

最后,如果加壳程序使用我上面提到的方法,即从用户模式调用 IN 进行反反转,样本如何在真机上运行(因为在这种情况下,特权指令也将在用户模式下调用)。

2个回答

不容易回答,因为没有提供太多上下文,但有一些可能性:

  1. 解包存根在执行上述代码之前的某个时间点检测到 VM,由于 VM 检测,解包存根导致上述垃圾代码被执行。
  2. 解包存根在执行上述代码之前设置了一个异常处理程序,异常处理程序期望并捕获特权指令异常。
  3. 此代码永远不会执行,您正在查看错误的内存。

我想我得到了答案:https : //stackoverflow.com/questions/89607/what-is-a-privileged-instruction

该帖子中的答案摘要:

原因可能是堆栈损坏或函数指针调用混乱,这通常发生在使用指向无效数据的函数指针时。如果您的代码破坏了返回堆栈,或者您正在使用旧的编译器/库,也可能会发生这种情况。

编写 exe 程序的人可能正在使用本地数组,它位于函数声明的顶部附近。他的边界检查可能已经疯了并覆盖了返回地址,它指向一些只有内核才允许执行的指令。