从定位上来看,Obsidium属于Windows应用的软件保护和授权工具,32位以及64位的Windows程序都能用它,平时常见的EXE、DLL、SCR文件,还有.NET Framework 4.x可执行文件也都能用它来保护;而且被保护的程序还要适应DEP、UAC、ASLR这些系统安全机制。所以说,大家在用压缩保护的时候,不能光盯着“文件体积变小了没有”这一件事,还得看看程序能不能正常启动、依赖能不能加载、授权能不能校验,以及安全软件会不会拦截。
一、Obsidium压缩保护怎么设置
一般来说,压缩保护比较适合在正式发布程序前开启,作者不建议大家一上来就把代码虚拟化、字符串加密、反调试、硬件锁定这些功能全都堆在一起。比较稳妥的办法是,大家先让程序在没有压缩的状态下做一次基础保护测试,然后再把压缩功能单独打开。
1、准备原始程序和依赖文件
在开启功能之前,大家要先留一份没有被保护过的原始EXE或者DLL,而且要在本机和测试机上都试一下,确认程序能正常启动。大家千万不要拿那些已经被别的壳、安装包工具或者压缩工具处理过的文件来重复保护,要不然以后要是遇到了启动异常,大家很难看出来问题到底出在哪里。
2、导入需要保护的程序
大家把Obsidium软件打开以后,要把目标EXE或者DLL文件放进保护项目里。这个时候,大家一般要先确认好程序的类型、位数、入口位置、依赖库还有运行目录,看看这些地方有没有问题。如果大家处理的是.NET程序,那还要额外注意目标框架的版本,还有程序的加载方式,省得保护完了以后运行环境变得不一致。
3、开启【Settings】中的压缩选项
大家进到保护设置的界面以后,要在【Settings】相关的区域里找到【Compression】或者写着压缩的选项,然后把它勾选上。从一些资料里也能看到,Obsidium的Settings区域就是用来放基础保护配置的,这里面就包含了Compression、Debugger Checks这些保护项目。
压缩保护这个功能,主要作用就是帮大家把发布文件的体积减小一点,顺便让程序的结构不那么直接地暴露在外。这个功能并不是用来代替授权系统、反调试或者代码虚拟化的,所以大家千万不要觉得“只要开了压缩就万无一失、能完美防破解了”。
二、压缩保护后为什么会启动异常
被压缩过的可执行文件在启动的时候,其实需要自己先完成解压和初始化的工作,然后才会进到原本的程序逻辑里去。这种可执行压缩,通常是把压缩后的数据和用来解压的代码全放在同一个程序文件里,等运行的时候再把原本的代码恢复出来并继续执行。这个过程对于用户来说,虽然平时是看不出来的,但它确实把程序启动前几步的表现给改变了。
1、入口位置或初始化逻辑不兼容
有部分的程序在刚启动的时候,就会去读取它自己的文件,去检查文件的大小,或者去计算哈希值,又或者是依赖于固定的入口特征。可是一旦用了压缩保护,文件的结构就被改变了,这就导致这类自带的校验逻辑可能会误以为程序被别人修改过了,于是程序就直接退出了,或者直接报错了。
2、依赖文件没有随程序一起发布
有些程序之所以在开发用的电脑上能启动,只是因为那台系统里本来就装好了运行库、插件、配置目录或者DLL。等换到了测试用的电脑上,虽然压缩保护后的文件本身没毛病,但是因为外面需要的依赖文件没有带过去,程序就会表现得启动失败、直接闪退,或者提示模块加载失败。
3、安全软件拦截或隔离
压缩壳和保护壳这类东西,很容易就把安全软件的启发式检测给触发了,这倒不一定代表大家的程序真的有毒,但安全软件会把文件给拦截掉、删掉,或者不让它往临时目录里写东西,这样程序就会出现启动异常。特别是那些没有签名的程序,或者是下载次数很少的新版本程序,更容易碰到这种倒霉情况。
三、Obsidium压缩保护后启动异常怎么处理
大家在排查问题的时候,千万不要盲目地去反复调整所有的保护项目,这样只会让自己越查越乱。比较稳妥的做法是,大家按照“原始程序—只开压缩—一项一项叠加保护”的顺序来处理。
1、先确认原始程序能否正常启动
大家先用没有被保护过的文件,在同一台测试机上运行一下看看。要是发现连原始程序也启动失败了,那大家就得先去处理运行库、配置文件、数据库连接、权限、路径这些最基础的问题,先别去怀疑是不是Obsidium的配置配错了。
2、只保留压缩保护重新生成
大家可以把代码虚拟化、字符串加密、反调试、硬件锁定、授权校验这些功能先全都关掉,只把【Compression】这一个选项打开,然后重新生成一次。
要是这个版本能顺利启动,那就说明压缩功能本身大概率是没问题的;要是这时候还是异常,那大家就要重点去检查程序的入口、自带的校验、依赖的加载,还有安全软件有没有在暗中拦截。
3、检查是否存在自校验逻辑
要是程序在启动的时候非要检查自己EXE的大小、MD5、签名状态或者资源区的内容,那么在压缩保护之后,这些数值通常都会发生变动。这时候,大家可以试着把这种自带的校验逻辑先临时关掉,或者把校验的逻辑改一改,让它能接受保护后的文件状态。
4、补齐运行库和外部DLL
大家要结合程序自己生成的日志、Windows事件查看器,或者用Dependency Walker这类工具,去好好查查到底漏了哪些DLL和运行库。大家不能光看着主程序所在的那个目录,还要去看看插件目录、语言包目录、配置目录和授权文件目录。很多时候所谓的“压缩后打不开”,大家查到最后就会发现,其实只是发布包里漏掉了某些文件而已。
总结
总的来看,Obsidium压缩保护的设置其实并不算复杂,核心的步骤无非就是在保护配置里把压缩选项勾上,然后把受保护的文件生成出来。当遇到了压缩保护后启动异常的情况,大家也不要只盯着Obsidium软件本身,还要多去检查检查自带的校验逻辑、依赖的文件、运行的权限、安全软件的拦截,以及多个保护项重叠带来的问题。如果大家按照这个思路去解决,那么Obsidium压缩保护怎么设置、Obsidium压缩保护后启动异常怎么处理这两个麻烦事,基本上就能被拆开来搞清楚了,不至于混成一团越查越糊涂。