官方交流群组

SVIP交流群9:点击加入会话

计费规则说明

  1. 注册码采用动态计费模式,不绑定特定设备
  2. 单设备日消耗1个计费单位(含虚拟机实例)
  3. 分发编译后的可执行文件将同步计入计费系统
  4. 非活跃期间不计费,剩余天数永久有效

计费示例:以5元/30天的标准套餐为例:

▶ 30台设备同时使用将耗尽全部天数

▶ 单设备可持续使用30个自然日

服务管理中心

实时消费查询:点击访问控制台

免责声明

1. 一. 本软件完全出于个人兴趣爱好,由本人在业余时间开发.是一款安全,绿色,可靠的软件产品,遵循MIT许可协议,开发者不承担任何衍生责任

2. 严禁用于游戏自动化等违规场景,保留追溯非法使用的权利

3. 最终解释权及版本更新权归开发团队所有(2025年02月版)

大漠插件视频教程

[第一讲 文字识别]

[第二讲 利用系统字库识别文字]

[第三讲 如何判定后台模式]

[第四讲 后台综合应用]

[第五讲 透明图的制作与应用]

[Yolo环境配置]

[Yolo实战讲解]

[Yolo图片输入尺寸]

[Yolo大漠插件YOLO环境配置详细版(新手小白建议)]

工具和插件下载解压密码:1234

大漠插件 v7.2607 立即下载 历史版本
COM定制版大漠插件 v7.2607 立即下载
大漠插件注册示例[MFC,易语言,TC,按键精灵] 立即下载
大漠类库生成工具(v29) 立即下载
绑定测试工具 v80 立即下载
免注册DLL(v15) 立即下载
RegEx和RegExNoMac用到的IP(2024-12-23更新) 立即下载
Ai模块(v4.0) 立即下载
Ai模块(v5.0) 立即下载
yolo环境包 立即下载
大漠Yolo综合工具(v19.0) 立即下载
调试信息收集 立即下载
大漠插件易语言中文模块 立即下载
精易模块v11.1.5 立即下载
精易编程助手V3.98 立即下载

大漠插件历史版本

  1. 大漠普通定制插件 V7.2434 下载地址
  2. 大漠插件 V7.2607 下载地址
  3. 大漠插件 V7.2606 下载地址
  4. 大漠插件 V7.2601 下载地址
  5. 大漠插件 V7.2543 下载地址
  6. 大漠插件 V7.2520 下载地址
  7. 大漠插件 V7.2450 下载地址
  8. 大漠插件 V7.2449 下载地址
  9. 大漠插件 V7.2434 下载地址
  10. 大漠插件 V7.2430 下载地址
  11. 大漠插件 V3.1233 下载地址

注册插件示例

注册示例

long ret = dm.Reg("这里填你的注册码必须要填", "这里填附加码必须要填");

插件收费注册是否成功,用ret的返回值来判断,当 ret=1 时 插件收费注册成功

返回值解释

ret 值 描述
1 注册成功
0 大漠插件对象创建失败(与注册码无关,就算你不填注册码返回值也是0。解决方法:以管理员身份运行软件,关闭杀毒软件,手动注册大漠插件到系统中。)
-1 解决方法
781 原因:IP被服务器拉黑一天 解决方法:可以等明天自动解除。也可以重启路由器和光猫等10分钟后再开。IP可能会改变。
-2 原因:进程没有以管理员身份运行。解决方法:右键点程序,上面有个以管理员身份运行即可。
2 解决方法:看注册码是不是有空格,或者注册码不完整,请仔细查证。
4 ① 注册码否有空格,注册码不完整,请仔细查证。②内部注册码去使用普通插件也会返回4
5 未添加本机到服务器中
-9 1.附加码填写错误。查看附加码是否完整,是否有空格。2.检测插件版本号,是不是最新插件。换成最新的插件.
-8 1.附加码填写错误。查看附加码是否完整,是否有空格。2.检测插件版本号,是不是最新插件。换成最新的插件.
8 ① 使用的次数己到期了。 ②也有可能是附加码填写错误

返回值 [-1] 原因及解决方法

返回值[-1] 原因及解决方法
原因一 无法连接网络(也有可能防火墙拦截)
解决方法:检测电脑是否联网,并关闭杀软。
原因二 使用了旧版本的插件(7.2200之前的版本都是无法使用的)
解决方法:下载使用最新版本大漠插件
原因三 可能IP被大漠服务器拉黑了
解决方法1:关闭路由器、光猫等10分钟后再开启,IP可能会改变。
解决方法2:试着用手机联网来改变IP。
解决方法3:使用代理IP工具。
解决方法4:使用带IP的注册函数去注册,例如:dm.RegEx("这里填注册码","这里填附加码","121.204.252.143|121.204.253.161|125.77.165.62|125.77.165.131|123.129.231.44|123.129.231.45|123.129.231.85|123.129.231.86")
其他 如果以上方法都不适用,可以等到第二天,就会自动解封。
为什么会被拉黑IP 1. 一台机器一天内注册超过500次/天。
2. 无效或错误的注册码疯狂注册次数超过10次/天。
注意:大漠服务器会自动封禁IP,此封禁无法由管理员解除,需用户自行解决。
内部版本使用须知
购买内部注册码

内部版本使用须知

Internal Build · 功能说明与调用手册
仅支持 64 位系统 驱动后台模式 201 DmGuard 系列盾

02相比普通版本新增功能

内部版本相比普通版本增加了以下功能,其他功能和说明和普通版本一致。

  1. 驱动后台
  2. DmGuard 中的 vv、v2、va、hk、hx、hd、h3、vhide、pg、phide、dhide、mr、pd、v3、v3_plus 盾
  3. 后台绑定参数,键盘 dx.keypad.ll、鼠标 dx.mouse.ll。用这两个参数必须开启过 memory 盾(必须是 memory,不是 memory2 / memory3 / memory4)。只要开启过 memory 盾,再切换为其它的 memory 盾也没事。
  4. 后台绑定参数,键盘 dx.keypad.vmware、鼠标 dx.mouse.vmware。这 2 个参数专门用于 vmware 虚拟机后台,具体注意事项看下方的解释。
  5. DmGuardParams 中的 mode 设定
  6. SetSimMode 10、11 和 20,需要在定制里指定编译驱动
  7. DmGuardParams 中 hdmodify 设定
所有驱动功能都仅支持 64 位系统。
以下大部分功能依赖于 vv 盾。如果依赖 vv 盾,那么要求 vv 盾必须要先加载成功。注意,v3、v3_plus 的功能和 vv 相同,只是过虚拟机检测的能力不同。所有依赖 vv 的功能,用 v3、v3_plus 均可以替代。具体查看 v3、v3_plus 的说明。

1驱动后台依赖于 vv 盾

此功能依赖于 vv 盾,模式为 201。除了 dx.public.graphic.protect,其它参数都兼容。

需要注意的是:驱动后台中为了节省系统资源,最多同时被绑定的进程数量不可以超过 120 个。

内部版本对应的错误代码(GetLastError)

错误码含义与处理
-29使用了 dx.keypad.ll 或者 dx.mouse.ll,但是没有开启过 memory 盾。如果开启了 memory 盾,也返回此错误,可以联系我解决。
-30vv 盾没有加载。
-33异常错误。
-34绑定个数可能达到上限。
另外使用了驱动后台后,AsmCall 模式 6 会无法使用。这时可使用模式 3,更加隐蔽。

2DmGuard · hk 盾依赖于 vv 盾

此盾用来对指定的进程、指定的可执行地址上写内存。可以让执行和读写分离,可以有效的解决 CRC 检测。

