怎么能不完全把一个 node 项目给别人,比如代码混淆一部分,或者用自己的 npm 源做插件 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
289396212
V2EX    Node.js

怎么能不完全把一个 node 项目给别人,比如代码混淆一部分,或者用自己的 npm 源做插件

  •  
  •   289396212 2024-07-28 10:53:09 +08:00 4411 次点击
    这是一个创建于 439 天前的主题,其中的信息可能已经有所发展或是发生改变。
    21 条回复    2024-07-30 10:16:52 +08:00
    alanhe421
        1
    alanhe421  
       2024-07-28 10:57:02 +08:00
    牵扯到编译打包不就好了吗,平时访问的网站说白了代码也是给了客户端即用户。
    rabbbit
        2
    rabbbit  
       2024-07-28 10:59:58 +08:00
    emscripten
    EndlessMemory
        4
    EndlessMemory  
       2024-07-28 12:27:05 +08:00
    看你想法,如果只是不想别人轻易弄懂你的代码,那就上 ob 混淆+反调试
    taotaodaddy
        5
    taotaodaddy  
       2024-07-28 12:30:49 +08:00
    v8 jsc,我在 electron 项目中已经使用了
    tcper
        6
    tcper  
       2024-07-28 12:38:40 +08:00
    虽然 wasm 不是为了代码混淆的,但是你用别的语言搞一个 wasm 包,解密确实费劲不少
    BaiLinfeng
        7
    BaiLinfeng  
       2024-07-28 14:58:35 +08:00
    所以这是啥保密的项目尼?这样的做法市面上多不多
    wjx0912
        8
    wjx0912  
       2024-07-28 15:00:48 +08:00
    vx7298
        9
    vx7298  
       2024-07-28 15:04:39 +08:00
    用 golang 吧,哈哈,
    humbass
        10
    humbass  
       2024-07-28 21:03:43 +08:00
    同 5#,nodejs 也可以直接使用 jsc.
    zsj1029334
        11
    zsj1029334  
       2024-07-29 00:51:52 +08:00 via iPhone
    Bun 包子,新 js 运行时,后端的话可以直接编译单个可执行文件,比如 express 单文件运行,打包大小 90mb ,还有 nodejs22 以后版本也在往这个方向发展
    visper
        12
    visper  
       2024-07-29 09:02:05 +08:00
    v8 编译 js 成字节码。
    lee88688
        13
    lee88688  
       2024-07-29 10:17:15 +08:00
    @taotaodaddy 请问一下有没有相关的教程或者文档?我去官方没搜到相关的文档和教程。
    taotaodaddy
        14
    taotaodaddy  
       2024-07-29 10:42:25 +08:00
    @lee88688

    用的是这个 https://github.com/bytenode/bytenode

    支持把一段代码编译

    也支持整个文件编译:
    npx bytenode -c ./public/a.js
    然后
    require('./a.jsc');
    taotaodaddy
        15
    taotaodaddy  
       2024-07-29 10:50:32 +08:00
    @lee88688
    忘记说了,还有一部分代码用 dll 实现了
    总体来说,dll 的安全性最佳
    其次是 v8 字节码 (jsc)
    混淆更低

    另外 node 支持 C++ addons ,可以作为 dll 的替代方案
    lisxour
        16
    lisxour  
       2024-07-29 11:08:16 +08:00
    目前纯代码混淆是比较稳当且成本廉价的方案,上面提到的各种编译打包的方案(我指的是所有,包括 wasm )都存在两个大问题,上面没有一个人提到:
    1. 有的打包只是纯将 node 和代码打包在一起,并没有任何编译,很容易解包出来
    2. 打包编译对项目要求贼高,项目是 cjs 还是 esm 都有影响,有些库打包不进去报错(包括很多常用库),跨平台兼容问题
    lisxour
        17
    lisxour  
       2024-07-29 11:10:11 +08:00
    @lisxour 特别是第二条,在现实项目面前,这起码扼杀了 60%-70%的 node 项目,除非你为了兼容打包,对项目结构做大改。
    SchwarzeR
        18
    SchwarzeR  
       2024-07-29 13:27:39 +08:00
    核心逻辑写成 wasm ?就是有点折腾还会牵扯到别的语言[比如 rust
    lee88688
        19
    lee88688  
       2024-07-30 08:03:49 +08:00
    @taotaodaddy 官方文档上二进制扩展基本都是推荐 addon ,dll 这种动态链接库目前有比较好的包来加载吗?例如 Python 官方就给了一个很方便的加载和使用动态链接库的方案。
    lee88688
        20
    lee88688  
       2024-07-30 08:05:17 +08:00
    写成 wasm 加载肯定很方便,但是毕竟要使用其他语言编写,开发成本会增加很多。
    taotaodaddy
        21
    taotaodaddy  
       2024-07-30 10:16:52 +08:00
    @lee88688 dll 的包官方的是 ffi-napi,我开始用的是这个包,后来换掉了,因为中间发现一些问题(问题和 electron 的版本有关系)
    最终用的是 koffi
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3983 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 04:10 PVG 12:10 LAX 21:10 JFK 00:10
    Do have faith in what you're doing.
    ubao 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