electron 源码保护方案探讨。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问时复制粘贴 AI 生成的内容
Yeen
V2EX    程序员

electron 源码保护方案探讨。

  •  1
     
  •   Yeen 2021-11-20 14:11:31 +08:00 5880 次点击
    这是一个创建于 1451 天前的主题,其中的信息可能已经有所发展或是发生改变。
    打包工具:electron-builder ,前端框架 vue ,使用了不少 3rd 的 node modules

    目前需要能对 main proc 和 render proc 的 js 代码进行加密保护。
    目前看到比较靠谱的方案是 bytenode ,有没有实践过的同学来给个最小例子?
    或者还有没有侵入性较小更好的源码保护方案呢?
    23 条回复    2021-11-23 23:35:25 +08:00
    lizhenda
        1
    lizhenda  
       2021-11-20 14:26:57 +08:00
    核心逻辑写到 c++ ?
    Yeen
        2
    Yeen  
    OP
       2021-11-20 15:24:28 +08:00
    @lizhenda 这个倾入性太高了,,,...
    buffzty
        3
    buffzty  
       2021-11-20 15:34:05 +08:00
    你随便混淆加壳 只要有价值 很快就破解
    dcsuibian
        4
    dcsuibian  
       2021-11-20 15:51:52 +08:00   3
    一直很好奇,什么样的应用有价值到需要加密混淆呢?
    flood
        5
    flood  
       2021-11-20 15:52:06 +08:00
    可以换 nwjs 使用 bin
    mengyx
        6
    mengyx  
       2021-11-20 16:59:52 +08:00 via Android
    我遇到过将 js 编译为 v8 bytecode 的
    tomczhen
        7
    tomczhen  
       2021-11-20 17:15:37 +08:00 via Android
    只要代码一文不值就不会有人来破解。:doge:
    abear
        8
    abear  
       2021-11-20 17:17:29 +08:00
    编译 v8 bytecode ,,,大不了用 wasm
    iamzuoxinyu
        9
    iamzuoxinyu  
       2021-11-20 17:29:32 +08:00
    snapshot ?不过会影响热更新。
    rekulas
        10
    rekulas  
       2021-11-20 18:56:19 +08:00
    最核心写道 wasm 吧 也不复杂
    kidonng
        11
    kidonng  
       2021-11-20 19:13:07 +08:00 via Android
    唯一有效的方法:需要保护的代码放在服务端。
    lauix
        12
    lauix  
       2021-11-20 19:41:48 +08:00
    自从被破解了一次,就使用了 v8 bytecode 。非常安全
    12101111
        13
    12101111  
       2021-11-20 20:13:58 +08:00   1
    我破解过一些 electron 应用,主要是为了在我的 musl libc 的系统上用,因为我用的 musl libc/libc++运行不了给 glibc 的 electron 应用.(顺便说一下我把 electron 移植到了 musl libc 上: https://github.com/12101111/overlay/tree/master/dev-util/electron
    从防御破解的角度来说,如果想防源码泄露,建议的技术路线是 snapshot ,加强一点就是修改 v8 的 snapshot 相关的代码,比如改编码方式,再 AES 加密。密钥不要明摆着写死在程序了,可以是从程序本身算出来的。当然这需要有能力修改 v8 并重新编译整个 electron ,鉴于编译 electron 下载源码很繁琐且编译时间很长,这个属于侵入性较高的。
    简单一些的就是用 native module 把核心 js 代码混淆+加密成二进制的,然后运行时解密,同样加密的算法和解密密钥本身不要一眼就能逆出来。如果你懂 rust 的话,可以用 https://github.com/neon-bindings/neon + rust 一些加密库做,因为 Rust 编译出来的代码本身就比 C 难逆向,而且性能可能更高一些。
    jones2000
        14
    jones2000  
       2021-11-20 22:47:37 +08:00
    就一个 h5 页面加一个壳,有什么好破解的。 都是些业务创新的产品, 很少有技术创新的产品。
    2i2Re2PLMaDnghL
        15
    2i2Re2PLMaDnghL  
       2021-11-21 08:50:50 +08:00   1
    侵入性最小的源码保护方案:登记软件著作权
    2i2Re2PLMaDnghL
        16
    2i2Re2PLMaDnghL  
       2021-11-21 08:52:54 +08:00
    顺便,请确认下 3rd node modules 的授权许可,有可能发生任何类型的保护措施均违反许可证的情况。
    uqf0663
        17
    uqf0663  
       2021-11-21 09:19:15 +08:00
    解开 asar 的难度不大,但是 vue 的 dist 怎么变回源码?
    R4rvZ6agNVWr56V0
        18
    R4rvZ6agNVWr56V0  
       2021-11-21 22:59:44 +08:00
    @2i2Re2PLMaDnghL 没用。不一定是所有人都想破解代码做商业分发的。所以根本没发取证,更不用谈如何诉诸法律了。
    R4rvZ6agNVWr56V0
        19
    R4rvZ6agNVWr56V0  
       2021-11-21 23:02:44 +08:00
    如果是防止被人二次分发,那么核心逻辑被编译成机器码然后加虚拟机壳是比较安全的。其次就是混淆你 JS 的代码,增加破解难度。
    如果是为了安全,防止被破解绕过某些代码执行过程,这就基本没办法了。商业价值越高,被破解的概率越高。
    2i2Re2PLMaDnghL
        20
    2i2Re2PLMaDnghL  
       2021-11-22 09:09:55 +08:00
    @GeekGao 你的论据不够说明『没用』,只能说「不保证有用」,以及「保护面相对单一」。
    但这确实是「侵入性最小」的方案,无论它实际能发挥多大的用。
    pythonee
        21
    pythonee  
       2021-11-22 11:29:50 +08:00
    是不是可以看看 Gmail 在 js 保护方面是如何做的(外行瞎说的:)
    R4rvZ6agNVWr56V0
        22
    R4rvZ6agNVWr56V0  
       2021-11-23 23:34:58 +08:00
    @2i2Re2PLMaDnghL 强调用词的精确性没问题,但是大概率得不到保护。
    论据:几年前,中国某知名一线互联网企业盗用 ffmpg 为商业闭源项目,社区应对方案:PR 稿+社区耻辱名单
    R4rvZ6agNVWr56V0
        23
    R4rvZ6agNVWr56V0  
       2021-11-23 23:35:25 +08:00
    @pythonee 听说是 js 虚拟机
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     986 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 19:44 PVG 03:44 LAX 11:44 JFK 14:44
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86