写入的字节数最多为 32 个。执行前要求对目标进程能够内存读写正常。

应用场景举例

进程 A.exe(pid 为 1024)的地址 40112233 处的汇编代码如下:

40112233:  85 d2       test edx,edx
40112235:  74 15       je xxxxxx

假设某个功能,必须在 edx 为 0 时才生效,那么为了让这个功能强制生效,我们一般的做法是把 je xxxx 改为 jmp xxxx:

40112235:  eb 15       jmp xxxxxx

那么我们就会用到写内存的功能,但是写内存有个很大的弊端,很容易被 CRC 扫描到这处代码是否被修改过。

hk 的功能也是写内存,但是写入的内容仅对执行时生效,读写时并不生效。这样读写还是原来的代码,就可以避免 CRC。

调用方法

先开启 vv:

dm.DmGuard 1,"vv"

对指定进程增加一个写入地址:

dm.DmGuard 1,"hk pid add addr <data>"

比如:

dm.DmGuard 1,"hk 1024 add 40112235 <eb 15>"

使指定进程加入的写入地址生效:

dm.DmGuard 1,"hk pid active"

比如:

dm.DmGuard 1,"hk 1024 active"

清空指定进程的写入地址:

dm.DmGuard 1,"hk pid cls"

比如:

dm.DmGuard 1,"hk 1024 cls"

注意事项

  • 此盾和后台绑定是有冲突的。假如指定的进程在解绑时,会让写入地址失效。另外我们调用了 hk 1024 cls 后,会让驱动后台 201 模式失效。
  • 如果要和后台绑定一起使用,建议先绑定,再 hk。中途不能进行解绑,也不能 hk pid cls;如果要暂停绑定,可以使用 EnableBind 来切换。
  • 另外,对目标进程进行强制解绑,也会导致 hk 失效。
  • hk 添加的数量是有限制的:每个进程最多 32 个,最多 64 个进程。
  • 注:上面的 1024 是我随便写的 pid,实际使用必须换成真实的 pid。

3DmGuard · hd 盾依赖于 vv 盾

此盾用来虚拟各种硬件参数。

用法,先开启 vv:

dm.DmGuard 1,"vv"

基础指令

加载hd
只加载驱动,不开启过滤功能,什么都不操作。开启 hd 的进程会自动设置为白名单进程。如果要添加白名单进程,看下面 white 的设置。
清空hd cls
清空所有虚拟化(都设置为 disable)。
设置hd mode t
设置虚拟化模式:
  • t = 0:全局模式,所有进程一个结果
  • t = 1:一个进程一个结果(注意,这种模式下有些内容不能完全模拟,比如 wmi 的查询会一直是一个结果)
设置hd number t
设置虚拟化时随机生成数(10 进制)。意思是每个虚拟的信息都是根据这个 number 来 hash 生成,这样更改这个 number 就相当于更改了虚拟的信息。但是这样生成的结果都是无意义的字符串信息,建议有些内容还是配合 custom 来设置更好。这个 number 只影响虚拟设置为 enable 和 custom 中有 ? 的情况。
设置hd block <process_name1|process_name2....|process_namen>
设置黑名单。默认情况下是对所有的进程都虚拟信息;如果你想要仅对某些进程虚拟信息,就要用到 block 设置了。
  • 进程名是大小写不敏感的。
  • 每个进程名的长度不可以超过 16 个字符;多个进程用 | 连接,总长度不可以超过 256 个字符,并且不能有中文字符。
  • 如果设置为空,表示虚拟化所有进程。
  • 只要进程名里含有指定的 process_name,才会被虚拟化。
比如:hd block <test1|test2|hh3> 等。
设置hd white <process_name1|process_name2....|process_namen>
设置白名单。开启 hd 的进程名是自动加入白名单的,不需要再次在这里增加。
  • 进程名是大小写不敏感的。
  • 每个进程名的长度不可以超过 16 个字符;多个进程用 | 连接,总长度不可以超过 256 个字符,并且不能有中文字符。
  • 如果设置为空,表示清空白名单。注意:开启白名单的进程永久不可以清空。
  • 只要进程名里含有指定的 process_name,才会被放行。
比如:hd white <A123|B56|C78> 等。

单个虚拟化项目设置

