V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
coolair
V2EX  ›  问与答

Electron 写的软件如何做到一机一码授权?

  •  
  •   coolair · 2023-04-11 08:57:34 +08:00 · 4226 次点击
    这是一个创建于 592 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我的想法是给他一个注册码,他用这个注册码在本地激活了软件,就无法再在其他机器上激活了,这个怎么实现?
    19 条回复    2023-04-11 16:04:00 +08:00
    gimp
        1
    gimp  
       2023-04-11 08:59:12 +08:00
    能联网激活吗
    gimp
        2
    gimp  
       2023-04-11 09:02:06 +08:00
    或者提供给他一个工具,获取他机器的唯一机器编码的,把这个编码给你,你用这个编码生成 KEY 发给他激活。
    zyxk
        3
    zyxk  
       2023-04-11 09:02:24 +08:00
    基本原理就是获取 cpu 硬盘 网卡 等的唯一 id, 再组合一下, 加密生成响应的激活码, 没用过 Electron, 应该可以读取硬件吧.
    yolee599
        4
    yolee599  
       2023-04-11 09:05:13 +08:00 via Android
    联网:这个不用我说了吧。
    离线:让用户生成机器唯一 ID ,发给你生成激活码,你再把激活码发给用户。
    coolair
        5
    coolair  
    OP
       2023-04-11 09:05:59 +08:00
    @gimp 可以联网
    babytomas
        6
    babytomas  
       2023-04-11 09:27:37 +08:00
    可以利用 canvas 渲染偏差生成指纹,并以此作为设备 ID 获取授权。
    hefish
        7
    hefish  
       2023-04-11 09:30:51 +08:00
    联网就好办了。
    生成一个 kv 对给客户,提交到服务器上来,验证了就行。
    ybz
        8
    ybz  
       2023-04-11 09:39:48 +08:00
    @hefish 那如何防止用户拿这个 kv 用另外一台机器提交呢
    proxytoworld
        9
    proxytoworld  
       2023-04-11 09:43:13 +08:00
    生成机器唯一 id
    chengxy
        10
    chengxy  
       2023-04-11 09:48:36 +08:00
    可以参考这个 https://webauthn.io/
    luohechen
        11
    luohechen  
       2023-04-11 09:52:16 +08:00 via Android
    @babytomas 好奇这个方案,大佬方便推荐下相关文章么,按关键字没搜索到,感谢!
    0o0O0o0O0o
        12
    0o0O0o0O0o  
       2023-04-11 09:58:02 +08:00
    既然 electron 那就用 js fingerprint 技术获取唯一 ID ,其实你初次启动随机生成个 uuid 就行;

    能联网才是关键,提交 key-uuid 进行激活,每个 key 只能激活一次;用带 seq 的心跳包确保同一时间只能一台机器用,发现作弊就 ban 了。

    这样的方案实现起来成本低,别的太 hack 的技术实在没必要,攻防太累,客户端应用谁也不能真正防破解(包括这个方案)。
    0o0O0o0O0o
        13
    0o0O0o0O0o  
       2023-04-11 09:59:19 +08:00   ❤️ 1
    polarbearn
        14
    polarbearn  
       2023-04-11 10:43:05 +08:00
    用 electron 写的防不住的,反编译,全部代码都出来了,也有各自方法调出控制台
    polarbearn
        15
    polarbearn  
       2023-04-11 10:55:04 +08:00
    调出控制台,修改授权的判断代码,随意输入都能授权成功
    https://cdnjson.com/images/2023/04/11/auto.gif
    n0th1n9
        16
    n0th1n9  
       2023-04-11 11:01:55 +08:00
    @polarbearn 可以使用 [bytenode]( https://github.com/bytenode/bytenode) 把 js 搞成 v8 字节码,就比较难修改代码了
    babytomas
        17
    babytomas  
       2023-04-11 12:03:19 +08:00   ❤️ 1
    @luohechen

    前面提到 canvas 的方法你可以使用现成的 fingerprint-js 生成唯一 ID 。

    另外核心代码可以使用 javascript-obfuscator 处理一遍、这样即使是别人反向把源代码弄出来也已经不具备可读性了。
    hefish
        18
    hefish  
       2023-04-11 13:04:57 +08:00
    @ybz 不用防。 可以记录每个 key 的验证次数,明显频率过高的,就 blacklisted 。 别管太死,太死了也不适合自己的产品推广嘛。
    ybz
        19
    ybz  
       2023-04-11 16:04:00 +08:00
    @hefish 很有道理,不一样的角度解决技术问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   996 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 20:01 · PVG 04:01 · LAX 12:01 · JFK 15:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.