V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
txzh007
V2EX  ›  程序员

内网版本应用如何解决授权问题

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

    有一个需求,需要实现内网激活功能,目前使用的是加密机器码和到期时间去进行匹配,但是无法防住修改系统时间去进行延长使用时间,请问大家有什么解决方案

    42 条回复    2024-02-01 10:32:07 +08:00
    wheat0r
        1
    wheat0r  
       88 天前   ❤️ 1
    不懂技术,我知道一般软件企业解决这个问题一般是使用一套法务部门
    nevadax
        2
    nevadax  
       88 天前 via iPhone
    记录起始 timestamp 保存到某个地方,并且将文件加密。程序每过 3600 秒打印当前 timestamp 到文件,然后计算当前每条记录的差值,如果是 3600 秒左右,代表系统时间没有人为修改过,然后计算起始差值,如果差值达到了授权期限就报错。
    kkk9
        3
    kkk9  
       88 天前
    定制一个单片机 usb 加密狗呗,授权和时间都从片上拿,内置干电池保持时钟。
    belite
        4
    belite  
       88 天前   ❤️ 9
    TOTP 倒过来用 把 TOTP 的 6 位验证码公开比如放在你们公司首页上 程序内置 sed 和你们首页用的 sed 一样 程序启动时要求输入 TOTP 验证码 若是通过验证那么他必须把时间调整的和你们服务器时间一致...哈哈哈
    belite
        5
    belite  
       88 天前
    本质上是通过某种途径将第三方可信平台的时间传递至客户端且中途不可更改 没有第三方可信平台或模块是做不到的
    zzNaLOGIC
        6
    zzNaLOGIC  
       88 天前
    其实工业软件很多年之前就一直在用硬件加密狗,类似 U 盘。
    优点是破解周期相对长
    缺点是对于老版本没办法停用,尤其是技术大升级之后,老版本破解之后会损失很多存量用户,人家就不升级一直用老版,除非新版有一些老版本做不到而又刚需的东西才会重复购买。
    有点类似游戏机了。
    starlz
        7
    starlz  
       88 天前
    @nevadax 但是如果时间一直不改回来就防不住了
    githmb
        8
    githmb  
       88 天前
    总所周知,时间是不会倒退的,所以可以把上一次正常工作时间加密保存到注册表里,如果发现时间倒退就摆烂
    Ayanokouji
        9
    Ayanokouji  
       88 天前
    如果有业务数据,也跟着时间存和查?这样即使改时间了,业务数据也错乱了。不知这个思路可行不。
    txzh007
        10
    txzh007  
    OP
       88 天前
    @Ayanokouji 桌面软件 相当于一个启动器,只是启动器需要有特殊的命令才能启动关联应用
    nevadax
        11
    nevadax  
       88 天前 via iPhone
    @starlz 当他修改之后一小时就不能用了,下一次 check 会发现本次时间间隔不是一小时
    qviqvi
        12
    qviqvi  
       88 天前
    开个热点可以吗?
    HitouchiMi
        13
    HitouchiMi  
       88 天前 via Android
    软件上只要不联网,就不可能防住盗版。任何纯软件的反盗版被破解只是时间问题,在这方面死磕没有意义。软件上越复杂的反盗版机制只会让软件用起来越糟糕,而且越来越不稳定。目前比较好的防盗版只有借助难以逆向实现的硬件加密狗来做或者全程联网。与其和盗版磕,不如做好服务。可以联网的软件做好在线服务,不能联网的做好按照合同、授权的支持服务。
    chairuosen
        14
    chairuosen  
       88 天前
    totp 的思路?
    flyqie
        15
    flyqie  
       88 天前 via Android
    @nevadax #2

    要是硬件时钟出问题了呢。。
    nevadax
        16
    nevadax  
       88 天前 via iPhone
    @flyqie 害,这不技术支持费用就来了?[手动狗头]
    nevadax
        17
    nevadax  
       88 天前 via iPhone
    而且,现在的计算机,很少见硬件时钟出问题,如果一台机器用到了 cmos 没电,那估计也该计划报废了。
    kkk9
        18
    kkk9  
       88 天前
    @belite #4 TOTP 看似巧妙,实则治标不治本。只要跟一遍 TOTP ,hook 掉不就过验证了?

    @zzNaLOGIC #6 现在都开始普及内置 esim 物联卡的加密狗了,甚至还能 PLC 配合,关键函数直接放服务器上处理。然后物联卡可以组内网,想 ddcc 服务器也不行,不容易造成损失
    ic3z
        19
    ic3z  
       88 天前 via iPhone
    记录下启动和关闭的时间戳。下次启动时间不对就退出呗
    IvanLi127
        20
    IvanLi127  
       88 天前 via Android
    你这个需求,直接把当前时间写文件就行了。楼上还真搞防破解啊?我感觉真要防应该不会问这个问题...
    starlz
        21
    starlz  
       87 天前
    @nevadax 不,我的意思是在激活之前,甚至是安装之前就把电脑的时间改了,激活之后时间也不改回来
    tangtang369
        22
    tangtang369  
       87 天前
    给你一个不一样的思路,机器码直接用 jwt token ,假设一个 token 有效期是 1 个月,如果授权一年,将 token 自动续签次数设置为 12 次就行。
    cndenis
        23
    cndenis  
       87 天前
    @belite 老兄这个方法很巧妙, 可以再改良一下, 要求在公司网站上输入某种序列号来换取验证码, 还能解决激活问题
    murmur
        24
    murmur  
       87 天前
    解决不了,windows 、adobe ,这些哪个解决了破解问题
    zyxcompany
        25
    zyxcompany  
       87 天前
    每个软件安装后根据电脑信息生成机器码,通过机器码在官网获取授权码,软件与官网的加密方式一致时,校验成功,否则失败
    zyxcompany
        26
    zyxcompany  
       87 天前
    授权时间的话就分两种呗,一次是年授权,一次的永久授权
    zyxcompany
        27
    zyxcompany  
       87 天前
    授权成功后,会记录授权的时间,每次打开软件会记录时间同时校验,如果当前时间<记录的时候 则修改了系统时间,既然有这个条件,就可以提示或者去除授权
    belite
        28
    belite  
       87 天前
    @cndenis 脑洞开了一下 实际上只要记住正确的时间 t1 和公开的验证码 code1 把客户端时间调到 t1 再输入 code1 就验证通过了

    还是那个问题 技术上需要和可信平台交互信息来确保时间正确性
    要是只有你能对客户端的时间进行操作 那么客户端也可是为可信的 但现实情况可能不是这样 除非提供软硬件的整套解决方案做成一个黑盒 所以需要一个第三方的可信平台 比如前面几个说的带时钟的加密狗和联网的加密狗

    还有就是成本 技术门槛就可以挡住一部分人 投入多 时间长 怕被告(好像没什么用) 一起吃饭的时候抹不开面子(这个可能效果更好,那谁谁谁还没验收就把我们项目破解了兄弟们以后还怎么一起洗脚啊) 这些成本明显大于收益的时候也能达到防破解的效果

    结论: 用加密狗!
    belite
        29
    belite  
       87 天前
    楼上 记录时间的... 刷 bios 让时钟频率慢 60 或 600 倍 现实中是有的时钟不准不过没这么离谱 真实时间过去 60s 客户端增加 1s 你怎么区分时间是不对的?都不用这么麻烦 写个小程序每 0.1 秒重置一次时间 600 次循环后就是 60 秒后把客户端时间增加 1 秒 相当一给他 1 年的授权 但是他的时钟要跑 60 年才过期 而且时间一直也是往前走的 你只要从客户端上取时间这就无解
    nevadax
        30
    nevadax  
       87 天前
    @belite 唔。。。确实,刷 bios 这么逆天的操作还真没想到。

    op 说是桌面软件,不知道可不可以内网造一个自己的 license 服务器(客户没有任何权限),每隔一段时间和内网机器同步时间,类似于微软 KMS 那种。
    jstony
        31
    jstony  
       87 天前
    op 的应用既然跟时间相关联,直接买个内置 sim 卡的加密狗,软件从加密狗读系统时间,再更进一步,可以把部分算法直接放在加密狗里。
    kermitlee
        32
    kermitlee  
       87 天前
    思路一样,计算软件运行时间,如果运行时间大于授权使用时间也可以算为失效
    gamexg
        33
    gamexg  
       87 天前
    检查一些可能的时间,例如 windows 日志每个条目的时间,硬盘上各个文件创建\修改时间,拿最新的时间的和当前时间比较,如果有问题则认为时间有修改.

    不过如果价值大,还是搞加密狗比较省事.
    belite
        34
    belite  
       87 天前 via iPhone
    @nevadax 举个例子 时钟频率是硬件的改不了 但是取值应该可以做手脚 最简单成熟的还是加密狗
    belite
        35
    belite  
       87 天前
    客户端少就加搞几个密狗 多的话可以考虑部署一个激活服务像 nevadax 提的 激活服务器能联网最好不能联网就在激活服务器上插个加密狗
    所有直接或间接调用客户端时间的都是扯淡 根本原因还是那个 客户端的时间不可信 不借助第三方无解
    记录程序运行时长 esxi 快照恢复或者找到你记录运行时长的文件注、册表数、据库备份还原一下
    查看系统日志时间 若是客户将时间调到 2025 年产生了日志 时间校准后 发现被"回拨"了 这一年都用不了
    记录程序打开时间 更是扯淡
    fyxtc
        36
    fyxtc  
       87 天前
    找几个可用的时间戳 api 1-n ,启动的时候校验 apix 和本地时间的差值,然后随机时间随机调用 apix 和本地时间的差值,破解需要 hook 所有 api ,但是每次运行只会暴露当前使用的 api ,也就是你 api 集合越大越好,api 字符串不要使用常量,可以乱序拼接,可以走一层加密。这是确保客户端时间戳没有篡改的一种方式。
    forty
        37
    forty  
       87 天前
    搞个带 SIM 卡的加密狗就行了
    cndenis
        38
    cndenis  
       87 天前
    @forty 需要严格内网使用的地方, 用能连接外网的设备通常是违规的, 如果是保密单位的话, 插上去就刑了. 所以带 SIM 卡的加密狗最好是不要搞.
    forty
        39
    forty  
       87 天前
    @cndenis OP 是卖软件的, 不是买软件的, 你觉得他的软件可以卖到保密单位的话, 还能是盗版吗? 直接解除限制不就好了? 保密单位应该盗版 OP 的软件, 这个概率就不用考虑了吧
    kkk9
        40
    kkk9  
       87 天前
    @cndenis #38 真正的保密单位是需要审计源码的,根本不屑于用加密狗。能攀上保密单位这条大腿的人也不靠加密生存
    kice
        41
    kice  
       86 天前 via Android
    如果是需要完全离线,那基本上没啥办法。只能增加破解难度,例如各种加壳什么的。

    或者换一个思路,想办法让用户“更新”你的软件,例如推出新功能,或者一开始只能买阉割版。更新软件就相当于变相联网了。
    shuimugan
        42
    shuimugan  
       86 天前
    作为初中就开始自学破解的人,一瞬间脑子想过 N 种方案,同时想到的是更多破解思路和技巧……我建议就是简单搞搞就行了,防盗版一般靠新功能迭代和售后维护这种策略。你看 IDA Pro 这种专业搞反编译的逆向软件,自己还是被破解了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   940 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 22:38 · PVG 06:38 · LAX 15:38 · JFK 18:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.