以下是为每个虚拟化单独设置。enable 表示开启虚拟化,disable 表示不虚拟化(维持原值),custom 表示自定义虚拟化返回值。具体的长度和信息解释看每个条目的说明。如果 custom 中含有 ? 字符,则表示 ? 用随机的数字 0-9 代替,具体是用哪个数字代替,取决于前面 hd number 的 number 值以及 hd mode 的设置情况。
设置hd cpuid <enable|disable|custom>
虚拟化 CPU 序列号。这里不建议开启,因为 cpu 的特性信息修改后,很容易被检测出来。
custom 这里长度必须是 8 个 16 进制的字节(中间可以有空格),比如 1122334455667788;比如我设置序列号为 000006d11f8bfbff,或者 33 44 ?? ab ?? 55 66 77 等。
原始的值可以通过 GetSystemInfo "cpuid" 来获取。
设置hd mac <enable|disable|custom>
mac 虚拟化。这里建议开启。虚拟化 MAC 地址,custom 这里长度必须是 6 个 16 进制的字节,比如 112233445566,比如 6d 3f ab cd 11 11,或者 6d 3f ?? ?? 11 22。
原始的值可以通过 GetMac 来获取。
但是这个有副作用:会导致我们的机器码获取接口也无法获取到真实的 mac。如果重启次数太多会引发多重计费,这个问题无解。
修改 mac 要求在调用后,必须要重启网卡,否则不会生效。
清空hd arp_table <disable|clean>
清空 arp table。建议开启。这里不支持获取原始值,也不支持自定义虚拟,只提供 disable 和 clean。clean 表示清空。
arp table 里缓存了 ip 地址和 mac 地址的映射关系,所以这里也会包含一些 mac 信息。为避免 mac 被检测,建议清空。
设置hd disk_serial <enable|disable|custom>
虚拟化硬盘序列号。这里建议开启,但是开启后不建议用默认的 enable,因为默认的 enable 是无意义的串,最好用 custom 自己设定一些有意义的串。
custom 的长度不可以超过原始的长度,如果超过了会自动截断。比如 WDC-WD????ab?? 等,可设置为空。
原始的值可以通过 GetDiskSerial 来获取。
设置hd disk_model <enable|disable|custom>
虚拟化硬盘厂商信息。其它解释同上。原始的值可以通过 GetDiskModel 来获取。
设置hd disk_reversion <enable|disable|custom>
虚拟化硬盘修正版本号。其它解释同上。原始的值可以通过 GetDiskReversion 来获取。
设置hd disk_volume_serial <enable|disable|custom>
虚拟化分区序列号。这里不建议开启,因为此类信息可以很容易修改,可以通过工具来修改更好,很容易被检测出来。
custom 的长度必须是 4 个 16 进制的字节,比如 11223344,或者 12 34 56 ?? 等。
原始的值可以通过 GetSystemInfo "disk_volume_serial" 来获取。
清空hd disk_gpt_guid <disable|clean>
清空分区 Guid。可以考虑开启。这里不支持获取原始值,也不支持自定义虚拟,只提供 disable 和 clean。clean 表示清空。
清空hd disk_gpt_volume <disable|clean>
清空分区 Volume。可以考虑开启。这里不支持获取原始值,也不支持自定义虚拟,只提供 disable 和 clean。clean 表示清空。
设置hd bios_vendor <enable|disable|custom>
虚拟化 bios 厂商信息。这里建议开启。custom 的长度不可以超过原始的长度,如果超过了会自动截断,比如 American Megatrends Inc 等,再比如 Phoenix ???????? LTD,可设置为空。
原始的值可以通过 GetSystemInfo "bios_vendor" 来获取。这里建议 custom 的长度尽量和原始的保持一致,避免一些奇怪的检测。
设置hd bios_version <enable|disable|custom>
虚拟化 bios 版本信息。这里看情况开启。custom 的长度不可以超过原始的长度,如果超过了会自动截断,比如 6.00 或者 ?.??,可设置为空。
原始的值可以通过 GetSystemInfo "bios_version" 来获取。这里建议 custom 的长度尽量和原始的保持一致,避免一些奇怪的检测。
设置hd bios_release_date <enable|disable|custom>
虚拟化 bios 发布日期。这里看情况开启。custom 的长度不可以超过原始的长度,如果超过了会自动截断,比如 07/22/2020 或者 ??/??/????,可设置为空。
原始的值可以通过 GetSystemInfo "bios_release_date" 来获取。这里建议 custom 的长度尽量和原始的保持一致,避免一些奇怪的检测。
设置hd bios_oem <enable|disable|custom>
虚拟化 bios 里的 oem 信息。这里建议开启。custom 的长度不可以超过原始的长度,如果超过了会自动截断,比如 AMD string 或者 Intel ???? string 等,可设置为空。这里建议 custom 的长度尽量和原始的保持一致,避免一些奇怪的检测。
设置hd board_vendor <enable|disable|custom>
虚拟化主板制造厂商信息。这里建议开启。custom 的长度不可以超过原始的长度,如果超过了会自动截断,比如 Intel Corporation 或者 Intel ????,可设置为空。
原始的值可以通过 GetSystemInfo "board_vendor" 来获取。这里建议 custom 的长度尽量和原始的保持一致,避免一些奇怪的检测。
设置hd board_product <enable|disable|custom>
虚拟化主板产品信息。这里建议开启。custom 的长度不可以超过原始的长度,如果超过了会自动截断,比如 440BX Desktop Reference Platform 或者 440BX ????,可设置为空。
原始的值可以通过 GetSystemInfo "board_product" 来获取。这里建议 custom 的长度尽量和原始的保持一致,避免一些奇怪的检测。
设置hd board_version <enable|disable|custom>
虚拟化主板版本信息。这里看情况开启。custom 的长度不可以超过原始的长度,如果超过了会自动截断,比如 5.03 或者 ?.??,可设置为空。
原始的值可以通过 GetSystemInfo "board_version" 来获取。这里建议 custom 的长度尽量和原始的保持一致,避免一些奇怪的检测。
设置hd board_serial <enable|disable|custom>
虚拟化主板序列号。这里看情况开启。custom 的长度不可以超过原始的长度,如果超过了会自动截断,比如 wetelt 或者 ??relt??,可设置为空。
原始的值可以通过 GetSystemInfo "board_serial" 来获取。这里建议 custom 的长度尽量和原始的保持一致,避免一些奇怪的检测。
设置hd board_location <enable|disable|custom>
虚拟化主板位置信息。这里看情况开启。custom 的长度不可以超过原始的长度,如果超过了会自动截断,比如 weltetjk 或者 ??elt??,可设置为空。
原始的值可以通过 GetSystemInfo "board_location" 来获取。这里建议 custom 的长度尽量和原始的保持一致,避免一些奇怪的检测。
设置hd system_manufacturer <enable|disable|custom>
虚拟化系统制造商信息。这里建议开启。custom 的长度不可以超过原始的长度,如果超过了会自动截断,比如 VMware, Inc. 或者 VMware, ????,可设置为空。
原始的值可以通过 GetSystemInfo "system_manufacturer" 来获取。这里建议 custom 的长度尽量和原始的保持一致,避免一些奇怪的检测。
设置hd system_product <enable|disable|custom>
虚拟化系统产品信息。这里建议开启。custom 的长度不可以超过原始的长度,如果超过了会自动截断,比如 VMware Virtual Platform 或者 VMware Virtual ????,可设置为空。
原始的值可以通过 GetSystemInfo "system_product" 来获取。这里建议 custom 的长度尽量和原始的保持一致,避免一些奇怪的检测。
设置hd system_serial <enable|disable|custom>
虚拟化 bios 序列号。这里建议开启。custom 的长度不可以超过原始的长度,如果超过了会自动截断,比如 VMware-56 4d ce 2c c3 85 0b 1f-32 38 ae f4 a2 08 f8 47 或者 VMware-56 4d ce 2c c3 85 0b 1f-32 38 ae ?? a2 08 f8 ??,可设置为空。
原始的值可以通过 GetSystemInfo "system_serial" 来获取。这里建议 custom 的长度尽量和原始的保持一致,避免一些奇怪的检测。
设置hd system_uuid <enable|disable|custom>
虚拟化 bios uuid。这里建议开启。custom 的长度必须是 16 个 16 进制的字节,比如 11223344556677881122334455667788 或者 12 34 bc ab 33 35 ab cd f4 ?? a2 08 f8 47 77 88 等。
原始的值可以通过 GetSystemInfo "system_uuid" 来获取。
设置hd system_version <enable|disable|custom>
虚拟化系统版本信息。这里看情况开启。custom 的长度不可以超过原始的长度,如果超过了会自动截断,比如 4.0 或者 4.?,可设置为空。
原始的值可以通过 GetSystemInfo "system_version" 来获取。这里建议 custom 的长度尽量和原始的保持一致,避免一些奇怪的检测。
设置hd system_sku <enable|disable|custom>
虚拟化系统 sku 序列号。这里建议开启。custom 的长度不可以超过原始的长度,如果超过了会自动截断,比如 235ljlkelkjelktjltl 或者 ??elrjlwjtl????,可设置为空。
原始的值可以通过 GetSystemInfo "system_sku" 来获取。这里建议 custom 的长度尽量和原始的保持一致,避免一些奇怪的检测。
设置hd system_family <enable|disable|custom>
虚拟化系统家族信息。这里看情况开启。custom 的长度不可以超过原始的长度,如果超过了会自动截断,比如 Family-23432 或者 Family-????,可设置为空。
原始的值可以通过 GetSystemInfo "system_family" 来获取。这里建议 custom 的长度尽量和原始的保持一致,避免一些奇怪的检测。
设置hd product_id <enable|disable|custom>
虚拟化系统产品 id。这里建议开启。custom 的长度不可以超过原始的长度,如果超过了会自动截断,比如 00426-OEM-8992662-004?? 或者 ?????-OEM-???????-?????。
原始的值可以通过 GetSystemInfo "product_id" 来获取。这里建议 custom 的长度尽量和原始的保持一致,避免一些奇怪的检测。
设置hd system_identifier <enable|disable|custom>
虚拟化系统标识。这里建议开启。custom 的长度不可以超过原始的长度,如果超过了会自动截断,比如 AT/AT COMPATIBLE 等。
原始的值可以通过 GetSystemInfo "system_identifier" 来获取。这里建议 custom 的长度尽量和原始的保持一致,避免一些奇怪的检测。
设置hd system_bios_version <enable|disable|custom>
虚拟化系统 BIOS 版本号。这里建议开启。custom 的长度不可以超过原始的长度,如果超过了会自动截断,比如 ACRSYS - 60400?? 等。
原始的值可以通过 GetSystemInfo "system_bios_version" 来获取。
如果有多个条目,可以用 "|" 来连接。每个条目的长度都不可以超过原始长度,超过会自动被截断。条目数量不可以超过原始的数量,如果超过的也会自动省略。
这里建议 custom 的长度尽量和原始的保持一致,避免一些奇怪的检测。
设置hd system_bios_date <enable|disable|custom>
虚拟化系统 BIOS 日期。这里看情况开启。custom 的长度不可以超过原始的长度,如果超过了会自动截断,比如 07/22/20 等。
原始的值可以通过 GetSystemInfo "system_bios_date" 来获取。这里建议 custom 的长度尽量和原始的保持一致,避免一些奇怪的检测。

