Skip to content

类别:anti_vm 反虚拟机 ​

anti_vm

anti_vm 类别检测 反虚拟机/反模拟器技术——恶意软件用来判断自己是否运行在沙箱/模拟器里,若是则静默或伪装。

🎯 检测原理 ​

恶意软件会查询一系列环境特征来判断"我是不是在虚拟机/模拟器里":

  • Build.FINGERPRINT / Build.MODEL / Build.BRAND → 匹配 "generic"、"sdk"、"google_sdk"
  • Build.HARDWARE → "goldfish"、"ranchu"
  • TelephonyManager → SIM 运营商、设备 ID、手机号
  • /proc/cpuinfo、/sys/qemu_trace、/proc/cpuinfo → QEMU 痕迹
  • ro.secure 属性

APKiD 的 dex/anti-vm.yara 用 private 规则识别"调用了哪个查询类",再细分具体检测项。

📋 规则分布 ​

文件类型文件规则数子文档
DEXdex/anti-vm.yara28DEX 反虚拟机
ELFelf/anti-vm.yara1ELF 反虚拟机

🛠️ 主要规则 ​

Build 指纹检测 ​

规则检测
checks_build_fingerprintBuild.FINGERPRINT
checks_build_model/manufacturer/brand/device/product/hardware/board/id/type/tags/user各 Build 字段
checks_product_deviceBuild.PRODUCT/DEVICE
checks_hardwareBuild.HARDWARE
possible_build_serial_checkBuild.SERIAL

SIM/电话检测 ​

规则检测
checks_sim_operatorSIM 运营商(模拟器常为空/特定值)
checks_network_operator网络运营商
checks_device_idIMEI
checks_line1_number手机号
checks_voicemail_number语音信箱号
checks_subscriber_idIMSI

QEMU/文件检测 ​

规则检测
checks_kernel_qemu内核 QEMU 痕迹
checks_qemu_file/sys/qemu_trace 等文件
checks_cpuinfo/proc/cpuinfo
checks_network_interface_names网卡名(eth0 等)
possible_ro_secure_checkro.secure 属性
possible_vm_check通用 VM 检测

private 积木 ​

yara
private rule uses_build_class : internal { ... }  // 引用了 android.os.Build
private rule uses_telephony_class : internal { ... }  // 引用了 TelephonyManager

ELF 层 ​

check_qemu_entropy : anti_vm——原生库检测 QEMU 的熵特征。

🔍 规则示例 ​

yara
rule checks_build_fingerprint : anti_vm {
  condition:
    uses_build_class and $fingerprint_method
}

📊 finding 示例 ​

json
{
  "tag": "anti_vm::checks_build_fingerprint",
  "category": "anti_vm",
  "description": "Detects anti-VM/anti-emulator techniques",
  "source": "app.apk!classes.dex",
  "identifier": "checks_build_fingerprint",
  "confidence": "high"
}

这是"检测了什么",不是"是不是恶意"

命中 anti_vm 规则只说明样本 检测了 这些环境特征,不等于它一定是恶意软件——合法应用也做模拟器检测(如反作弊游戏)。需结合上下文判断。

📍 相关 ​

基于 GPL & Commercial 双重许可发布