恶意代码分析实战 — Lab 17-03

反虚拟机指令位于0x401ac8中,使用in指令,位于函数sub_401a80

之后test判断返回值是否为0

如果eax = 0,注册表路径SYSTEM\CurrentControlSet\Control\DeviceClasses作为参数,然后call sub_4011c0

Sub_4011c0是个递归,有很多针对注册表的操作

Sub_401060将遍历键值tolower变小写,与vmware进行比较

可以修改0x4019be为xor eax, eax实现反虚拟机绕过

绕过后调用iphlpapi.dll中的GetAdaptersInfo函数获取适配器数据

可以重命名dword_403114为adapterinfo,然后查看此数据的交叉引用,共有三处

选择第一个,两个参数入栈

GetProcessHeap和HeapAlloc分配空间

lpMem作为参数入栈

插入IP_ADAPTER_INFO的structure

比较的值6和71表示Ethernet和ieee 802.11无线网络接口

之后程序比较address的前三位

比较的值var_38前三位是否是00h 50h 56h或00h,0ch,29h等

0x00,0x0C,0x29表示VMware MAC地址的默认开始

27的数组长度,比较的一共有9个MAC地址

在main函数后边,call sub_401400

进入此函数,从eax返回值往上溯源,找到一个sub_401130函数,有两个参数入栈

此函数通过调用CreateToolhelp32Snapshot、Process32First以及Process32Next来遍历进程列表

进入此call,其中sub_401060是将exefile转为小写,sub_401000计算返回一个值,然后与arg_0 = 0f30d12a5h进行比较,此函数循环遍历进程,然后返回某个值,与固定值进行比较。如果是vmware进程,则输出结果匹配。

此Hash函数增加了反虚拟机的检测难度。

您可能还喜欢...