完整例子

dm.DmGuard 1,"vv"

dm.DmGuard 1,"hd" //这个什么都不干,单纯的只是把当前进程设置为白名单进程
dm.DmGuard 1,"hd cls"
dm.DmGuard 1,"hd block <>"
dm.DmGuard 1,"hd white <>"
dm.DmGuard 1,"hd mode 0"
dm.DmGuard 1,"hd number 333"

// 添加虚拟的项目,有几个添加几个. 如不需要虚拟就不用加
dm.DmGuard 1,"hd cpuid <enable>"
dm.DmGuard 1,"hd mac <enable>"

dm.DmGuard 1,"hd disk_serial <enable>"
dm.DmGuard 1,"hd disk_model <Modle : ???abc>"
dm.DmGuard 1,"hd disk_reversion <enable>"
dm.DmGuard 1,"hd disk_volume_serial <????????>"

dm.DmGuard 1,"hd bios_vendor <????rewltl??>"
dm.DmGuard 1,"hd bios_version <?.??>"
dm.DmGuard 1,"hd bios_release_date <??/??/????>"
dm.DmGuard 1,"hd bios_oem <????ertete??|ewlkrjelwtjle|lAerelt|????erlt??>"

dm.DmGuard 1,"hd board_vendor <???AAABBBCCC???>"
dm.DmGuard 1,"hd board_product <CCCC??eret???>"
dm.DmGuard 1,"hd board_version <?.??>"
dm.DmGuard 1,"hd board_serial <ooeot??oeiort??>"
dm.DmGuard 1,"hd board_location <asdf??aaa>"

dm.DmGuard 1,"hd system_manufacturer <2347329857lLLL??>"
dm.DmGuard 1,"hd system_product <OOOTTCCCCC???>"
dm.DmGuard 1,"hd system_serial <Asus Serial : 389959356??3??432325>"
dm.DmGuard 1,"hd system_uuid <12 34 bc ab 33 35 ab cd f4 ?? a2 08 f8 47 77 88>"
dm.DmGuard 1,"hd system_version <?.??>"
dm.DmGuard 1,"hd system_sku <08238503285806???kll>"
dm.DmGuard 1,"hd system_family <??abcd??>"

dm.DmGuard 1,"hd product_id <?????-OEM-???????-?????>"
dm.DmGuard 1,"hd system_identifier <enable>"
dm.DmGuard 1,"hd system_bios_version <ACRSYS - 60400??|AAAAAABBBBB|CCCCCCCDDDDDDD>"
dm.DmGuard 1,"hd system_bios_date <??/??/??>"

dm.DmGuard 1,"hd disk_gpt_guid <clean>"
dm.DmGuard 1,"hd disk_gpt_volume <clean>"
dm.DmGuard 1,"hd arp_table <clean>"
以上这些都是我随意写的。具体应用时,必须仔细考虑,不要这么随意,无意义的字符串不靠谱。
另外要注意:如果要防止 wmi 查询,那么必须在设置结束后,重启 wmi 服务,或者强制结束所有 wmprvse.exe,比如:
taskkill /f /im wmprvse.exe —— 之后 wmi 查询才会正常。
  • 建议配合 DmGuardParams 的 hdmodify 来使用比较好。
  • 另外特别要注意白名单设置。如果你需要在别的进程获取真实的机器码信息,那么最好是把指定进程加入白名单,以免多重计费。

4DmGuard · h3 盾

这个盾如果要更改签名,必须使用 DmGuardExtrace 来单独释放出来,type 写 "h3" 即可。

此盾用来隐藏目录和文件,同时保护目录和文件不被非法访问。

用法

清空保护列表、黑名单、白名单:

dm.DmGuard 1,"h3 cls"

清空保护列表:

dm.DmGuard 1,"h3 cls p"

清空黑名单:

dm.DmGuard 1,"h3 cls b"

清空白名单:

dm.DmGuard 1,"h3 cls w"

增加一个保护目录(这个目录包括这个目录所有的子目录和文件都被隐藏和保护),如果要保护多个,就多次调用即可:

dm.DmGuard 1,"h3 p <0>" '这个是保护当前dll所在的目录
dm.DmGuard 1,"h3 p <1>" '这个是保护当前进程所在的目录
dm.DmGuard 1,"h3 p <c:\TestDir>"
dm.DmGuard 1,"h3 p <c:\TestDir2>"
dm.DmGuard 1,"h3 p <d:\testDir3\aaa.dll>"
等等

有些时候,我们只想保护假路径,真实的路径不需要保护,那么我们这样调用(一般用在符号链接当中):

dm.DmGuard 1,"h3 p <c:\TestDir2> 1"
dm.DmGuard 1,"h3 p <d:\testDir3\aaa.dll> 1"

也可以保护指定的文件,比如 *.dll、*.txt:

dm.DmGuard 1,"h3 p <*.dll>"
等等

增加一个白名单(即指定的进程可以随意访问保护的目录)。注意,开启 h3 盾的进程是默认加到白名单进程的。如果有指定多个白名单,多次调用即可。注意,白名单只有在黑名单为空时才起作用。

dm.DmGuard 1,"h3 w <explorer.exe>" '这个可以让资源管理器里看到你的目录
dm.DmGuard 1,"h3 w <regsvr32.exe>" '这个可以让你的DLL顺利注册
等等

增加一个黑名单(即除了指定的进程,都可以随意访问保护的目录)。如果有指定多个黑名单,多次调用即可。注意,如果添加了黑名单,那么白名单将失效。

dm.DmGuard 1,"h3 b <explorer.exe>" '这个可以让资源管理器里看不到你的目录,但其他进程可以
dm.DmGuard 1,"h3 b <qq.exe>"
等等
dm.DmGuard 1,"h3 w <csrss.exe>" —— 这个可以让你绑定 64 位进程时,避免出现 -24 的错误。另外如果用绑定模式 0,还会出现 -26 的错误,这个错误需要你把同 DLL 目录下的那个 exe 加入白名单即可。

5DmGuard · vv 盾依赖于 vt

目前仅支持 intel cpu,要求 CPU 必须支持虚拟化,并且 BIOS 中必须打开 vt 支持。

此盾是以上用到 VT 功能的基础,必须调用。调用后,会让系统不再支持 vt。

另外,经过测试发现,如果开启 vv 后出现蓝屏代码 0xC000xxxx,并且屏幕上提示 winload.efi 字样时,那必须从 bios 里关闭 secure boot(安全启动)。

vv 在虚拟机上和某些缓存比较少的 CPU 上,可能引发 CPU 占用虚高。经过测试,虚拟机可以把 CPU 数量设置为 1、核数量设置为 1,可以缓解。真机的话没办法。

如果要求更高性能,请使用 v3 或者 v3_plus。

dm.DmGuard 1,"vv"
需要注意的是,此盾会和使用了类似技术的软件冲突,比如 360 之类的,必须卸载。
另外,在新点的 WIN10 上,有可能开启了 Device Guard,这个必须关闭(百度如何关闭 DeviceGuard)。
还有系统的内核隔离(VBS)也是必须要关闭的,新的 WIN11 是默认开启的。

如果启动 vv 返回 -8,可以尝试在管理员命令行下运行以下命令,然后重启尝试:

