V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
vagranth
V2EX  ›  奇思妙想

有没有人需要一个快速给自己程序加锁的工具?

  •  
  •   vagranth · 32 天前 · 3142 次点击
    这是一个创建于 32 天前的主题,其中的信息可能已经有所发展或是发生改变。

    就是给自己开发的程序,增加限制使用条件。 比如限制只能在 15 天内使用。

    工具可以生成一个库,自己的程序可以快速集成进去。 然后也有 GUI 工具可以生成不可篡改的 License 文件,跟程序配套提供。

    第 1 条附言  ·  32 天前
    再说的完整一些吧。主要是验证一下这个想法是否有人认可,原理不复杂,技术上是不存在问题的。

    所谓的程序加锁,或者 license ,本质问题都是一样的。
    软件在最终用户的机器上运行时,需要确认自己“是否可以运行”。
    这就依赖一些条件检查,比如联网什么的。
    但有一些场景,最终用户是不需要联网的,这种情况下,需要一个 license 文件,描述用户的软件“是否可以运行”。
    然后软件运行时,需要读取并验证这个 license 文件,然后根据其验证后的内容,决定自己“是否可以运行”。
    另外,这个 license 文件的生成,应该由开发者完全掌控。

    那么,对于软件开发者而言,这个 license 文件的读取、验证和生成,应该说算是一笔不大不小的工作。
    主要是涉及一些加解密、签名和验签的工作。

    我的想法是,做一个工具,让软件开发者能够方便的完成“license 文件的读取、验证和生成”工作。
    38 条回复    2025-03-04 10:36:44 +08:00
    13240284671
        1
    13240284671  
       32 天前
    什么语言都可以用吗?
    vagranth
        2
    vagranth  
    OP
       32 天前
    生成的库肯定是 c abi 接口,否则无法具备安全性
    vagranth
        3
    vagranth  
    OP
       32 天前
    而且还得是静态链接,否则很容易被替换
    samhjn
        4
    samhjn  
       32 天前 via iPhone
    VMprotect 一类的加壳工具了解一下(
    zepc007
        5
    zepc007  
       32 天前
    不是有加密狗之类的玩意吗
    vagranth
        6
    vagranth  
    OP
       32 天前
    @samhjn 还是不太一样,那是个更复杂的东西
    vagranth
        7
    vagranth  
    OP
       32 天前
    @zepc007 加密狗本质上只是对少量数据进行加密存储
    这个想法,准确的描述是:
    将软件 license 管控功能封装到库中,方便开发者在自己的软件中,增加 license 管控
    cheneydog
        8
    cheneydog  
       32 天前
    只能针对 c 和 c++ 之类的将库编译进去的吧。
    java python 之类的是不是用不了。
    vagranth
        9
    vagranth  
    OP
       32 天前
    @cheneydog

    java 有 jni ,python 有 python bindings ,都可以引入 c 库。
    但这两者都是只支持动态库的。

    本质上,能提供出来的库是一个用于验证和读取 license 的库。
    从技术角度上来说,可以直接做成动态库;但是从安全角度上来说,动态库很容易被替换。

    所以,如果允许 java 或 python 直接调用验证和读取 license 的接口,也就是把库直接做成动态库,意义不大。
    最好是把一部分核心功能封装在 java/python 的动态库中,隔开一层。
    dextercai
        10
    dextercai  
       32 天前   ❤️ 1
    这个需求倒是有很成熟的商业产品,Thales 家的 Sentinel LDK 系列。只是 Software Licence 的功能用起来比较贵。

    我觉得难点应该主要在防逆向这块,需要大量的投入。
    vagranth
        11
    vagranth  
    OP
       32 天前
    @dextercai

    sentinel 的话我只知道他们家的加密狗,硬件的话,存几 kb 的数据要一两百块的设备。

    我对逆向了解较少,从我的认知,完全防逆向是不可能的,但这样至少可以让逆向成本变的高一点。
    bigtear
        12
    bigtear  
       32 天前
    Python 有 pyarmor ,体验还行
    lqw3030
        13
    lqw3030  
       32 天前
    CodeMeter 看下满足吗
    vagranth
        14
    vagranth  
    OP
       32 天前
    @bigtear 这个是代码混淆,不是一类东西。
    murmurkerman
        15
    murmurkerman  
       32 天前
    只防君子不防小人哈哈哈。市面上一大把破解软件,什么 adobe ,office 都可以使用离线 license key 激活。只要定价不是太离谱,直接用账号系统、商店订阅比较合适。
    vagranth
        16
    vagranth  
    OP
       32 天前
    @lqw3030 看起来应该有点类似 codemeter 。
    vagranth
        17
    vagranth  
    OP
       32 天前
    @murmurkerman
    嗯,流行软件被破解基本是无法避免的事。但这类工具多少可以加强一些控制。
    想看看,这类工具或服务在开发者中是否有市场。
    vagranth
        18
    vagranth  
    OP
       32 天前
    @lqw3030 codemeter 是软硬件结合的方案,其实它对标应该是 sentinel 那一套吧。
    我提的这个只是个轻量的软件的数据加解密方案。
    dextercai
        19
    dextercai  
       32 天前   ❤️ 1
    @vagranth 逆向和保护就是矛和盾的关系,成本愿意投入的话肯定是有结果的。Sentinel 的软锁产品不需要硬件,但是卖的非常贵,应该有一些行业经验的加成在里面。放眼行业,国内这部分倒是挺空白的。
    iX8NEGGn
        20
    iX8NEGGn  
       32 天前 via iPhone   ❤️ 1
    这个自己实现并不难,开源的也有很多,不想处理的是服务端,也就是本机发送激活码和机器码到服务端换许可证文件,因为要用一台机器来跑,如果软件收入不好可能都不够服务器费用,还有就是支付收款问题也不想处理,如果有能提供这两项功能且根据软件收入分成的平台,我倒是挺乐意用。
    vagranth
        21
    vagranth  
    OP
       32 天前 via Android
    @iX8NEGGn 开源的有哪些呢?
    如果 license 文件让服务端生成,需要服务器所有者掌控你的私钥。换句话说,他可以不经你允许生成 license ,你不担心这一点吗?
    iX8NEGGn
        22
    iX8NEGGn  
       32 天前
    最近我也刚好整理这方面的内容,开源的太多了,就不列举了,Github 搜一下 License 、Copyright protection 。

    对于私钥问题,首先大公司或者说营收高的软件根本不会是潜在客户,那些低营收的客户可能不那么关注这个问题,信任问题只能靠运营时间和客户数量来体现。

    还有如果不使用联网校验,我卖出去一个激活码,用户分享到网上了怎么办,我想知道是如何做到一个激活码只激活一台机器的。

    其次,提供的 SDK 无论做到如何复杂,破解者其实并不需要破解 SDK 的逻辑,而是破解调用 SDK 判断是否验证通过的那段程序代码,所以 SDK 上做到很安全,对程序本身而言,安全性也没有提升,安全性要从程序整体入手。

    总结就是应该没什么市场,所以没赚到钱之前,我打算跑一个服务在 CF Work 可能更划算。
    vagranth
        23
    vagranth  
    OP
       32 天前 via Android
    @iX8NEGGn license 可以跟硬件 id 绑定,比如 cpu 或硬盘。
    安全性问题你说的对,必须从程序整体考虑
    iX8NEGGn
        24
    iX8NEGGn  
       32 天前
    你再仔细想想,不联网的话不行呀,绑不上硬件的。

    发给用户的是激活码,而不是 License ,激活码和机器是没有关系的,可以用这个激活码来激活任何机器,激活后的 License 才和硬件绑定。

    要么就是买激活码的时候先让用户运行一下软件,软件显示机器码,用户复制机器码到网站,然后生成和机器绑定的 License 让用户下载,但这其实就是“变相联网”。
    my3157
        25
    my3157  
       32 天前
    其实这个问题的本质是如何获取能代表硬件的唯一的标识符以及如何避免伪造, 反而加密/签名之类的在其次, 最简单的一个支持 seed 的 hash 算法就能搞定

    联网的情况下这个问题变得比较简单, 是因为可以观察到时候有同一个 id 的 license 是否在同时使用, 比如软件周期性上报 license id, 然后根据时间判断

    离线的情况下, 只能获取一些硬件信息, 比如一般将各种硬件如硬盘, 网卡, CPU 和内存等信息综合在一起作为标识符, 但是也很难避免比如 vm clone 之类的方法
    IvanLi127
        26
    IvanLi127  
       32 天前
    不做成壳的一部分,那还得另外加壳,不然就是君子锁呐?
    openmynet
        27
    openmynet  
       32 天前
    jwt
    ChaosesIb
        28
    ChaosesIb  
       32 天前
    可以看下 HAP 网络验证: https://16hex.cc/ ,支持函数混淆、虚拟化、授权锁、调试器和虚拟机检测,支持一键加固和 C/C++/Rust/易语言/驱动源码接入,售前群 976012709
    weize888
        29
    weize888  
       31 天前 via iPhone
    dearmymy
        30
    dearmymy  
       31 天前
    这些功能 vmp 都有啊,我突然想起来我还买过正版 vmp 。。
    你个人写这些东西基本都算玩具,破解分分钟的。
    vmp 记得可以显示启动次数,机器数量,时间等,还能加壳,加密。
    vagranth
        31
    vagranth  
    OP
       31 天前
    明白了,上面各位说的似乎都偏向于在线激活场景。大家说的都很有道理。
    站在开发者的角度,各位考虑的,最终用户使用的应用,以联网应用为主,特别是 web 应用,所以才需要函数混淆,防静态分析等等这些特性。
    我说的场景,适用于最终用户使用离线应用,看起来这个场景还是比较窄。
    encro
        32
    encro  
       31 天前
    你自己都说了,所以我能想到的办法就是:

    生成一个指定过期时间的 license ,应用程序启动时检查 license 。
    ming159
        33
    ming159  
       31 天前
    应用场景不窄! 如果你向客户推销软件,希望他们试用体验一段时间.后续再选择付费的话.这个功能就是必须的了. 现在离线软件比较多的我知道的应该是工业领域的软件了. 基本都是单机版
    ming159
        34
    ming159  
       31 天前
    另外还真有这种工具: Rockey4ND https://www.rockey.com.my/portfolio-items/rockey4nd/
    dearmymy
        35
    dearmymy  
       31 天前
    @vagranth 跟你说了 vmp 就有你想到所有功能。我估计各大商业加壳软件都有相关解决方案。
    j4fun
        36
    j4fun  
       31 天前
    你这个难度可以参考 steam 游戏不被破解的难度。。。
    lucybenz
        37
    lucybenz  
       31 天前   ❤️ 1
    这玩意儿最不适合的就是通用方案,通用方案体量大了 破解的的动力就更强
    vagranth
        38
    vagranth  
    OP
       27 天前
    我做了一个简单的 demo 。
    https://github.com/CliffHan/LightWeightSoftLock/blob/main/README_zh.md

    目前主要是验证这个需求是不是真的存在。如果确实能帮到别人的话,我会进一步完善。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   967 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 20:02 · PVG 04:02 · LAX 13:02 · JFK 16:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.