WinLicense使用过程中踩过的坑
之前为了给软件做授权加密,试用了各种加密库,最终选择了WinLicense,花了几千大洋购买版权。经过一段时间使用之后不得不放弃原先的授权机制,最终采用C/S架构及微服务形式的授权机制。然后为了把加密代码删除干净,几十万行代码的清理和测试又花我了一个月的时间。真应了那句话“人生苦短慎用加密!”
放弃的主要原因
- 当使用加密库之后,整个Release版的文件大小翻了近5倍,视加密强度而有所区别。
- 加密后DLL加载真的很慢,慢到难以忍受的地步。DLL运行时它要先加载虚拟机以接管后续操作,从而造成低效,这导至我对虚拟机存在的必要性产生了怀凝。
- 当你使用加密库后你还得考虑加密库本身的反破解手段、使用机制、关键注意点。这加重了软件开发工作量,拖慢了开发进度。
- 由于WinLicense的开发商是国外的,导致沟通起来真的很麻烦,超级低效。如果你一定要用加密库,选国内的吧。
- 开发商的服务器邮箱会设置一些屏蔽功能,导致加密过的代码副本传不上去,还得绕道GitHub来上传代码。
- 即便你成功上传代码,可是他们使用的编译器设置可能跟你有所区别,这导致Bug无法重现,问题无解。
- 如果你开发的是某个软件的插件,他们没有相关二次开发SDK和主体软件安装包,也就不会测试你上传的代码。
- 对于英文不好的我来说,翻译沟通文本也是件痛苦的事情。
- 一个Bug提交到回复至少需要2天时间,这中间导致你很多代码编写得暂停。
以下是使用过程中需要要注意和比较坑人的地方
- WinLicense 对 DLL 加壳时,不能选择 Application 选项,会导致 exe 文件在加载 dll 时不成功。
- DLL的入口点不能虚拟化,会否导致宿主软件(exe主体)启动时卡死
- 一个函数内的VM虚拟机宏不能嵌套
- VM 宏不能把 switch 语句包含在内,可以把switch语句改为if else if else if …格式
- 宏内尽量少用循环
- DLL不能压缩App,也不能虚拟化入口点
- 插件类DLL的EntryPoint中不能有虚拟化宏,会导致全局对象加载有问题
- 宏尽量不要放在函数的第一行
- RegIstered 宏中不能包含检测宏,检测宏只能包含在 VM 中
- 如果多个DLL共享一个许可证,则软件的执行次数是每个DLL打开时都记录一次,多个DLL则记录多次。
- 打开试用功能时,DLL加载时可能会卡死,需要测试看看是新版还有没有这个问题
- xBundler中嵌入dll会出错
- SDK中没有手动开启或停止试用/注册的功能,只能通过GUI来开启保护设置
- 软件被保护后体积超大
最后:没有破解不了的软件,一切都只是破解成本和破解收益的问题,放弃过度保护,把精力放在核心业务上,把功能做细做强才是要点。