bcdedit /set hypervisorlaunchtype off

6DmGuard · v2 盾依赖于 vt

目前仅支持 intel cpu,要求 CPU 必须支持虚拟化,并且 BIOS 中必须打开 vt 支持。某些盾依赖于此盾。

比如:

dm.DmGuard 1,"v2"
注意此盾不能直接和 vv 盾一起打开,同时只能打开一个。如果有需求同时使用 vv 和 v2,那么直接使用下面的方式来打开(这样内部会同时打开 vv 和 v2):
dm.DmGuard 1,"va"

但如果用下面的代码直接打开 2 个,后打开的会无效:

dm.DmGuard 1,"vv"
dm.DmGuard 1,"v2"

如果启动 vv 返回 -8,可以尝试在管理员命令行下运行以下命令,然后重启尝试:

bcdedit /set hypervisorlaunchtype off

如果有蓝屏的情况,建议从 bios 里关闭 Secure boot 以及系统的 Device Guard。具体如何关闭请自行百度。

v2 不可以和 v3、v3_plus 一起开。

7DmGuard · pg 盾

此盾过 windows pg 保护,目前最高测试到 win10 19041,之后的版本没测试。

dm.DmGuard 1,"pg"
注意,此盾如果是要在 WIN10 上运行,第一次运行此盾必须至少等待 5 分钟。如果不等待,直接运行 phide 等盾,可能有小概率引发蓝屏。

8DmGuard · phide

64 位系统上调用此盾,必须先过 pg 保护。

phide add

"phide add <pid unlink block_open block_window block_memory block_attach block_object block_open2 block_path remove_object block_inject block_event block_window2>"

隐藏以及保护指定进程。调用此功能的进程会被加入白名单。

参数说明
pid需要保护的进程 pid,10 进制表示。0 表示本进程。
unlink表示是否需要断链。1 表示断开,0 不断开。
block_open表示是否阻止打开进程。1 表示阻止,0 不阻止。
block_window表示是否阻止探测窗口。1 表示阻止,0 不阻止。这个和下面的 block_window2 最好只开一个,否则可能会弄巧成拙。
block_memory表示是否阻止读取内存。1 表示阻止,0 不阻止。这个一般是防止 R3 读取进程内存,对于内核读取内存也有一定的效果。
block_attach表示是否阻止附加到进程。1 表示阻止,0 不阻止。这个可以阻止绝大部分的内存读写。由于杀伤力比较大,建议配合 block 使用,以免异常。
block_object表示是否阻止访问对象。1 表示阻止,0 不阻止。这个可以防止对保护进程对象的访问。
block_open2另一个保护进程不被访问的,更加有效一些。1 表示阻止,0 不阻止。
block_path防止对包含指定 path 的文件进行访问。1 表示阻止,0 不阻止。这个必须配合下面 block_path 来增加拦截名单,只要访问的文件路径包含指定的名单,那么就会被拦截。多个可以用 "|" 来连接,大小写不敏感。另外这个路径里不能包含盘符信息,比如 c: 等。
remove_object关闭其他进程已经打开的被保护进程的句柄。1 表示关闭,0 不关闭。如果关闭了句柄会导致异常,可以考虑不关闭。
block_inject禁止进程(除了白名单内的)对任何进程注入。1 表示禁止,0 不禁止。如果要指定某些进程禁止注入,需要配合 block 来设置。而且这个最好配合 block,全局禁止注入可能会出一些意外情况。
block_event禁止一切进程记录事件信息。1 表示阻止,0 不阻止。
block_window2表示是否阻止探测窗口。1 表示阻止,0 不阻止。另种实现方式。有时候可以考虑 block_window 和 block_window2 只开启一个。
block_reg防止对包含指定 reg 的注册表信息继续访问。1 表示阻止,0 不阻止。这个必须配合下面 block_reg 来增加拦截名单,只要访问的注册表信息包含指定的名单,那么就会被拦截。这里拦截的访问类型必须是字符串类型的,如果是别的比如 DWORD 等等是不拦截的。多个可以用 "|" 来连接,大小写不敏感。

配合 block 使用的示例

如果要配合 block 使用,建议先添加 block,再开启 block_attach,比如:

dm.DmGuard 1,"phide block <games>"
dm.DmGuard 1,"phide remove <0>"
dm.DmGuard 1,"phide add <0 0 0 0 0 1 0 0 0 0 0 0 0>"

另外要注意,开了这个 block_attach,会让你无法以调试模式运行你的程序,必须编译好之后再运行。实际使用中,如果出现异常比较多,可以考虑去掉这个属性。

block_path 的配合示例:

dm.DmGuard 1,"phide block <games>"
dm.DmGuard 1,"phide block_path <myFile|test|desktop>"
dm.DmGuard 1,"phide add <0 0 0 0 0 0 0 0 1 0 0 0 0>"

block_inject 的配合示例(禁止进程路径里含有 games 的进程对任何进程的注入):

dm.DmGuard 1,"phide block <games>"
dm.DmGuard 1,"phide add <0 0 0 0 0 0 0 0 0 0 1 0 0>"

block_reg 的配合示例:

dm.DmGuard 1,"phide block <games>"
dm.DmGuard 1,"phide block_reg <script|test|myFile>"
dm.DmGuard 1,"phide add <0 0 0 0 0 0 0 0 0 0 0 0 0 1>"
另外要注意,对同一个进程多次 add,只有第一次的生效。如果要修改为新的 add,那么必须先执行下面的 remove,然后再次 add 才会生效。

phide remove

"phide remove <pid>"

恢复保护的进程。pid 为进程 pid,10 进制表示。0 表示本进程。

phide block

"phide block <path>"

给 phide 增加黑名单路径。默认 phide 是阻止所有进程(除了加在白名单的进程,具体查看 white 设置),在黑名单里的进程是被拦截的。但是如果你只想拦截特定的进程,就可以使用此功能。

  • 这个功能的意思是,只要进程路径里包含 path 就会被拦截。
  • 这里的 path 是大小写不敏感的。
  • 可以设置多个 path,用 "|" 来连接,连起来的总长度不要超过 256 个字符。这个路径里不能包含盘符信息,比如 c: 等。
  • 这里每次调用 block 都会覆盖之前的 block 设置。
  • 另外要注意,系统进程(SYSTEM 进程)的名字是 _SYSTEM_。如果要拦截 SYSTEM 进程,path 可以写 _SYSTEM_。

phide white

"phide white <path>"

给 phide 增加白名单路径。默认 phide 只会给开启 phide 所在的进程开启白名单权限,在白名单里的进程是被放行的。

  • 这个功能的意思是只要进程路径里包含 path 就会被放行。
  • 这里的 path 是大小写不敏感的。
  • 可以设置多个 path,用 "|" 来连接,连起来的总长度不要超过 256 个字符。这个路径里不能包含盘符信息,比如 c: 等。
  • 这里每次调用 white 都会覆盖之前的 white 设置。
  • 另外要注意,系统进程(SYSTEM 进程)的名字是 _SYSTEM_。如果要放行 SYSTEM 进程,path 可以写 _SYSTEM_。

phide block_driver

"phide block_driver en"

这个可以阻止任何驱动的加载。默认是不拦截。en 为 0 表示不拦截,en 为 1 表示拦截。比如:

dm.DmGuard 1,"phide block_driver 1"

phide block_driver_path

"phide block_driver_path <path>"

这个是当上面的 block_driver 拦截时,可以指定一个文件记录被拦截的信息。这个 path 必须是全路径。默认是空的,不记录。比如:

dm.DmGuard 1,"phide block_driver_path <c:\driver.log>"

完整例子

