在软件保护的后期配置阶段,很容易碰到这样的困扰:一旦把保护力度加大,就连正常用户的环境都可能被挡在外面,这时候就涉及两个关键问题,怎样开启Obsidium的虚拟机检测,以及检测出现误判时又该怎么排查,这些都得根据软件实际的使用场景来定,所以搞清楚这两个问题,对平衡保护效果和用户体验非常重要。Obsidium这款工具主要是给Windows应用和游戏做保护用的,它提供了代码保护、授权管理,还能防范调试、内存转储和程序篡改这类行为,虚拟机检测这个功能设计的初衷是阻止克隆环境和批量复制,不过在正式用在所有版本上之前,最好还是先做足测试。
一、Obsidium虚拟机检测怎么开启
要想启用虚拟机检测,得先去保护项目的设置里面找,这个选项通常放在运行环境检查或者反调试相关的区域,不过要注意,不同版本的软件界面名称可能不完全一样,最稳妥的方法是查一下安装包里自带的帮助文档,文档里对各个选项都有说明。另外,Obsidium的下载包已经包含了保护SDK、演示例子和一份详细的说明手册,在动手配置之前,最好先确认自己手里的项目是x86还是x64版本,因为不同架构的配置方式有些区别。
1、先打开保护项目
第一步,自然是先打开Obsidium程序,然后把之前已经创建好的项目文件载入进来,接着仔细核对一下,看看你要保护的那个目标执行文件是不是真的已经在列表里了,这里特别提醒一句,别拿准备正式发布的那个项目直接动手,比较保险的做法是特意复制一份完全一样的项目副本,用这个副本专门来测试虚拟机检测功能的效果。
2、找到虚拟机检测选项
接下来,在项目里面找到保护设置这一块,根据需要去反调试、运行环境检查或者附加保护这些相关的分类里翻找,一个叫Virtual Machine Detection的选项应该就在其中,找到之后把它勾选上或者拨到开启状态,完成这一步后别忘记保存项目,然后重新运行一次保护过程,这样就能得到一个新的、加过保护的测试程序。假如界面上显示的名称不是Virtual Machine Detection,也别慌,直接到帮助文档里面搜索Virtual Machine或者VM Detection这两个关键词,一般都能找到对应的解释。
3、分别测试物理机和虚拟机
保护工作全部结束后,至少得准备两种环境来验证效果:一台正常的物理电脑,还有一个虚拟机搭建的系统。在物理机上,保护后的程序应该能毫无障碍地正常启动;而在虚拟机系统里,它就得按我们设想的那样被拦下来,或者跳出一个受限的提示。很多新手容易犯的错是,只在开发用的那台机器上测一下没毛病就急着发出去,这其实很不保险,因为开发环境往往和普通用户的电脑不一样。
二、Obsidium虚拟机检测误判该怎么排查
出现误判的时候,多数情况并不是程序文件本身出了问题,而是因为用户的电脑里刚好有虚拟化相关的组件,有些用户自己并没有运行虚拟机,可Windows自带的安全功能、开发工具或者公司的终端管理策略,可能悄悄把虚拟化功能打开了,所以排查的重点就得放在系统环境上。
1、先确认误判范围
排查误判的第一步,是要确定这个问题到底影响了哪些机器,你需要把出现误判的那台电脑的详细信息都记下来,像系统版本、硬件具体型号、Obsidium项目的版本,还有保护后生成的那个程序文件的版本,这些一个都别漏。接下来,再找一份根本没有经过任何保护处理的原始程序,在同一台电脑上跑跑看,要是原始程序跑起来一点问题都没有,而一旦换成保护过的马上就出故障,那就可以很有把握地把怀疑重点放到保护配置上面去。
2、检查Windows虚拟化状态
然后,在出状况的那台电脑上,同时按下键盘上的Win键和R键,在弹出的运行框里输入msinfo32并回车,这样就能打开一个叫系统信息的窗口,在这个窗口里面仔细找找,如果出现了“A hypervisor has been detected”这行提示,就说明当前系统里已经有虚拟机监控程序在跑了。根据微软官方资料的说法,Hyper-V跟Memory Integrity、Credential Guard这类功能是互相绑定的,有不少安全机制本来就是靠Hyper-V在底层撑着,所以即使没开虚拟机软件,这些组件也可能让系统表现得像在虚拟机里一样。
3、查看常见虚拟化组件
接着,咱们可以走【控制面板】→【程序和功能】→【启用或关闭Windows功能】这条路,进去之后你会看到一个列表,里面列着许多Windows的可选功能,对着这个列表一项一项地检查,重点看Hyper-V、Virtual Machine Platform、Windows Hypervisor Platform,以及Windows Sandbox这几项是不是打上勾了,特别要注意Windows Sandbox,因为它本身运行起来就需要硬件虚拟化和微软自家的虚拟机监控程序,所以只要勾上它,就相当于向系统宣告了虚拟化环境的存在,检测工具很自然地就可能会把它当作虚拟机来处理。
4、不要随意关闭安全功能
但是,如果误判是发生在公司的办公电脑上,情况就稍微复杂一点,因为像Memory Integrity、Credential Guard,还有其他一些终端安全策略,很可能都是企业IT管理员通过组策略统一推下来的,员工自己并没有权限随便改动。按照微软的指引,看Memory Integrity开没开,可以到【Windows安全中心】→【设备安全性】→【内核隔离详细信息】这个页面确认。当你发现这些安全功能确实是开启的之后,千万别急吼吼地叫用户把它们关掉,万一关出别的安全问题里外不是人,更稳妥的流程是,先跟对方公司的IT部门沟通,确认他们到底有哪些安全方面的硬性要求,然后再据此决定,到底是调整你这边Obsidium的检测策略放宽松一点,还是专门提供一个去掉虚拟机检测的兼容版程序给他。
三、Obsidium虚拟机检测怎么减少误判
虚拟机检测这种功能,更适合根据不同风险等级来分层开启,而不是一上来就默认套用在所有用户身上,因为在很多普通用户的电脑上,开启检测反而是画蛇添足。在发布之前把测试矩阵梳理清楚,后面就能少掉很多跟客户来回解释的工夫,也省得天天排查误判。
1、单独保留兼容配置
一个比较稳妥的办法是,同时保留两个保护项目:一个开了虚拟机检测,另一个关掉这项,作为兼容性配置,这样碰到企业内部网络、开发人员的机器,或者安全策略比较复杂的情况,就可以按授权规则发对应的版本,避免一刀切带来的麻烦。
2、逐项启用保护选项
在进行保护设置的时候,别图省事把虚拟机检测、反调试、完整性检查等一长串运行限制一次性全打开,比较好的习惯是每开启一项,就单独生成一个测试文件,然后分别在普通电脑、公司电脑和虚拟环境里跑一遍,把运行结果记下来,这样万一出了误判,就能很快揪出来是哪个选项惹的祸,修复起来也有明确方向。
3、保留问题记录
每一次误判都要留下记录,包括系统信息的截图、保护项目的版本、受影响的程序文件的哈希值,还有详细的复现步骤,以后要是再冒出同样的问题,就可以对照记录直接判断,到底是Windows虚拟化组件的原因,还是企业安全策略有变化,又或者是保护配置被动过了,这种记录积累多了,排查的效率也能提高不少。
总结
总而言之,搞软件保护不能一根筋地只追求拦截率,真正的好保护是要在确保正常用户不受影响的前提下实现的,用户电脑的环境千差万别,谁也预料不到会碰上什么稀奇古怪的组合。所以,对于Obsidium虚拟机检测开启和误判处理这两个环节,比较合理的做法是:先在测试项目里把检测功能打开,然后分别到物理机和虚拟机上面跑一跑,看看行为是否符合预期;要是真出现了误报误拦的情况,那就需要重点盯着Hyper-V、Windows Sandbox、Memory Integrity还有Credential Guard这几个组件去排查原因。在这里再强调一次,如果你面对的是一台受公司集中管控的电脑,千万不要随随便便就去改动上面的安全配置,最高明也最不会惹麻烦的策略,还是去调整保护项目自身的设置,并且始终保留一份不开启虚拟机检测的备用配置。