就是给自己开发的程序,增加限制使用条件。 比如限制只能在 15 天内使用。
工具可以生成一个库,自己的程序可以快速集成进去。 然后也有 GUI 工具可以生成不可篡改的 License 文件,跟程序配套提供。
![]() |
1
13240284671 2 天前
什么语言都可以用吗?
|
2
vagranth OP 生成的库肯定是 c abi 接口,否则无法具备安全性
|
3
vagranth OP 而且还得是静态链接,否则很容易被替换
|
4
samhjn 2 天前 via iPhone
VMprotect 一类的加壳工具了解一下(
|
5
zepc007 2 天前
不是有加密狗之类的玩意吗
|
7
vagranth OP |
![]() |
8
cheneydog 2 天前
只能针对 c 和 c++ 之类的将库编译进去的吧。
java python 之类的是不是用不了。 |
9
vagranth OP @cheneydog
java 有 jni ,python 有 python bindings ,都可以引入 c 库。 但这两者都是只支持动态库的。 本质上,能提供出来的库是一个用于验证和读取 license 的库。 从技术角度上来说,可以直接做成动态库;但是从安全角度上来说,动态库很容易被替换。 所以,如果允许 java 或 python 直接调用验证和读取 license 的接口,也就是把库直接做成动态库,意义不大。 最好是把一部分核心功能封装在 java/python 的动态库中,隔开一层。 |
10
dextercai 2 天前
这个需求倒是有很成熟的商业产品,Thales 家的 Sentinel LDK 系列。只是 Software Licence 的功能用起来比较贵。
我觉得难点应该主要在防逆向这块,需要大量的投入。 |
11
vagranth OP @dextercai
sentinel 的话我只知道他们家的加密狗,硬件的话,存几 kb 的数据要一两百块的设备。 我对逆向了解较少,从我的认知,完全防逆向是不可能的,但这样至少可以让逆向成本变的高一点。 |
12
bigtear 2 天前
Python 有 pyarmor ,体验还行
|
![]() |
13
lqw3030 2 天前
CodeMeter 看下满足吗
|
15
murmurkerman 2 天前
只防君子不防小人哈哈哈。市面上一大把破解软件,什么 adobe ,office 都可以使用离线 license key 激活。只要定价不是太离谱,直接用账号系统、商店订阅比较合适。
|
17
vagranth OP |
19
dextercai 2 天前 ![]() @vagranth 逆向和保护就是矛和盾的关系,成本愿意投入的话肯定是有结果的。Sentinel 的软锁产品不需要硬件,但是卖的非常贵,应该有一些行业经验的加成在里面。放眼行业,国内这部分倒是挺空白的。
|
20
iX8NEGGn 2 天前 via iPhone ![]() 这个自己实现并不难,开源的也有很多,不想处理的是服务端,也就是本机发送激活码和机器码到服务端换许可证文件,因为要用一台机器来跑,如果软件收入不好可能都不够服务器费用,还有就是支付收款问题也不想处理,如果有能提供这两项功能且根据软件收入分成的平台,我倒是挺乐意用。
|
21
vagranth OP @iX8NEGGn 开源的有哪些呢?
如果 license 文件让服务端生成,需要服务器所有者掌控你的私钥。换句话说,他可以不经你允许生成 license ,你不担心这一点吗? |
22
iX8NEGGn 2 天前
最近我也刚好整理这方面的内容,开源的太多了,就不列举了,Github 搜一下 License 、Copyright protection 。
对于私钥问题,首先大公司或者说营收高的软件根本不会是潜在客户,那些低营收的客户可能不那么关注这个问题,信任问题只能靠运营时间和客户数量来体现。 还有如果不使用联网校验,我卖出去一个激活码,用户分享到网上了怎么办,我想知道是如何做到一个激活码只激活一台机器的。 其次,提供的 SDK 无论做到如何复杂,破解者其实并不需要破解 SDK 的逻辑,而是破解调用 SDK 判断是否验证通过的那段程序代码,所以 SDK 上做到很安全,对程序本身而言,安全性也没有提升,安全性要从程序整体入手。 总结就是应该没什么市场,所以没赚到钱之前,我打算跑一个服务在 CF Work 可能更划算。 |
24
iX8NEGGn 2 天前
你再仔细想想,不联网的话不行呀,绑不上硬件的。
发给用户的是激活码,而不是 License ,激活码和机器是没有关系的,可以用这个激活码来激活任何机器,激活后的 License 才和硬件绑定。 要么就是买激活码的时候先让用户运行一下软件,软件显示机器码,用户复制机器码到网站,然后生成和机器绑定的 License 让用户下载,但这其实就是“变相联网”。 |
![]() |
25
my3157 2 天前
其实这个问题的本质是如何获取能代表硬件的唯一的标识符以及如何避免伪造, 反而加密/签名之类的在其次, 最简单的一个支持 seed 的 hash 算法就能搞定
联网的情况下这个问题变得比较简单, 是因为可以观察到时候有同一个 id 的 license 是否在同时使用, 比如软件周期性上报 license id, 然后根据时间判断 离线的情况下, 只能获取一些硬件信息, 比如一般将各种硬件如硬盘, 网卡, CPU 和内存等信息综合在一起作为标识符, 但是也很难避免比如 vm clone 之类的方法 |
![]() |
26
IvanLi127 2 天前
不做成壳的一部分,那还得另外加壳,不然就是君子锁呐?
|
27
openmynet 1 天前
jwt
|
![]() |
28
ChaosesIb 1 天前
可以看下 HAP 网络验证: https://16hex.cc/ ,支持函数混淆、虚拟化、授权锁、调试器和虚拟机检测,支持一键加固和 C/C++/Rust/易语言/驱动源码接入,售前群 976012709
|
30
dearmymy 1 天前
这些功能 vmp 都有啊,我突然想起来我还买过正版 vmp 。。
你个人写这些东西基本都算玩具,破解分分钟的。 vmp 记得可以显示启动次数,机器数量,时间等,还能加壳,加密。 |
31
vagranth OP 明白了,上面各位说的似乎都偏向于在线激活场景。大家说的都很有道理。
站在开发者的角度,各位考虑的,最终用户使用的应用,以联网应用为主,特别是 web 应用,所以才需要函数混淆,防静态分析等等这些特性。 我说的场景,适用于最终用户使用离线应用,看起来这个场景还是比较窄。 |
![]() |
32
encro 1 天前
你自己都说了,所以我能想到的办法就是:
生成一个指定过期时间的 license ,应用程序启动时检查 license 。 |
33
ming159 1 天前
应用场景不窄! 如果你向客户推销软件,希望他们试用体验一段时间.后续再选择付费的话.这个功能就是必须的了. 现在离线软件比较多的我知道的应该是工业领域的软件了. 基本都是单机版
|
34
ming159 1 天前
另外还真有这种工具: Rockey4ND https://www.rockey.com.my/portfolio-items/rockey4nd/
|
![]() |
36
j4fun 1 天前
你这个难度可以参考 steam 游戏不被破解的难度。。。
|
![]() |
37
lucybenz 1 天前 ![]() 这玩意儿最不适合的就是通用方案,通用方案体量大了 破解的的动力就更强
|