// 例子
dm.DmGuard 1,"pg"
// 阻止读取内存+阻止附加
dm.DmGuard 1,"phide remove <1024>"
dm.DmGuard 1,"phide add <1024 0 0 0 1 1 0 0 0 0 0 0 0 0>"

// 阻止读取内存+阻止附加+阻止探测窗口
dm.DmGuard 1,"phide remove <1024>"
dm.DmGuard 1,"phide add <1024 0 0 1 1 1 0 0 0 0 0 0 0 0>"

// 对当前进程保护,类型是全部拦截
dm.DmGuard 1,"phide remove <0>"
dm.DmGuard 1,"phide block_path <MyPath>"
dm.DmGuard 1,"phide block_reg <MyPath>"
dm.DmGuard 1,"phide add <0 1 1 1 1 1 1 1 1 1 1 1 0 1>

// 最强防护1
// 假设你的程序路径是d:\MyPath\you.exe 目标程序路径是d:\Games\game.exe
// 我们把自己加入保护. 并且只拦截Games目录下(任意级目录)的所有进程. 并且防止MyPath目录下(任意级目录)的文件被访问
dm.DmGuard 1,"phide remove <0>"
dm.DmGuard 1,"phide block <Games>"
dm.DmGuard 1,"phide block_path <MyPath>"
dm.DmGuard 1,"phide block_reg <MyPath>"
dm.DmGuard 1,"phide add <0 1 1 1 1 1 1 1 1 1 1 1 0 1>

// 最强防护2
// 有时候你也可以防止多个目标进程之间互相访问,可以这样
// 假设你的程序路径是d:\Games\MyPath\you.exe  目标程序路径是d:\Games\game.exe
// 我们可以把自己和所有的目标进程都加入phide,这样他们之间就互相看不到. 然后可以把MyPath加入限制路径. 防止MyPath下的文件被game.exe访问
dm.DmGuard 1,"phide remove <0>"
dm.DmGuard 1,"phide block <Games>"
dm.DmGuard 1,"phide block_path <MyPath>"
dm.DmGuard 1,"phide block_reg <MyPath>"
dm.DmGuard 1,"phide add <0 1 1 1 1 1 1 1 1 1 1 1 0 1>
这里有几个目标进程就加几个.  把目标进程也都加入保护. 这样他们之间也就无法互相访问
dm.DmGuard 1,"phide add <1024 1 1 1 1 1 1 1 1 1 1 1 0 1>
dm.DmGuard 1,"phide add <2048 1 1 1 1 1 1 1 1 1 1 1 0 1>
等等

// 仅断链
dm.DmGuard 1,"phide remove <1024>"
dm.DmGuard 1,"phide add <1024 1 0 0 0 0 0 0 0 0 0 0 0 0>"

// 仅拦截窗口
dm.DmGuard 1,"phide remove <1024>"
dm.DmGuard 1,"phide add <1024 0 0 1 0 0 0 0 0 0 0 0 0 0>"

// 断链+阻止打开进程+拦截窗口
dm.DmGuard 1,"phide remove <1024>"
dm.DmGuard 1,"phide add <1024 1 1 1 0 0 0 1 0 0 0 0 0 0>"

// 恢复保护
dm.DmGuard 1,"phide remove <1024>"

// 仅当进程路径里包含Games才拦截,比如全路径是d:\test\Games\xxx.exe
dm.DmGuard 1,"phide block <Games>"

// 仅当进程路径里包含xxx才拦截,比如全路径是d:\test\Games\xxx.exe
dm.DmGuard 1,"phide block <xxx>"

// 仅当进程路径里包含Games或者Game3333才拦截,比如全路径是d:\test\Games\xxx.exe和d:\test\Game3333\yyy.exe
dm.DmGuard 1,"phide block <Games|Game3333>"

// 拦截d:\test目录下所有进程,比如全路径是d:\test\Games\xxx.exe和d:\test\Game3333\yyy.exe
dm.DmGuard 1,"phide block <test>

// 所有的都拦截,默认设置
dm.DmGuard 1,"phide block <>"

// 如果要达到老版本phide的效果,那么设置如下
dm.DmGuard 1,"phide add <0 1 1 1 0 0 0 0 0 0 0 0 0 0>

// 我认为比较稳定有效的保护方案
dm.DmGuard 1,"phide add <0 1 1 1 1 0 1 1 0 1 0 1 0 1>

// 比如我的程序放在d:\MyPath\目录下 分别是 d:\MyPath\1.exe d:\MyPath\2.exe d:\MyPath\3.exe
// 我现在要把这3个EXE都加入放行. 那么就可以这么写
dm.DmGuard 1,"phide white <mypath>"即可. 注意大小写是不敏感的. 所以MyPath也可以写成mypath
当然你也可以分别写3个EXE的名字,比如
dm.DmGuard 1,"phide white <1.exe|2.exe|3.exe>"

// 再比如 我有2个目录下的程序,都要放行. 比如d:\MyPath1和d:\MyPath2,那么可以这么写
dm.DmGuard 1,"phide white <MyPath1|mypath2>"即可
当然你也可以直接写
dm.DmGuard 1,"phide white <mypath>". 这样MyPath1和MyPath2都会被放行

// 白名单清空
dm.DmGuard 1,"phide white <>"


// 等等

重要注意事项

  • 注意,开启此盾的进程会被加入白名单。
  • 还有一点要特别注意,被保护的进程和盾的开启最好都在目标程序开启之前完成,否则可能被扫描到。
  • 如果中途被保护的进程退出了,那么最好把目标程序关闭后,再重新打开被保护程序。
  • 如果参数全设置为 1 会导致异常蓝屏等问题,可以考虑去掉某些参数来尝试。
  • 另外像 lsass.exe、smss.exe、wininit.exe 等系统进程可以考虑加入白名单,来防止蓝屏。
  • 另外,保护进程退出时,可以考虑执行 phide remove <0> 防止关闭时蓝屏。
  • phide 可以和 b2、hl 配合使用,效果会更好。
  • 还有,经测试发现,当开启 block_attach 时,必须也开启 block_object,否则会引发蓝屏。
  • 另外 block_reg 这个开关打开时,对系统性能可能有一定的影响,毕竟注册表访问很频繁。
  • 如果同时开启了黑名单和白名单,那么只有黑名单会生效。

9DmGuard · vhide 盾

功能和用法同 phide,只不过此盾不用过 pg,但依赖于 vv 盾。此盾不能和 phide 一起开。比如:

dm.DmGuard 1,"vv"

dm.DmGuard 1,"vhide remove <0>"
dm.DmGuard 1,"vhide add <0 1 1 1 0 0 0 0 0 0 0 0 0 0>"

dm.DmGuard 1,"vhide block <Games|Game3333>"
等等,具体用法可以查看phide的说明.

注意,开启此盾的进程会被加入白名单。

10DmGuard · dhide 盾

此盾可以隐藏所有和插件相关的驱动。

  • 调用此盾的前提是不可以调用 block 盾,block 盾会撤除隐藏。
  • 调用顺序无所谓,先调用、后调用都可以正确隐藏。
  • 另外 dhide 仅对驱动通信模式 0 起作用。如果是通信模式不是 0,那么看后面的说明。
需要注意的是,调用此盾在 win10 之前是不需要开 pg 盾的;win10(包括)之后的版本,都需要开 pg,否则会触发 pg 蓝屏。
另外,此盾在 win11 26100 之后不再起作用,需要隐藏驱动建议用后面的模式 4、5、6。
if dm.GetOsType() < 7 then
    // win10 (之前)
    dm.DmGuard 1,"dhide"
else
    // win10 (之后)
    dm.DmGuard 1,"pg"
    dm.DmGuard 1,"dhide"
