<?xml version="1.0" encoding="UTF-8"?>
<!--
  VMProtect 项目配置文件 - Rust SDK (ethercat.dll)

  保护策略:
    - Rust 编译产生的原生 DLL, 直接由 VMProtect 处理
    - 关键函数 (授权/加密) 使用 Ultra 保护
    - PDO 处理等性能敏感函数使用 Mutation 保护
    - 启用反调试、内存保护、导入保护
-->
<vmp version="3">
  <project>
    <!-- 保护选项 -->
    <options>
      <!-- 反调试: 检测调试器并阻止附加 -->
      <option name="AntiDebug">true</option>

      <!-- 内存保护: 防止内存转储和修改 -->
      <option name="MemoryProtection">true</option>

      <!-- 导入保护: 混淆 IAT -->
      <option name="ImportProtection">true</option>

      <!-- 资源保护 -->
      <option name="ResourceProtection">false</option>

      <!-- 打包: 压缩并加密代码段 -->
      <option name="PackOutputFile">true</option>

      <!-- 检测虚拟机 -->
      <option name="VMDetect">false</option>

      <!-- 水印 -->
      <option name="Watermarks">false</option>

      <!-- 去除调试信息 -->
      <option name="StripDebugInfo">true</option>

      <!-- DLL 不能去除重定位 -->
      <option name="StripRelocs">false</option>
    </options>

    <!-- 保护函数标记 -->
    <!--
      Rust 编译后的符号名经过 mangling, 格式类似:
        _ZN15darra_ethercat6master*
      VMProtect 通过 SDK 标记 (VMProtectBeginUltra 等) 自动识别保护区域,
      以下为额外的按名称匹配规则 (补充 SDK 标记覆盖不到的函数)
    -->
    <procedures>
      <!-- 授权相关函数 - Ultra 保护 -->
      <procedure name="*authorization*" protection="Ultra"
                 comment="授权验证函数 - 最强保护"/>
      <procedure name="*license*" protection="Ultra"
                 comment="许可证处理 - 最强保护"/>
      <procedure name="*protection*anti_debug*" protection="Ultra"
                 comment="反调试检查 - 最强保护"/>
      <procedure name="*protection*anti_vm*" protection="Ultra"
                 comment="反虚拟机检查 - 最强保护"/>

      <!-- 加密/密钥函数 - 虚拟化保护 -->
      <procedure name="*decrypt*" protection="Virtualization"
                 comment="解密函数 - 虚拟化保护"/>
      <procedure name="*encrypt*" protection="Virtualization"
                 comment="加密函数 - 虚拟化保护"/>
      <procedure name="*derive_key*" protection="Virtualization"
                 comment="密钥派生 - 虚拟化保护"/>

      <!-- 核心初始化 - 变异保护 -->
      <procedure name="*EtherCATMaster*new*" protection="Mutation"
                 comment="主站初始化 - 变异保护"/>
      <procedure name="*from_json*" protection="Mutation"
                 comment="JSON 初始化 - 变异保护"/>

      <!-- PDO 处理 - 变异保护 (性能敏感, 不用虚拟化) -->
      <procedure name="*process_data*" protection="Mutation"
                 comment="PDO 数据处理 - 变异保护 (性能优先)"/>
      <procedure name="*pdo*" protection="Mutation"
                 comment="PDO 相关 - 变异保护"/>
    </procedures>
  </project>
</vmp>