end if


// 关闭隐藏,让驱动不隐藏
dm.DmGuard 0,"dhide"

等等

另外,dhide 的默认隐藏方式是可以让驱动支持 seh 的。如果发现 dhide 后驱动还是能被检测到,那么就可以考虑使用不带 seh;但是不带 seh 某些驱动功能很可能会导致蓝屏,具体是哪些驱动我也没仔细测试,可以自行测试。

不带 seh 的方式如下:

dm.DmGuardParams "dhide_noseh","",""
然后调用dhide
dm.DmGuard 1,"dhide"
即可.

11DmGuard · hx 盾依赖于 v2 盾

利用硬件调试寄存器来挂钩函数。此盾用于 ring3 无痕 hook。依赖于 v2 盾。一般来说此盾用处不大,毕竟只能全局 HOOK 4 个钩子,并且很容易检测,一般都可以用 hk 盾来代替。

此盾最多安装 4 个钩子。用法如下:

设置钩子
hx set index pid hookaddr jmpaddr

卸载钩子
hx cls index
  • index 取值为 0-3。
  • pid 为进程 pid,10 进制。
  • hookaddr 为你需要安装的钩子地址,16 进制。
  • jmpaddr 为执行到 hookaddr 时,需要跳转的地址,16 进制。

比如:

dm.DmGuard 1,"hx set 0 1024 76f57e60 222fc0"

dm.DmGuard 1,"hx cls 0"

注:上面的 1024 是我随便写的 pid,实际使用必须换成真实的 pid。

12DmGuard · mr 盾

特殊方法分配可执行内存。

开启盾:

dm.DmGuard 1,"mr"

分配内存:

addr = dm.DmGuardParams("mr","alloc","pid size")

其中 pid 为进程 pid,为 10 进制;size 为大小,也是 10 进制。返回值 addr 为字符串,是用 16 进制表示的地址。如果失败返回空串。

释放内存:

dm_ret = dm.DmGuardParams("mr","free","pid addr")

其中 pid 为进程 pid,为 10 进制;addr 为 16 进制地址字符串。成功返回 "ok",否则返回空串。

例:

hwnd = dm.GetMousePointWindow()
pid = dm.GetWindowProcessId(hwnd)

addr = dm.DmGuardParams("mr","alloc",cstr(pid) & " 4096")
if len(addr) > 0 then
	dm.AsmClear
	dm.AsmAdd "mov eax,100"
	dm_ret = dm.AsmCallEx(hwnd,6,addr)
	TracePrint dm_ret
	dm_ret = dm.DmGuardParams("mr","free",cstr(pid) & " " & addr)
end if

13DmGuard · pd 盾

此功能和 hd 功能一致。但是 pd 不依赖于 vv,但是必须过 pg。另外 pd 无法虚拟 cpuid。pd 的效果也没有 hd 的效果好。

用法和 hd 一致,把 hd 更改为 pd 即可。比如:

// 过pg
dm.DmGuard 1,"pg"

// 开启pd盾
dm.DmGuard 1,"pd"

// 清空虚拟化
dm.DmGuard 1,"pd cls"

// 以下的功能是给pd单独增加的. hd上并不存在
// 关闭wmi的虚拟. (默认是开启的) .当有些时候默认开启此功能,可能会蓝屏. 可以考虑关闭
dm.DmGuard 1,"pd disable_wmi"

14DmGuardParams · mode 设置

用来变更驱动的通信方式,可以让驱动更加隐蔽。默认是模式 0,也就是之前的模式。现在支持模式 1、2、3、4、5、6。

模式 1 · 强力隐藏驱动
无需调用 dhide,也无需过 pg。但是由于隐藏的太彻底,会让驱动的 seh 失效,某些盾会蓝屏(比如 memory2),block 盾无法使用。
dm_ret = dm.DmGuardParams("dmguard","mode","1")
模式 2 · 指定通信驱动
同模式 1,但是可以自己指定用来通信的驱动,也就是狸猫换太子,用你指定的驱动来进行通讯。
dm_ret = dm.DmGuardParams("dmguard","mode","2 驱动对象名 驱动设备名")
比如:
dm_ret = dm.DmGuardParams("dmguard","mode","2 PEAUTH PEAuth") //这个其实是模式1里使用的驱动,最好别用这个
dm_ret = dm.DmGuardParams("dmguard","mode","2 Null NUL") //这个其实是模式1里使用的驱动,最好别用这个
dm_ret = dm.DmGuardParams("dmguard","mode","2 nsiproxy Nsi")
等等
模式 3 · 强力隐藏驱动
无需调用 dhide,也无需过 pg。但是由于隐藏的太彻底,会让驱动的 seh 失效,某些盾会蓝屏(比如 memory2),block 盾无法使用。
dm_ret = dm.DmGuardParams("dmguard","mode","3")
驱动对象名和驱动设备名,如果不懂的人可以通过 WinObj 来查看。具体查看方法如下:用管理员方式打开 WinObj.exe,然后点击左边的 Driver,右边列出的就是系统里所有的驱动对象名,找到你自己的驱动的对象名(比如这里我选择 PEAUTH);然后点击左边的 GLOBAL??,查看右边 Type 为 SymbolicLink 类型的,找到你的驱动的设备名(比如我这里选择的是 PEAuth)。
注意的是,这里的对象名和设备名必须是同一个驱动的。如果能有自己的驱动最好,如果没有用系统里的也可以,但有些可能会有冲突,需要自己测试。大小写是敏感的,不要写错了。
模式 4 · 使用自编译驱动
强力隐藏驱动(无需调用 dhide,也无需过 pg)。但是由于隐藏的太彻底,会让驱动的 seh 失效,某些盾会蓝屏(比如 memory2),block 盾无法使用。
dm_ret = dm.DmGuardParams("dmguard","mode","4 驱动设备名 <自己编译的驱动全路径> 注册表服务名 注册表驱动名")
定制后,提供的 HelloWorld 就是用来给模式 4 通讯的驱动。HelloWorld 这个驱动需要自己编译、自己 vmp、自己修改驱动设备名,甚至自己修改代码,可以有效避免特征检测。有条件的最好是每个机器一个驱动,每个机器一个设备名。
注册表服务名和注册表驱动名,是在驱动加载前需要往注册表写入的一些信息。这个信息也可能会被检测,所以这里也留出来给修改。这 2 个信息不能有中文、不能有空格。这 2 个信息可以不同,但最好相同。
比如 HelloWorld 编译出的驱动是 HelloWorld.sys,vmp 后的名字是 HelloWorld.vmp.sys,驱动设备名在 common.h 里的 #define NAME L"HelloWorld" 没有被改变。那么通信模式 4 的写法如下(假设 HelloWorld.vmp.sys 拷贝到了 C 盘根目录,注册表服务名和注册表驱动名我就随便写了):
dm_ret = dm.DmGuardParams("dmguard","mode","4 HelloWorld <c:\HelloWorld.vmp.sys> s3000 s3000")
模式 4 加载后,是不会删除驱动程序的。如果你要在加载后删除驱动程序,可以在加载后使用 del 盾来删除,比如:
dm.DmGuard "del <c:\HelloWorld.vmp.sys>"
模式 4 的意思是用你自己编译、加壳、改设备的驱动来加载我的驱动。加载后,我的驱动是完全隐藏的,但是你用来加载的这个 HelloWorld 驱动是不隐藏的,这点要特别注意。所以你自己编写的这个 HelloWorld 驱动就是个靶子,一旦你这个驱动被特征,你可以自己重新编译、重新更改特征,而不用重新定制插件了。
模式 5 · 同模式 4
同模式 4,但是效果可能比模式 4 好一些。写法同模式 4 基本一样,只需要修改 4 为 5 即可。但是对 HelloWorld 驱动有额外的处理,记得仔细看 HelloWorld 工程下的读我.txt。
dm_ret = dm.DmGuardParams("dmguard","mode","5 驱动设备名 <自己编译的驱动全路径> 注册表服务名 注册表驱动名")
模式 6 · 推荐使用
同模式 4,但是效果可能比模式 4 好一些。写法同模式 4 基本一样,只需要修改 4 为 6 即可。但是对 HelloWorld 驱动有额外的处理,记得仔细看 HelloWorld 工程下的读我.txt。
模式 6 是通信模式里唯一支持 seh 的,所以效果是最好的,推荐使用。
dm_ret = dm.DmGuardParams("dmguard","mode","6 驱动设备名 <自己编译的驱动全路径> 注册表服务名 注册表驱动名")

注意

  • 这个模式设置必须在最开始,在第一个 DmGuard 或者 DmGuardLoadCustom 之前调用,否则会无法生效。
  • 如果需要中途变更模式,那么必须重启系统。
  • 另外这个通信模式对 h3 盾无效,h3 是单独的一个驱动。
  • 另外驱动会自动隐藏,无需调用 dhide;当然如果你要隐藏 h3,那还是要调用一下 dhide。
  • 另外模式 1、2、3 加载的驱动会无法卸载,也就是 UnLoadDriver 无法使用,必须重启才可以卸载驱动。模式 4、5、6 没有这个限制。
  • 测试发现,通信模式 1、2、3 会在开启 vv、v3、v3_plus、b2、phide、f1 盾后,可能会触发 pg 蓝屏(比较新的 WIN10)。模式 4、5、6 没有这个问题。

15DmGuardParams · hdmodify 设置

这个不需要加载驱动。这个是配合 hd、pd 来随机修改注册表中各种可能用来当机器码的信息,并关闭 wmi 服务。比如:

dm_ret = dm.DmGuardParams("hdmodify","","")

最好在 pd 或者 hd 设定结束后执行一次。每次开机最好都执行一次,因为某些信息开机后会重置。

16SetSimMode 10 和 11

用来配合编译的普通键鼠驱动。

需要先安装普通键鼠驱动(执行普通键鼠目录下的 install.bat 即可,安装前记得给 sys 和 cat 签名),然后调用 SetSimMode 10 或者 SetSimMode 11 即可。

11 比 10 来说防检测可能会更好一些,自己可以测试来使用。

17SetSimMode 20

用来配合编译 HID 键鼠驱动。

需要先安装 HID 键鼠驱动(执行 HID 键鼠目录下的 install.bat 即可,安装前记得给 sys 和 cat 签名),然后调用 SetSimMode 20 即可。

20 是 SetSimMode 系列里效果最好的(防检测),推荐使用。

注意,这个模式仅支持 win10 及其以上的系统,WIN7 / WIN8 均不支持(太老了,代码兼容费劲)。

18v3 和 v3_plus

功能和介绍都同 vv,可以查看上面 vv 的说明。

v3 和 v3_plus 只是性能比 vv 更好,在过虚拟机检测上有区别,其他功能和 vv 完全相同。上面所有要依赖 vv 的功能,都可以用这 2 个盾来代替。

但是要注意,vv、v3 或者 v3_plus,同一时间只能开启一个。如果要更换,那么必须重启或者卸载驱动(如果当前通信模式支持卸载的话)。

v3_plus 是 v3 的加强版本,过虚拟机检测更强,但是副作用很明显,比如声音卡顿、画面卡顿,甚至有些系统还会开启就蓝屏。别来问我,这就是过检测的代价。

19vmware 后台键鼠 · dx.mouse.vmware 和 dx.keypad.vmware

这 2 个参数专门用于 vmware 的后台键鼠(目前我仅在 vmware 16.1.0 上测试通过,其他版本如果发现不行,可以联系我解决)。

使用这 2 个参数时,有几个必要条件:

  1. 要求目标窗口必须是 vmware 的 64 位窗口,类名是 MKSEmbedded。
  2. vmware 的 首选项 → 输入 → 单击鼠标时抓取键盘和鼠标,这个必须打勾。为游戏优化鼠标必须选自动或者从不,最好选从不;选始终会让鼠标移动变成相对移动,导致无法后台。
  3. 绑定前,必须先激活目标窗口,并且目标虚拟机那个子窗口必须获取到输入焦点。如果在绑定过程中窗口不处于激活状态,可能会导致后台鼠标失效(这个时候可以手动点一下目标窗口,或者重新绑定)。
  4. 如果使用的是 vmware workstation,那么在绑定后,千万不能切换 tab,也不能打开别的虚拟机,否则会让绑定的窗口改变,从而导致后台失效。
  5. 要求目标虚拟机,也就是 vmware-vmx.exe 不能是那种加壳的。加壳的可能会导致我无法定位到特征,从而导致绑定失败 -46(常见于一些 3 方修改的定制 vmware)。
  6. 目标虚拟机必须以管理员的方式运行。
  7. 目标窗口不可以最小化(会导致鼠标移动无效)。

使用这 2 个参数进行多开操作时,必须使用 vmplayer 来进行多开,上面的 d 讲了原因,如果使用 vmware workstation 多开,无法切换 tab。

如果是用了定制的 vmware 导致 -46,那么你得提供原版没修改的 vmware-vmx.exe 来给我分析。如果分析后还是无法解决,那就没办法,得自己找定制 vmware 的作者。

绑定的例子

hwnd = dm.GetMousePointWindow()
dm.SetWindowState hwnd,12
dm.SetWindowState hwnd,15
delay 1000
dm_ret = dm.BindWindowEx(hwnd,"dx.graphic.3d.10plus","dx.mouse.vmware|dx.mouse.input.lock.api|dx.mouse.position.lock.api","dx.keypad.vmware","dx.public.inject.c|dx.public.graphic.speed",101)
dm.LockInput 1

然后就可以正常进行后台操作了。

如果绑定失败,GetLastError 的错误码是 -46,那么就是 vmware 的版本不兼容,可以联系我来解决。

如果你是用绑定测试工具,如果要实现绑定前激活窗口,可以加 dx.public.active.message 来实现。当然这个参数实际是不需要的,只是为了方便激活而已。

键盘参数里只有 dx.keypad.vmware;鼠标参数里不能有 dx.mouse.position.lock.message 和 dx.mouse.state.message 这 2 个参数。

由于 vmware 的后台特殊性,EnableBind、GetCursorShape、GetCursorShapeEx、HackSpeed 等接口都无法使用,SendString 等接口更是不能使用。所有的操作只有图色操作和键鼠,其他操作一律无效。

没有找到匹配的内容,换个关键词试试。

【大漠插件注册示例】

易语言 下载地址

易语言(中文模块版):下载地址

C++ 下载地址

TC 下载地址

按键精灵 下载地址

计费方法说明
  1. 1本注册码不绑定机器
  2. 2每天每台机器(电脑)扣费 1 天(虚拟机也算)。不管你在同一台电脑注册多少次也只算一天。
  3. 3编译的成品软件发给别人使用也会纳入计算
  4. 4不使用不计算,这一个月没用完,下个月继续用,直至天数使用完结为止。
举例:以 5 元 30 天的注册码为例,如果你有 30 台机器使用这个注册码,那么你一天就用完了。如果你只有一台机使用这个注册码,那你是可以用 30 天(一个月)的。
查询与充值
消费查询结果 0 条

请输入附加码后点击「查询」查看消费记录